发布时间:2022-12-26 22:30
本文内容主要源于Attention is all you need: https://arxiv.org/abs/1706.03762
由于本人最近在研究文本的判别式模型,如文本分类任务,所以学习了Transformer,并根据自己的理解制作了PPT介绍总结Transformer中几个比较重要的部分.
文章内容为本人制作的PPT,同时在需要解释的slide写上了补充说明;
主要内容包括
1.Transformer的提出背景;
2.Transformer的Encoder(Scaled Dot-Product Attention,Multi-head-Attention)较为详细的图解,部分图引自《Attention is all you need》一文;
3.虽然本人主要是应用于判别式模型,但是最后简单介绍了包含Decoder部分,梳理了Transformer的整个流程;
Slide 1
Slide 2
Slide 3
slide 4,其实很明显,Multi-Head Attention是Transformer最突出的贡献,所以直入主题:
slide5 Multi-Head Attention的核心组件-Scaled Dot-Product Attention,以实例"华南"一词的Scaled Dot-Product Attention过程为例逐一图解每个模块的对应工作
(1)此处仅以"华南"为例,图解Scaled Dot-Product Attention是如何避免通过Reccurent model来捕获上下文信息,具体做法就是如图通过当前Q与每个K(包括自己)的MatMul;
(2)同时此处为什么要进行放缩(Scale),对应图中有解释;
(3)Mask具体操作如图中文本框解释,作用于红框步骤中,将(1)(2)步骤的计算结果score针对性的屏蔽Mask)
具体屏蔽的是文本向量化过程中,由于文本长度小于Fix_length的Padding部分,在Padding部分对应index的score设为-inf
最后的效果就是使得经过softmax之后,Padding部分给予的attention权重为近似0.
这种类似的操作在Decoder部分也使用了,目的是为了Decoder只关注早于当前输出位置的部分!
slide 6-理解了Scaled-Dot Product Attention ,继续了解Multi-Head Attention,先看其中的Multi-Head是什么意思?
如图蓝框部分为Multi-Head部分的解释,实际上n个head 就是进行n次linear映射出不同的子区域表征空间,更加全面的挖掘不同位置在不同子空间下的信息,同时此设计出于并行计算的考虑。
slide 7 Multi-Head Attention中的Scaled Dot-Product Attention部分(前面详细图解)
slide 8 经过Multi-Head映射多个子空间→Scaled Dot-Product Attention
接下来:
1.将n_Head个子空间得到的编码信息融合(本文中concat拼接)
2.拼接后,Linear回与Transformer模型空间维度(d_model)一致,方便如下图与原始输入INPUTS进行Resnet以及LayerNormalization
slide 9
Multi-Head Attention部分已经图解解释完了,Encoder部分后续还经过一个Feed Forward,其实就是两层Linear以及在第一层加入了ReLu激活函数,就不继续讲了。
接下来简单讲下Transformer中是如何应用在生成式模型,如机器翻译任务:
在slide中,以中文:"我是中国人" 翻译为 英文为例
1.编码部分(Encoder):
1.1输入文本:"我是中国人" 直接INPUTS ,此处图中为了简洁,省略了word_embedding以及position_embedding过程
1.2绿色框"Encoder"部分对应单个transformer模型的Encoder部分,Encoder的最终输出结果为"K","V"
2.解码部分(Decoder):
2.1初始状态:输出结果仅包含输出起始标志"Start of result"
2.2绿色框"Decoder"部分对应单个transformer模型的Decoder部分,注意transformer结构框图中,在Decode-Encoder Attention部分,即Decoder部分的第二次Multi-Head Attention:其K V 输出是采用Encoder的输出,目的是利用Encoder编码好的K V,帮助Decoder在合适的位置处放置更多的"注意力"(Attention)
2.3Transformer中的Decoder部分的第一个Multi-Head Attention ,也进行了Masked操作,此操作实现及原因在前文提到解释过,上翻!
2.4Decoder部分整体是一个自回归过程,即在Decoder过程中:是一个词一个词预测出来的,当前预测的结果output1,会作为Decoder的输入,参与下一个词的预测,如当前slide预测结果为"I",在下一个预测,见slide10
slide 10
依此循环,直至预测出结束标识符,完成整个模型的任务。
至此,大概介绍了Transformer的结构,主要是Encoder部分的Multi-Head Attention部分,同时也简单梳理了整个结构。
希望有所收获的读者能点个“喜欢” 给个赞,谢谢支持!
另外如有误解之处还请原谅指出,谢谢!
React + Node.js 全栈实战教程 - 手把手教你搭建「文件上传」管理后台
DatenLord|io_uring Rust 异步库实现方法
微服务的构建环境比较--Spring Cloud和Kubernetes
Linux(CentOS7)开机自启动的三种是设置方式详细图解(init.d&fstab&rc.local)
Python3,听说这个第三方库竟碾压python自带JSON库。
如何用python写一个简单的postgres json包装器
Python-PyQt5开发学习笔记(一):环境搭建及GUI初试