c语言sscanf函数的用法是什么
315
2022-09-22
【深入理解】再看Transformer-Attention Is All You Need
文章目录
前言
模型特点
从宏观看
encoder and decoder的解释
模型原理解读
总体结构Multi-Head AttentionPosition-wise Feed ForwardLayer NormalizationPositional EncodingResidual Network 残差网络Linear & Softmax
训练与测试
训练测试
总结补充
Decoder
参考
前言
自从前两天搞懂self-attention机制后,attention is all you need 萦绕耳畔,attention机制仔细品味,真的是令人拍案。接下来,transformer的设计足够创新,抛弃了传统的RNN,并且取得了非常好的效果,所以,我迫不及待的想探寻Transformer的底层,于是参考了网上的代码,写了一篇代码解读文章【手撕Transformer】Transformer输入输出细节以及代码实现(pytorch),了解了许多技术性细节,而在本篇文章中,我将对Transformer的思想,以及本人对Transformer的理解分享给大家。
模型特点
Transformer优点:transformer架构完全依赖于Attention机制,解决了输入输出的长期依赖问题,并且拥有并行计算的能力,大大减少了计算资源的消耗。self-attention模块,让源序列和目标序列首先“自关联”(也就是cross attention)起来,这样的话,源序列和目标序列自身的embedding表示所蕴含的信息更加丰富,而且后续的FFN层也增强了模型的表达能力。Muti-Head Attention模块使得Encoder端拥有并行计算的能力
从宏观看
首先将这个模型看成是一个黑箱操作。在机器翻译中,就是输入一种语言,输出另一种语言。
那么拆开这个黑箱,我们可以看到它是由编码组件、解码组件和它们之间的连接组成
encoder and decoder的解释
Encoder-Decoder(编码-解码)是深度学习中非常常见的一个模型框架。这样的模型也被叫做 Sequence to Sequence learning。所谓编码,就是将输入序列转化成一个固定长度的向量;解码,就是将之前生成的固定向量再转化成输出序列。
在现在的深度学习领域当中,通常的做法是将输入的源Sequence编码到一个中间的context当中,这个context是一个特定长度的编码(可以理解为一个向量),然后再通过这个context还原成一个输出的目标Sequence。
如果用人的思维来看,就是我们先看到源Sequence,将其读一遍,然后在我们大脑当中就记住了这个源Sequence,并且存在大脑的某一个位置上,形成我们自己的记忆(对应Context),然后我们再经过思考(解码),将这个大脑里的东西转变成输出,然后写下来。 那么我们大脑读入的过程叫做Encoder,即将输入的东西变成我们自己的记忆,放在大脑当中,而这个记忆可以叫做Context,然后我们再根据这个Context,转化成答案写下来,这个写的过程叫做Decoder。其实就是编码-存储-解码的过程。 其实,这个过程,还是在用人的大脑处理问题的方式,运用机器来模拟。
模型原理解读
总体结构
Encoder层和Decoder层内部结构如下图所示。
Multi-Head Attention
了解multi-head attention,首先要了解self-attention,参考(2021李宏毅)机器学习-Self-attention
为什么是多头: 原论文中说到进行Multi-head Attention的原因是将模型分为多个头,形成多个子空间,可以让模型去关注不同方面的信息,最后再将各个方面的信息综合起来。其实直观上也可以想到,如果自己设计这样的一个模型,必然也不会只做一次attention,多次attention综合的结果至少能够起到增强模型的作用,也可以类比CNN中同时使用多个卷积核的作用,直观上讲,多头的注意力 有助于网络捕捉到更丰富的特征/信息 。
通过增加一种叫做“多头”注意力(“multi-headed” attention)的机制,论文进一步完善了自注意力层,并在两方面提高了注意力层的性能:
Position-wise Feed Forward
Layer Normalization
在每个block中,最后出现的是Layer Normalization,其作用是规范优化空间,加速收敛。 当使用梯度下降算法做优化时,可能会对输入数据进行归一化,但是经过网络层作用后,数据已经不是归一化的了。随着网络层数的增加,数据分布不断发生变化,偏差越来越大,导致不得不使用更小的学习率来稳定梯度。Layer Normalization 的作用就是保证数据特征分布的稳定性,将数据标准化到ReLU激活函数的作用区域,可以使得激活函数更好的发挥作用
Positional Encoding
Positional Encoding是transformer的特有机制,弥补了Attention机制无法捕捉sequence中token位置信息的缺点 深度解读请参考Network 残差网络
在transformer模型中,encoder和decoder各有6层,为了使当模型中的层数较深时仍然能得到较好的训练效果,模型中引入了残差网络。
Linear & Softmax
Decoder最后是一个线性变换和softmax层。解码组件最后会输出一个实数向量。如何把浮点数变成一个单词?这便是线性变换层要做的工作,它之后就是Softmax层。 线性变换层是一个简单的全连接神经网络,它可以 把解码组件产生的向量投射到一个比它大得多的、被称作对数几率(logits)的向量里 。不妨假设我们的模型从训练集中学习一万个不同的英语单词(我们模型的“输出词表”)。因此对数几率向量为一万个单元格长度的向量——每个单元格对应某一个单词的分数( 相当于做vocaburary_size大小的分类 )。接下来的Softmax 层便会把那些分数变成概率(都为正数、上限1.0)。概率最高的单元格被选中,并且它对应的单词被作为这个时间步的输出。
训练与测试
训练
训练时,由于生成的mask矩阵,所以可以并行训练
测试
测试时,看不到未来信息,解码层中,前一个的输出,是后一个的输入,所以,测试时,只能为串行
总结
优点 :
虽然Transformer最终也没有逃脱传统学习的套路,Transformer也只是一个全连接(或者是一维卷积)加Attention的结合体。但是其设计已经足够有创新,因为其抛弃了在NLP中最根本的RNN或者CNN并且取得了非常不错的效果,算法的设计非常精彩,值得每个深度学习的相关人员仔细研究和品位。Transformer的设计最大的带来性能提升的关键是可以并行运算Transformer不仅仅可以应用在NLP的机器翻译领域,甚至可以不局限于NLP领域,是非常有科研潜力的一个方向。算法的并行性非常好,符合目前的硬件(主要指GPU)环境。
缺点 :
粗暴的抛弃RNN和CNN虽然非常炫技,但是它也使模型丧失了捕捉局部特征的能力,RNN + CNN + Transformer的结合可能会带来更好的效果Transformer失去的位置信息其实在NLP中非常重要,而论文中在特征向量中加入Position Embedding也只是一个权宜之计,并没有改变Transformer结构上的固有缺陷。
补充
Decoder
Mask怎么做?
参考
javascript:void(0)https://zhuanlan.zhihu.com/p/311156298javascript:void(0)https://wmathor.com/index.php/archives/1438/https://zhuanlan.zhihu.com/p/48508221
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~