前言

Transformer应该算是现有state-of-the-art模型,各种能用到深度学习的领域都对transformer进行了一些研究,之前只是浅看了一下,回顾之前的学习发现还是有不一样的收获,因此做一个整理。

(大白话,仅供自己快速回顾思考使用)

前置知识点

encoder-decoder

编码:h_{t}=tanh(h_{t-1},x_{t}w_{t}+b)    c=q(h_{1},...h_{t})

解码:y_{t}=f(h_{t},y_{t-1},c)

问题:语义编码c用来记录整个序列的信息,序列长的话会损失很多信息,并且出现梯度小时问题

attention(Query,Keys,Values)

引入了attention的encoder-decoder有多个c,不同的预测值会将注意力放在不同的c

具体的实现:将固定的语义c替换成根据不同的输出变化的c_{i}

 变化的语义对不同的预测进行加权求和,权重如何获得?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 +全连接)

z = softmax(q*k^{T}/\sqrt{d})v

什么是Mutil-Head Attention?变换得到q、k、v时用了多组权重

add残差块

Layer Normalization:在同一个样本中不同神经元之间进行归一化(BN是在同一个batch的不同样本的同一位置的神经元之间进行归一化)

3.解码模块

Masked Mutil-Head Attention+全连接

sequence mask:为了使decoder看不到未来的信息,对于一个序列,输出只依赖于t时刻之前的输出,而不能依赖t之后的输出。

4.输出:线性变换+softmax

优点:效果好,可并行,解决长依赖   缺点:结构很复杂,可以一些任务不需要这么复杂的结构,浪费很多计算资源


版权声明:本文为m0_54167819原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/m0_54167819/article/details/125657750