Transformer模型是一种基于自注意力机制(Self-Attention)的深度学习架构,主要用于处理序列数据(如自然语言文本)。它由Google的研究团队在2017年的论文《Attention Is All You Need》中首次提出,彻底改变了自然语言处理(NLP)领域,并成为后续众多模型(如BERT、GPT等)的核心基础。
主要学习参考:
【超详细】【原理篇&实战篇】一文读懂Transformer-优快云博客
Transformer论文逐段精读【论文精读】_哔哩哔哩_bilibili
1.主要模型框架
Transformer 主要由 Encoder-Decoder 结构 组成,每个部分由多个相同的 编码器(Encoder) 和 解码器(Decoder) 组成。
(1) 编码器(Encoder)
-
输入处理:输入序列通过词嵌入(Embedding)转换成向量,并加上 位置编码(Positional Encoding),因为 Transformer 没有循环结构,需要额外的位置信息。
-
多头自注意力(Multi-Head Self-Attention):计算每个词对整个句子中其他词的依赖关系,能够关注不同的语义层面。
-
前馈神经网络(Feed-Forward Network, FFN):每个编码层都有一个独立的前馈神经网络,提高模型的表达能力。
-
残差连接(Residual Connection)和层归一化(Layer Normalization):稳定训练过程,加速收敛。
(2) 解码器(Decoder)
-
Masked Multi-Head Self-Attention:与编码器不同,解码器的自注意力层会遮挡(mask)未来的词,确保当前词只能关注之前的词,避免信息泄露。
-
编码器-解码器注意力(Encoder-Decoder Attention):计算解码器当前状态与编码器输出之间的注意力,获取全局信息。
-
FFN 和残差连接:类似编码器部分,解码器也使用前馈网络和残差连接来优化训练。
简化来讲就是这样
2. Transformer 的核心算法
Transformer 的关键在于自注意力机制(Self-Attention)和 多头注意力(Multi-Head Attention),主要计算如下:
(1) 自注意力机制(Self-Attention)
目标:计算输入序列中每个单词与其他单词的关系,并生成加权表示。
计算方式:
-
计算 查询(Query, Q)、键(Key, K) 和 值(Value, V):
,
,
其中,
是输入序列的嵌入表示,
,
,
是可训练的权重矩阵。
-
计算注意力分数:
其中,
是缩放因子,防止数值过大影响梯度计算。
(2) 多头注意力(Multi-Head Attention)
为了增强模型的表达能力,Transformer 采用 多头注意力,即使用多个不同的注意力头(Head)并行计算:
每个头的计算方式与普通自注意力一致,但使用不同的权重矩阵。
自注意力机制的推导:
①定义 Q、K、V
在 Transformer 中,每个输入词 XXX 通过一个 线性变换 生成 查询(Query, Q)、键(Key, K) 和 值(Value, V):
其中:
Q(查询,Query):表示当前词对其他词的关注程度
K(键,Key):用于计算当前词和其他词的匹配程度
V(值,Value):存储词的真实信息
这些 Q,K,VQ, K, VQ,K,V 矩阵的维度通常是:
是序列长度(即多少个词)
是词嵌入的维度(如 512 或 768 )
② 计算注意力分数
我们希望衡量 查询(Q) 和 键(K) 之间的相似度(即:某个词应该关注哪些词)。
可以用点积(Dot Product)来计算两个向量的相似度:![]()
其中,
的形状是
的形状是
结果
形状是
,表示 序列中每个词对其他词的关注程度
问题:为什么用点积?
点积可以衡量 向量之间的相似性:当两个向量方向相同时,点积较大;当方向正交时,点积接近 0。
③ 归一化(缩放因子)
![]()
由于
的值可能很大,导致 softmax 计算时梯度过大,影响训练的稳定性。
解决方法:除以
进行归一化,防止梯度消失或爆炸。
为什么是
?
从数学角度来看,点积的数值范围会随
增大而增大,使得 softmax 变得过于极端(梯度消失或爆炸)。
归一化后,点积的值接近 0 均值,softmax 更平滑,训练更稳定。
④ 计算 softmax
![]()
softmax 作用是 将注意力分数归一化为概率,确保所有词的注意力加起来等于 1。
每一行表示 当前词对所有词的注意力权重。
⑤ 加权求和
最后,我们用这个归一化的注意力权重 乘以值矩阵 V:
![]()
目的是用注意力权重对 值矩阵(V) 进行加权求和,从而得到最终的注意力向量。
3. Transformer 的计算流程
-
输入序列嵌入:输入文本转换为词向量,并添加位置编码(Positional Encoding)。
-
编码器层:
-
多头自注意力 计算词间关系
-
前馈网络 进行特征变换
-
残差连接 + 层归一化 进行稳定训练
-
-
解码器层:
-
Masked 多头自注意力 确保当前词不影响未来词
-
编码器-解码器注意力 关注源文本信息
-
前馈网络 + 残差连接 提高模型表达能力
-
-
输出层:
-
最终输出经过 softmax 变换,得到预测的下一个单词的概率分布。
-