今天的内容主要是Encoder部分的具体流程,多头注意力和交叉注意力,还是会有比较多的公式来厘清每部分的输入和输出以及对应的方法。
如第一篇所说,Encoder是Transformer的第一部分,其主要任务是将输入序列(如文本、词语或字符)编码为一个上下文丰富的表示,Encoder 的输出是 Decoder 的输入的一部分(用作 Attention 机制中的 和)。
堆叠多个Encoder层:一个完整的Encoder由多层相同结构的Encoder组成(通常为6个或更多个)。每层Encoder都包括两个主要子模块:
每层Encoder通过残差连接(Residual Connection) 和**层归一化(Layer Normalization)**来稳定训练和加速收敛。
输入:
["I", "love", "cats"]
。方法:
输出:
输入:
方法:
1. 投影为查询、键、值:
输入矩阵X′X'X′ 会通过三组可训练学习到的投影矩阵分别映射为查询(Query, QQQ)、键(Key, KKK)和值(Value, VVV),形状分别为(n,dk)(n, d_k)(n,dk)、(n,dk)(n, d_k)(n,dk)、(n,dv)(n, d_v)(n,dv)。也就是说,对输入做线性变换得到上一篇说的Q、K、VQ、K、VQ、K、V。
Q=X′WQ,K=X′WK,V=X′WV Q = X'W_Q, \quad K = X'W_K, \quad V = X'W_V Q=X′WQ,K=X′WK,V=X′WV
其中 WQ,WK,WVW_Q, W_K, W_VWQ,WK,WV是可以通过训练学习到的参数矩阵。
2. 计算注意力权重:
使用以下公式计算QQQ 和KKK 的点积(即相关性),并通过 softmax 得到权重分布:
Attention(Q,K,V)=softmax(QKTdk)V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqrt{d_k}}\right)V Attention(Q,K,V)=softmax(dk