深度学习09 -Transformer2 - 理论篇

参考文档:详解Transformer

1、开局来一张Transformer的整体结构图

在这里插入图片描述

2、结构图每步分析

1、Encoder

1、Input Embedding
就是对输入的数据进行向量化编码,可能是one-hot等等

2、Positional Encoding
主要目的是对输入数据的位置有一个确定的前后关系
因为在Self-Attention中,没有考虑到前后位置关系,而是直接从总体进行学习的,因此此处需要加一个可以前后位置关系的表示,在论文中使用的是以下方法:
在这里插入图片描述
(1)使用了偶数位置用sin,奇数位置用cos的方式表示了位置的前后关系
(2)然后将位置向量与编码进行相加,得到完整的编码
在这里插入图片描述

3、然后向量就输入进了Encoder层
encoder层其实长这样:
在这里插入图片描述
简单点说就是一个Self-Attention,一个Feed Forward(前向传播)
(1)首先介绍一下Self-Attention
self-attention,其思想和attention类似,但是self-attention是Transformer用来将其他相关单词的“理解”转换成我们正在处理的单词的一种思路

The animal didn’t cross the street because it was too tired
这里的it到底代表的是animal还是street呢,对于我们来说能很简单的判断出来,但是对于机器来说,是很难判断的,self-attention就能够让机器把it和animal联系起来,接下来我们看下详细的处理过程。
————————————————
版权声明:本文为CSDN博主「爱编程真是太好了」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u012526436/article/details/86295971

Self-Attention与Multi-Head Attention详见李宏毅篇

这给我们留下了一个小的挑战,前馈神经网络没法输入8个矩阵呀,这该怎么办呢?所以我们需要一种方式,把8个矩阵降为1个,首先,我们把8个矩阵连在一起,这样会得到一个大的矩阵,再随机初始化一个矩阵和这个组合好的矩阵相乘,最后得到一个最终的矩阵。
在这里插入图片描述

multi-headed attention的全部流程:
在这里插入图片描述

4、进入了Add&Norm层,即Layer normalization层

在transformer中,每一个子层(self-attetion,ffnn)之后都会接一个残缺模块,并且有一个Layer normalization

首先理解一下BN层(Batch Normalization)

BN的主要思想就是:在每一层的每一批数据上进行归一化。我们可能会对输入数据进行归一化,但是经过该网络层的作用后,我们的数据已经不再是归一化的了。随着这种情况的发展,数据的偏差越来越大,我的反向传播需要考虑到这些大的偏差,这就迫使我们只能使用较小的学习率来防止梯度消失或者梯度爆炸。
BN的具体做法就是对每一小批数据,在批这个方向上做归一化。如下图所示:
在这里插入图片描述
可以看到,右半边求均值是沿着数据 batch_size的方向进行的
公式:在这里插入图片描述

然后解释一下Layer Normalization:
在这里插入图片描述
公式:
在这里插入图片描述
很容易可以看出,与BN层按批次进行不同,其就是在样本上进行计算均值和方差。

5、将数据传入前向传播网络即可

6、Encoder叠加:
在这里插入图片描述

2、DeCoder

可以看出,其实Decoder中也是很多Attention与Normalization,只不过是在第一层有了一个Mask,所以着重讲一下Mask这一项关键技术
1、Mask技术:

mask 表示掩码,它对某些值进行掩盖,使其在参数更新时不产生效果。Transformer 模型里面涉及两种 mask,分别是 padding mask 和 sequence mask。

Mask分为两种,一种是Padding Mask,一种是Sequence mask

Padding Mask
因为输入的句子长短不一的问题,我们需要给输入的数据进行合理的编码,使其长度一致,因此,我们在较短的句子末尾加0,使得他们的长度一样。因为这些填充的位置,其实是没什么意义的,所以我们的attention机制不应该把注意力放在这些位置上,所以我们需要进行一些处理。
具体的做法是,把这些位置的值加上一个非常大的负数(负无穷),这样的话,经过 softmax,这些位置的概率就会接近0!
(self-attention中,Q和K在点积之后,需要先经过mask再进行softmax,因此,对于要屏蔽的部分,mask之后的输出需要为负无穷,这样softmax之后输出才为0。)

Sequence mask
Sequence mask主要是为了让Decoder不能看见未来的信息,只能由此时刻之前的时刻的信息来进行分析

为什么需要Mask?
比如我们要翻译I Love you now
在这里插入图片描述
S是开始符,E是结束符
如果没有Mask,采用与Encoder相同的多头注意力机制,其效果如下:
在这里插入图片描述
所有的单词都会为生成YOU提供信息
但是在生成这个单词的时候,我们是没有后面的 You,NOW的信息的
因此就会出现在训练的时候可以看到YOU NOW的情况,在生成的时候看不到,效果就不好,因此在预测的时候将其隐藏起来即可

那么具体怎么做呢?也很简单:产生一个上三角矩阵,上三角的值全为0。把这个矩阵作用在每一个序列上,就可以达到我们的目的。
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值