Transformer 是一种基于自注意力机制(Self-Attention)的【编码器-解码器】架构(由 Google 在 2017 年提出)。
Transformer 与传统的 RNN(循环神经网络)和CNN(卷积神经网络)不同,它的编码器和解码器都是完全并行的。
本瓜之前也不太了解这两个东西,所以不妨先来了解下传统的 RNN 和 CNN 是怎样的?
- RNN 特征:当前的输出与前面的输出有关;
如图:
在 RNN 中,每个时间步都有一个隐藏状态(hidden state),它存储了之前时间步的信息。
在每个时间步,RNN 接收当前的输入和前一个时间步的隐藏状态,经过一系列的计算得到当前时间步的输出和新的隐藏状态。
这个隐藏状态可以被看作是 RNN 的记忆,它可以捕捉到序列中的上下文信息。
比如,当处理文本时,RNN 可以利用之前的单词来理解当前的单词,并根据上下文预测下一个单词。
- CNN 特征:创建一个网络,早期层的神经元将提取局部视觉特征,后期层的神经元将特征组合起来以形成高阶特征。
如图,卷积操作可以看作是一种滤波器,它在输入数据上滑动并逐个元素地执行计算,从而生成输出特征图。
回到 Transformer ,它的编码器和解码器均由多层自注意力和前向神经网络构成,层与层之间通过【残差连接】和【归一化】处理进行连接。
所以,小结一下:
Transformer:允许模型在处理每个位置时关注其他位置的信息,从而能够捕捉到全局的语义信息; RNN:是通过循环连接逐步传递信息; CNN:主要通过局部感知采样来处理局部特征;
一图胜千言,Transformer 的架构核心:
在这其中,Multi-Head Attention 上方的 Add & Norm 层,Add 表示残差连接,用于防止网络退化,Norm 则用于对每一层的激活值进行归一化。
残差连接 和 归一化 过程有必要进一步解释 ~
(一)残差连接
残差连接是一种网络结构设计,通过将输入添加到网络输出来创建捷径路径。这样连接允许信息在网络中进行直接传递,可以解决深度网络中的梯度消失和梯度爆炸等问题。
残差连接的公式表示如下:
代码语言:javascript复制y = F(x) x
其中,x 是输入,F(x) 是通过网络的非线性变换得到的输出,y 是最终的网络输出。
通过残差连接,网络可以更容易地学习到 F(x) 的微小调整,而不会丢失原始输入的信息。
这就像数学里的减法一样,残差连接把输入数据和输出数据相减,得到一个残差。这个残差可以让神经网络更容易学习,就像把 3 拆成 2 1 更容易算一样。
(二)归一化
归一化则是一种对网络中间层输出进行规范化的技术,能提高网络的泛化能力、加速收敛、抑制过拟合,并能够处理输入数据分布的变化。
常见的归一化技术包括:批归一化和层归一化。
- 批归一化:通过对每个特征维度上的数据进行均值和方差的标准化来规范化输出。
- 层归一化:计算每个样本在某一层的所有特征维度上的均值和方差,并使用这些统计量进行标准化。
用通俗的语言和比方来解释归一化:
假设你有一个魔法秤,可以测量物品的重量。你想比较两个水果的重量,一个是苹果,一个是橙子。但是你发现苹果很小,重量只有100克,而橙子很大,重量有1000克。直接比较它们的重量可能会让你感觉橙子更重,但实际上我们知道橙子只是因为它的体积大,所以重量看起来更大。
这时候,归一化就像是用一个魔法手段,将这些重量进行了统一处理,使得它们可以公平地比较。
一种简单的归一化方法是将重量除以水果的大小(体积)。通过这样的处理,我们得到了每个水果的“单位重量”,就好像我们比较的是它们的“密度”。
现在我们可以看到,无论是苹果还是橙子,它们的单位重量都是10克/立方厘米。通过这种归一化处理,我们就可以公平地比较它们的重量了。
在实际应用中,归一化也有其他形式的处理方式,但总的目标都是为了保证数据的公平和可比性。
-图片由 midjourney 所绘制-
自注意力机制
接下来着重分析下自注意力机制~
自注意力机制是 Transformer 架构的核心组成部分,它能够对输入序列中的每一个元素进行加权处理,从而更好地捕捉序列中的信息。
具体来说,自注意力机制会计算出每个元素与其他元素的相似度,然后根据相似度对它们进行加权求和(shifted right)。
相似度的计算包括 2 个步骤:
1、 计算注意力分数(Attention Scores):对于每个元素,计算它与其他元素的内积,然后除以一个缩放因子,即可得到该元素与其他元素的相似度(注意力分数);
2、 进行加权求和:对于每个元素,将它与其他元素的表示向量进行加权求和,以此得到该元素的新表示向量。(其中,权重即为该元素与其他元素的注意力分数);
所以,如此这般,每个元素的表示都包含了整个序列的信息,从而使得模型更加全面地理解输入。
小结
实际上,RNN、CNN 和 Transformer 并非相互排斥,在不同场景下,它们具有不同的优势和适用性。
- RNN 在处理序列数据和时序关系时表现出色;
- CNN 在处理网格结构数据(如图像)时效果显著;
- Transformer 在处理自然语言任务中具有突出的性能;
GPT 利用 Transformer 架构进行预训练和微调,使得计算机能够生成与人类语言相似的文本,再结合正反馈人工训练机制,使得 GPT 在写摘要、文档生成、聊天机器人等方面才有了突出的表现~