Foreword写在前面的话:
大家好,我是一名刚开始学习Transformer的新手。这篇文章是我在学习Transformer过程中的一些笔记和心得,希望能和同样在学习人工智能深度学习模型的朋友们分享。由于我的知识有限,文章中可能存在错误或不准确的地方,欢迎大家在评论区提出建议和指正。我非常期待大家的反馈,以便我能不断学习和进步。同时,我也会在文章中注明参考的资料,以示对原作者的尊重。
PS:本帖以记录学习心得和课堂笔记为主,没有其他大博主那么专业,但是简单易懂^-^
本贴的其他相关学习笔记资料可以通过订阅专栏获取,喜欢的小伙伴可以多多点赞+关注呀!后续会 持续更新相关资源的~
-本帖示意图源自b站课程截图和原论文图示,引号部分表示引自原论文原句,如有侵权请联系作者删除~
课程学习资源:根据b站Transformer论文逐段精读【论文精读】 视频学习记录而成。原视频网址:Transformer论文逐段精读【论文精读】_哔哩哔哩_bilibili
先验知识补充:
序列转录模型Sequence Transduction Model:给你一个序列,生成另外一个序列。如:英文翻译成中文
Abstract论文摘要分析:
“The Transformer, based solely on attention mechanisms, dispensing with recurrence and convolutions entirely.”——引自原论文,作者说明transformer仅仅使用了自注意力机制,而并没有使用循环和卷积的架构。(和之前大家表现很好的模型的架构长得不一样)
“Being more parallelizable and requiring significantly less time to train”——引自原论文,作者说到其并行计算能力更佳+训练耗时更短
最开始的时候,Transformer整体架构是针对于机器翻译而开发的
Conclusion论文结论分析:
- Multi-headed self-attention多头自注意力机制
Introduction and Background:
- 2017年最常用的时序模型是RNN Recurrent Neural Network(包括LSTM long short-term memory长短时记忆 和 GRU gated recurrent neural networks 门控循环神经网络架构)
- GRU用于解决RNN在处理长序列数据是可能会发生的梯度消失和梯度爆炸问题-通过引入门控机制,更好地捕捉长距离依赖关系。
- 不使用循环神经层,而是纯基于注意力机制
- 模拟卷积神经网络的多输出通道的效果--transformer的多头自注意力机制
- “the Transformer is the first transduction model relying entirely on self-attention to compute representations of its input and output without using sequence-aligned RNNs or convolution.”指的是说transformer是第一个利用自注意力机制来做encode到decode架构的模型。
Model Architecture模型架构:
- 当前(2017)现状:“Most competitive neural sequence transduction models have an encoder-decoder structure.”目前市面上的神经序列转录模型基本上都采用了编码器-解码器这个架构。
- 编码器encoder:就是将输入序列(x1, ...,xn)转化为机器学习可以理解的向量(z1, ..., zn)。
- 解码器decoder:将编码器的输出序列转化成最终的输出序列(y1, ..., ym) -m与n可以相同也可以不同,因为翻译句子的时候不一定翻译后的结果与原文长度相同。
- 注意:在编码的时候可以一次性看完整个句子,但是在解码的时候只能一个一个生成--即自回归模型Auto-regressive model AR模型
- 因此,transformer也通过堆-自注意力和point-wise堆在一起 使用了这个结构:“The Transformer follows this overall architecture using stacked self-attention and point-wise, fully connected layers for both the encoder and decoder.”
(Transformer示意图引自原论文Attention Is All You Need)
- 在这幅图中,左边是编码器,右边是解码器
- Embedding:嵌入层(encoder和decoder都有)
- “N×”指的是N个层layer叠在一起
- Feed Forward Neural Network 前馈神经网络
- 编码器的输出作为解码器的输入
- 解码器相对于编码器多了一个Masked Multi-Head Attention
具体模块的实现:
- 基础知识补充:MLP Multilayer Perceptron多层感知机-经典的神经网络架构,由输入层+隐藏层+输出层组成(每层由多个神经元组成)-能够通过隐藏层的非线性激活函数拟合复杂的非线性关系
- 基础知识补充:Batch Normalization BN,也成为Batch Norm批量归一化,是深度学习中一种重要的技术,用于加速神经网络的训练过程、稳定模型的收敛并缓解梯度消失和梯度爆炸等问题。-用于解决内部协变量偏移(随着网络层数增加,前一层输出的分布会发生变化从而导致下一层的输入分布发生偏移-即内部协变量偏移),BN通过归一化每一层(列,当输入的是二维数据时)的输入,使其均值为0,方差为1,从而减小输入数据分布的变化。
- Transformer对BN的修改:LayerNorm,在归一化时将每一行(当输入数据为二维时)变为均值=0,方差=1。可以理解为layernorm就是把数据转置后放入batchnorm的结果。
- 解码器运用自回归机制:当前输出的输入集其实是上面一些时刻的输出。因此这意味着:在预测t时刻的输出时,不应该看到t时刻以后的那些输入。所以为了避免这种机制被破坏(因为自注意力机制意味着机器可以看到所有的输入),作者采用了一个带掩码的注意力机制masked multi-head attention
Scaled Dot-Product Attention(可以把scaled理解为)
- “The input consists of queries and keys of dimension dk, and values of dimension dv.”
Query 和 key 这两个向量做内积,若这两个向量的长度相等,内积的值越大,表明这两个向量的相似度就越高;若内积的值=0,说明两向量正交。
- 之后再除以向量长度√dk,再放进softmax function,就会得到n个非负的加起来和等于1的权重。再把对应的权重作用到value上就得到输出了(但是在实际应用中这样一个一个算出输出效率太低,因此可以进一步修改)
- 进一步修改:可以把query写成一个矩阵,做两次矩阵乘法
- 两种常见的注意力机制:1)加型注意力机制additive attention,用于处理query和key不等长的情况;2)点积注意力机制dot-product attention (dot-product attention is identical to our algorithm,except for the scaling factor of
)
- 为什么该文作者采用scaled dot-product attention而非单纯的dot-product attention?避免在套完softmax函数后得到的值向0和1两端靠拢-梯度变小-跑不动
- Mask:当计算到qt时不让它看到t之后的kt+1,...,kn--即先把k值全部算出来时候,将k时刻以后的k值全部换成很大的负数(套入softmax函数后就会变成0-即权重变为0-即在算output的时候不会考虑t+1及以后时刻的k),从而达到mask掩盖的效果。
Multi-Head Attention 多头注意力机制函数
- 即把整个query、key、value投影到低维度(即进入线性层linear)h次,再做h次的注意力函数(就是h次的Scaled Dot-Product Attention),然后每一个函数的输出(h个)把它们并在一起,然后再投影(linear层)得到我们最后的输出。
Application of Attention in our Model在transformer这个模型里面是如何使用注意力的
- 假设输入的句子长度=n,编码器的注意力的输入其实是n个长为d的向量
- 数据进入编码器后一分为三作为key,query,value,这里其实是说明这三者就是一个东西(其实就是自注意力)。n个query对应n个输出(输出实际上就是value的一个加权和,权重来自query和key)
- 绿色笔这里圈出的部分就是自注意力了,这里是将编码器输出的key和value,以及解码器自身得到的query作为输入处理。然后query计算时,相似度高的权重更大,比如第二个绿色向量对应的query的关于hello的权重就更大。
-
Position-wise Feed-Forward Networks(fully connected feed-forward network-实际上就是只作用在最后一个维度的MLP)
Embeddings and Softmax
Positional Encoding (在attention的输入里面加入时序信息)
由于输出是value的一个加权和,权重是query和key之间的距离,与序列信息无关,所以当处理时序信息时(比如将同一句话的词语顺序打乱-即语义会发生变化),此时光靠attention机制得到的输出还是一样的,很明显有问题。(attention无法处理时序信息
最后,感谢每一位阅读这篇文章的朋友,你们的反馈对我来说非常宝贵。如果有任何问题或建议,请随时告诉我。让我们一起学习和进步吧!如果您喜欢我的内容,别忘了点赞和关注哦,我会定期分享更多有价值的信息。