Transformer论文阅读笔记

📅 发布时间:2026/7/8 18:59:48 👁️ 浏览次数:
Transformer论文阅读笔记
Transformer最初用于机器翻译特点是只用了注意力机制将所有的循环层全部换成了mult-headed self-attention。文章发布时间(2017)时主流架构为RNNRNN的特点是从序列的左往右一个一个做比如一个句子第t个词会计算一个输出叫隐藏状态htht由上一个隐藏状态ht-1与当前词做计算得到输出以此处理时序信息。但是RNN缺点也是因为时序性第一时序处理难以并行算ht时必须保证ht-1已经完成计算比如算第100个词时必须时序的算100步导致无法并行。第二是历史信息是一步一步向后传递若时序比较长历史信息可能会丢掉如果不想丢掉的话就必须做一个较大的ht但是这样内存开销很大。文章中attention机制主要用在将编码器的东西很有效的传给解码器。相关工作中提到如何使用CNN替换RNN来减少时序计算。CNN对比较长的序列难以建模用CNN做计算时每一次它是去看一个较小的窗口比如看一个3x3的像素块如果两个像素相隔较远就要用很多层卷积来将两个像素融合起来但是用Transformer中的注意力机制时可以一次性看到所有像素一层卷积就可以看到整个序列。卷积库做多个输出通道不同通道可以识别不一样的模式而Transformer中Multi-Head Attention可以模拟卷积神经网络多输出通道的一个效果。编码器是将一个输入转为相同长度的向量表示可以一次性看完整个句子解码器是一个一个生成即自回归(auto-regressive)在过去时段的输出同时作为输入。编码器(EnCode)N6即重复6个layer(层)每个layer有两个sub-layers(子层)分别是multi-head self-attention meachanism与position-wise fully connected feed-forward network(就是一个MLP)每个子层都用了一个残差连接(residual connection)子层公式LayerNorm(xSublayer(x))。残差需要输入与输出维度大小一致不一样的话需要做投影简单起见均设置为512维编码器可调参数N与维数解码器(DeCode)同样是N6但是解码器有除了与编码器一样的两个子层之外还有第三个子层也是multi-head attention同样子层有残差连接子层用LayerNorm。解码器做的是自回归当前的输入集是上面一些时刻的输出意味着在做预测时看不到之后的一些输出但是在注意力机制中每一次可以看到一个完整的输入即解码器训练时预测第t个时不能看到t之后的输入为了避免情况发生使用一个带掩码的注意力机制即第三层Masked multi-head attention,保证训练与预测的行为是一致的Transformer中注意力机制为scaled dot-product attention其中query与key的长度是等长的为dkvalue为dv具体计算是对每一个query和key做内积作为相似度如果两个向量的long-norm模长相同内积值即余弦值越大表示相似度越高为0则最低相似度再除以根号dk即向量长度再通过softmax(归一化指数函数)得到一个权重再结合value得到结果。可以通过两个矩阵的乘法来快速并行计算得到结果。一般有两种注意力机制additive attention 与 dot-product attention其中additive attention用来处理query与key长度不一致的计算dot-product与当前注意力机制不同在于当前注意力机制中相似度除了query同时等于key的长度根号dk。当dk很大时key之间的相对差距会变大导致最后的softmax结果中有些值非常接近与1其他都接近于0算梯度时会变的非常小导致跑不起来。与其做单个注意力函数不如把vkq投影到低维h次再做h次的注意力函数最后合并并投影得到结果在Transformer中有三种注意力机制使用情况在输入层KVQ三个输入为同一输入复制三次为自注意力机制。在解码器时输入与编码器一样但是处理时通过Mask把第t个之后的权重设置为0。第三个注意力机制为非自注意力机制KV来自编码器输出Q来自于解码器的下一个输入Feed forward就是MLP与MLP不一样的是其作用在最后一个维度。在RNN中通过获取上一个词的输出结果作为输入来获取历史信息而在Transformer中是将时序信息作为一个信息并且加入到输入中来确保时序性不同神经网络的性能