Transformer个人理解&学习小结

        当时传统的seq2seq模型由于核心的Encoder和Decoder原理还是RNN,在处理长序列时容易出现梯度消失和梯度爆炸等限制问题,且难以捕捉长距离的上下文关系。以及CNN卷积操作通常计算由于矩阵点积尺寸需要固定,每次处理序列的时候需要对长度进行预处理,结果就是效率低下。

        这时,最早由Google在2017年论文Attention Is All You Need提出的Transformer,采用了Self-attention自主力机制很好的解决了这些问题。        

        多头自注意力Multi-head self attention

        本人之前做过简单的理解(从seq2到seq2到self-attention个人理解&学习小结-CSDN博客),学完后决定对Self-attention再作一些理解补充。

        Self-attention的理论直观结构图:

其中:a为输入序列,蓝色矩形部分是Self-attention的操作,最终的输出序列b由所有的a计算得到,携带了a每个位置与其他位置的相关性,这是之前的seq2seq所没有的。

Self-attention就好像我们一个个体读一句话一样,读完一句话以后,再次读它每个字词的时候,就会注意到上下文哪些是有关联的。而Transformer采用的则是Self-attention的一种小变形:采用了掩码多头自注意力(Masked-Multi-head self attention)

        

        为什么是Masked-Multi-head self attention?

        对比与传统Self-attention的最大区别就是“掩码”和“多头”:

        “掩码”:读到那里算哪里,只管前面不管后面(落实到计算输出序列b不是由所有的a计算得到,而是自身和前面部分组成的序列a')

        “多头”:如果说Self-attention像是一个个体,那么Masked-Multi-head self attention就像是多个个体在一起思考,他们分别考虑不同的事情,例如一句话的时间,地点,人物。然后再把大家的思想结合起来,那么对一句话的理解程度可想而知。

        在每个时间点只能关注到之前时间的信息,不能了解未来的信息,这些可以帮助Transformer模型在阅读序列时维持字词时间的因果关系,并且对未来的信息进行模糊处理(过滤)。因此,Transformer使用掩码多头自注意力来处理时间序列数据,以便更好地捕获序列的依赖关系。

Feed Forward神经网络层 

        

        先介绍残差连接:将输入直接加到神经网络层的输出上,使得梯度更容易地在网络中传播,也很好地缓解了梯度消失地问题。在我们的Transformer模型中,通常会在每个子层(如Self-attention和Feed-Forward层)的输入与输出之间添加残差连接,能得到更好的效果

        我们的Feed-Forward层的作用就是对输入进行非线性变换

        它由两个全连接层组成,之间有一个激活函数(ReLU常见),可以在每个位置上对特征进行灵活的转换和组合。这有助于契合不同模型的需要,从而提高了Transformer模型的表达能力。

        它与掩码多头自注意力机制(Masked-Multi-head self attention)等共同构成了Transformer的重要神经网络层:Feed-Forward

模型个人理解

        当我初次学的时候,有了上面的理解,再加上Encoder和Decoder的知识基础,Transformer模型直接水到渠成,跃然纸上,直接拍手高呼绝了(不是)

        Transformer模型图:

        从总体上来看,它由Encoder(左)和Decoder(右)两大部分组成

        结合之前提到的掩码多头自注意机制+全连接神经网络,配合上残差连接(Add&Norm旁边的黑箭头)。

我们走一遍图流程:

输入数据经过编码器(Encoder)部分:

        首先,从左下角的Inputs输入开始,输入数据经过一个嵌入层(embedding layer)转换为词嵌入向量。

        然后,词嵌入向量通过位置编码(Positional Encoding)进行处理,以保留词语在句子中的位置信息。

        数据经过多个相同的Transformer Block,每个Block包括Self-Attention层和Feed-Forward神经网络层。在Self-Attention层中,模型可以在一个句子中的所有词语之间进行注意力计算。

        最后,通过编码器的输出,得到了编码后的词语表示。

经过编码器后的数据传输到解码器(Decoder)部分:

        解码器同样包含多个Transformer Block。在每个Block中,除了Self-Attention和Feed-Forward层外,还包含一个Encoder-Decoder Attention层,该层允许解码器在生成输出时,关注输入句子的信息。

        解码器还通过自注意力机制,以及位置编码对输入进行处理,同时也经过多个Transformer Block的处理。

最后,解码器的输出通过一个全连接层,生成最终的输出结果。

整体来说,Transformer的处理数据过程主要包括输入的嵌入,位置编码,经过多个Transformer Block的处理,并且通过编码器和解码器的交互和最终的输出,完成了对序列数据的处理和翻译等任务。

---------------------------------------------------------------------------------------------------------------------------------

感谢阅读,学无止境,我们一起进步鸭!

参考资料:

为什么我还是无法理解transformer? - 知乎

Attention Is All You Need

               

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值