前言
Transformer应该算是现有state-of-the-art模型,各种能用到深度学习的领域都对transformer进行了一些研究,之前只是浅看了一下,回顾之前的学习发现还是有不一样的收获,因此做一个整理。
(大白话,仅供自己快速回顾思考使用)
前置知识点
encoder-decoder
编码:
解码:
问题:语义编码c用来记录整个序列的信息,序列长的话会损失很多信息,并且出现梯度小时问题
attention(Query,Keys,Values)
引入了attention的encoder-decoder有多个c,不同的预测值会将注意力放在不同的c
具体的实现:将固定的语义c替换成根据不同的输出变化的
变化的语义对不同的预测进行加权求和,权重如何获得?decoder使用初始符得到一个h,这个h和encoder得到的h计算评分,最后softmax就可以得到概率分布,这个概率分布就作为权重
attention的本质,对原始的特征进行加权求和
优点:速度快(decoder并行计算),效果好
缺点:encoder阶段无法并行
self-attention
attention机制在target和source之间,self-attention是在自己内部计算权重
相似度计算
1.点积
2.余弦相似度:分子为点积,分母为L2距离
Transformer
【假装有图】
结构拆解:
1.输入处理模块:encoder:embedding之后add位置编码(《Attention Is All You Need》,参考,可以自己造公式)decoder:输出预测值,同样进行位置编码
2.编码模块:
6*(Mutil-Head Attention +全连接)
什么是Mutil-Head Attention?变换得到q、k、v时用了多组权重
add残差块
Layer Normalization:在同一个样本中不同神经元之间进行归一化(BN是在同一个batch的不同样本的同一位置的神经元之间进行归一化)
3.解码模块
Masked Mutil-Head Attention+全连接
sequence mask:为了使decoder看不到未来的信息,对于一个序列,输出只依赖于t时刻之前的输出,而不能依赖t之后的输出。
4.输出:线性变换+softmax
优点:效果好,可并行,解决长依赖 缺点:结构很复杂,可以一些任务不需要这么复杂的结构,浪费很多计算资源