Transformer模型原理剖析+论文精读+架构分析--Attention is All You Need简单易懂版

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论文结论分析:

  1. Multi-headed self-attention多头自注意力机制

Introduction and Background:

  1. 2017年最常用的时序模型是RNN Recurrent Neural Network(包括LSTM long short-term memory长短时记忆 和 GRU gated recurrent neural networks 门控循环神经网络架构)
  2. GRU用于解决RNN在处理长序列数据是可能会发生的梯度消失和梯度爆炸问题-通过引入门控机制,更好地捕捉长距离依赖关系。
  3. 不使用循环神经层,而是纯基于注意力机制
  4. 模拟卷积神经网络的多输出通道的效果--transformer的多头自注意力机制
  5. “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模型架构:

  1. 当前(2017)现状:“Most competitive neural sequence transduction models have an encoder-decoder structure.”目前市面上的神经序列转录模型基本上都采用了编码器-解码器这个架构。
  2. 编码器encoder:就是将输入序列(x1, ...,xn)转化为机器学习可以理解的向量(z1, ..., zn)。
  3. 解码器decoder:将编码器的输出序列转化成最终的输出序列(y1, ..., ym) -m与n可以相同也可以不同,因为翻译句子的时候不一定翻译后的结果与原文长度相同。
  4. 注意:在编码的时候可以一次性看完整个句子,但是在解码的时候只能一个一个生成--即自回归模型Auto-regressive model AR模型
  5. 因此,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)

  1. 在这幅图中,左边是编码器,右边是解码器
  2. Embedding:嵌入层(encoder和decoder都有)
  3. “N×”指的是N个层layer叠在一起
  4. Feed Forward Neural Network 前馈神经网络
  5. 编码器的输出作为解码器的输入
  6. 解码器相对于编码器多了一个Masked Multi-Head Attention

具体模块的实现:

  1. 基础知识补充:MLP Multilayer Perceptron多层感知机-经典的神经网络架构,由输入层+隐藏层+输出层组成(每层由多个神经元组成)-能够通过隐藏层的非线性激活函数拟合复杂的非线性关系
  2. 基础知识补充:Batch Normalization BN,也成为Batch Norm批量归一化,是深度学习中一种重要的技术,用于加速神经网络的训练过程、稳定模型的收敛并缓解梯度消失和梯度爆炸等问题。-用于解决内部协变量偏移(随着网络层数增加,前一层输出的分布会发生变化从而导致下一层的输入分布发生偏移-即内部协变量偏移),BN通过归一化每一层(列,当输入的是二维数据时)的输入,使其均值为0,方差为1,从而减小输入数据分布的变化。
  3. Transformer对BN的修改:LayerNorm,在归一化时将每一行(当输入数据为二维时)变为均值=0,方差=1。可以理解为layernorm就是把数据转置后放入batchnorm的结果。

  1. 解码器运用自回归机制:当前输出的输入集其实是上面一些时刻的输出。因此这意味着:在预测t时刻的输出时,不应该看到t时刻以后的那些输入。所以为了避免这种机制被破坏(因为自注意力机制意味着机器可以看到所有的输入),作者采用了一个带掩码的注意力机制masked multi-head attention

Scaled Dot-Product Attention(可以把scaled理解为

  1. “The input consists of queries and keys of dimension dk, and values of dimension dv.”

 Query 和 key 这两个向量做内积,若这两个向量的长度相等,内积的值越大,表明这两个向量的相似度就越高;若内积的值=0,说明两向量正交。

  1. 之后再除以向量长度√dk,再放进softmax function,就会得到n个非负的加起来和等于1的权重。再把对应的权重作用到value上就得到输出了(但是在实际应用中这样一个一个算出输出效率太低,因此可以进一步修改)
  2. 进一步修改:可以把query写成一个矩阵,做两次矩阵乘法

  1. 两种常见的注意力机制:1)加型注意力机制additive attention,用于处理query和key不等长的情况;2)点积注意力机制dot-product attention (dot-product attention is identical to our algorithm,except for the scaling factor of )
  2. 为什么该文作者采用scaled dot-product attention而非单纯的dot-product attention?避免在套完softmax函数后得到的值向0和1两端靠拢-梯度变小-跑不动

  1. Mask:当计算到qt时不让它看到t之后的kt+1,...,kn--即先把k值全部算出来时候,将k时刻以后的k值全部换成很大的负数(套入softmax函数后就会变成0-即权重变为0-即在算output的时候不会考虑t+1及以后时刻的k),从而达到mask掩盖的效果。

Multi-Head Attention 多头注意力机制函数

  1. 即把整个query、key、value投影到低维度(即进入线性层linear)h次,再做h次的注意力函数(就是h次的Scaled Dot-Product Attention),然后每一个函数的输出(h个)把它们并在一起,然后再投影(linear层)得到我们最后的输出。

Application of Attention in our Model在transformer这个模型里面是如何使用注意力的

  1. 假设输入的句子长度=n,编码器的注意力的输入其实是n个长为d的向量
  2. 数据进入编码器后一分为三作为key,query,value,这里其实是说明这三者就是一个东西(其实就是自注意力)。n个query对应n个输出(输出实际上就是value的一个加权和,权重来自query和key)
  3. 绿色笔这里圈出的部分就是自注意力了,这里是将编码器输出的key和value,以及解码器自身得到的query作为输入处理。然后query计算时,相似度高的权重更大,比如第二个绿色向量对应的query的关于hello的权重就更大。
  4. Position-wise Feed-Forward Networks(fully connected feed-forward network-实际上就是只作用在最后一个维度的MLP)

    Embeddings and Softmax

    Positional Encoding (在attention的输入里面加入时序信息)

    由于输出是value的一个加权和,权重是query和key之间的距离,与序列信息无关,所以当处理时序信息时(比如将同一句话的词语顺序打乱-即语义会发生变化),此时光靠attention机制得到的输出还是一样的,很明显有问题。(attention无法处理时序信息

最后,感谢每一位阅读这篇文章的朋友,你们的反馈对我来说非常宝贵。如果有任何问题或建议,请随时告诉我。让我们一起学习和进步吧!如果您喜欢我的内容,别忘了点赞和关注哦,我会定期分享更多有价值的信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值