transformer原理总结

论文:https://arxiv.org/abs/1706.03762


Transformer是一个 Sequence to Sequence model,应用了 self-attention它兼具RNN和卷积网络的优点:并行化和关注全局信息
结构图如下:
在这里插入图片描述
左侧框是Encoder结构,右侧框是Decoder,上侧是分类网络结构。

1 Encoder

单个Encoder单元流程如下:

  1. 我们可以看到输入.shape=(B, L, D),其中B是batch_size, L是sequence length,D是dim_in。
  2. 之后进入Multi-Head Attention(多头注意力模型)中,输出的维度仍然是(B, L, D)
  3. 再将结果与原输入进行相加(借鉴残差结构),用于防止网络退化,输出维度是(B, L, D)
  4. 再通过Layer normalization,用于对每一层的激活值进行归一化,输出维度是(B, L, D)
  5. 接着进入前馈神经网络Feed Forword Network,并进行Add和Layer Normalization

其中有几个步骤进行详细的总结一下,包括

  1. Layer Normalization
  2. Feed Forword Network

1.1 Layer Normalization

我们比较熟悉的是批量归一化(Batch Normalization),那么其与Layer Normalization的区别是什么呢?为什么我们这里用Layer…而不用Batch…呢?
Batch Normalization作用与一个batch中的某一个channel,而Layer Normalization作用于batch中的一条样本。
在这里插入图片描述
比如我们有一个维度为(batch_size, c, wxh)的输入:

[
	[  # batch_size=0
        [x11, x12, x13, x14],
    	[x21, x22, x23, x24],
    	[x31, x32, x33, x34],
    ],
    
    [  # batch_size=1
        [y11, y12, y13, y14],
    	[y21, y22, y23, y24],
    	[y31, y32, y33, y34],  
    ]
].shape = (2, 3, 4)

如果我们进行Batch Normalization,我们将把x11-x31,y11-y31放在一起进行归一化,而Layer Normalization会把X11-X34即batch_size=0的整个矩阵进行归一化。其中在这里插入图片描述

1.2 Feed Forword Network

Feed Forword Network是一个两层的全连接层,第一层以ReLU作为激活函数,第二层不适用激活函数,其计算公式如下:
在这里插入图片描述
其中X是Feed Forword Network的输入,最终的输出与输入X一致。

1.3 xN

上面介绍了一个Encoder单元的工作,其实整个Encoder是多个这种单元嵌套组成的,计算公式如下图
在这里插入图片描述

2 Decoder

输出:位置i的输出词的概率分布
输入:Encoder的输出和第i-1位置Decoder的输出。

编码可以并行计算,一次性全部Encoding出来。但解码不是一次把所有序列解出来的,而是像 一样一个一个解出来的,因为要用上一个位置的输入当作attention的query 。
还是从下往上了解Decoder的结构:

  1. 第i-1个Decoder的输出输入Mask Multi-Head Attention
  2. 将第一步中的输出输入到第二个Multi-Head Attention生成矩阵Q,将Encoder的输出输入到第二个Multi-Head Attention生成矩阵K个V,这样每一个单词都可以利用到Encoder的所有单词信息
  3. 将结果输入到Feed Forward Network网络中,这与Encoder一致

2.1 Masked Multi-Head Attention

相比Multi-Head Attention,这里主要是在Scale之后,Softmax之前进行了一次Mask操作。
在这里插入图片描述
主要的作用是使attention只会attend on已经产生的sequence
那么为什么使用mask操作呢?
Decoder 可以在训练的过程中使用Teacher Forcing并且并行化训练,即将正确的单词序列 (<Begin> I have a cat) 和对应输出 (I have a cat <end>) 传递到 Decoder。那么在预测第 i 个输出时,就要将第 i+1 之后的单词掩盖住

具体如何做的呢,举例子进行说明?

  1. 假设我们有一个输入矩阵X=“<Begin> I have a cat”,映射为(0, 1, 2, 3, 4),通过Embedding后维度为(5, N)
  2. 按照self-attention的操作生成矩阵A(未进行softmax),维度为(5, 5),如下图所示
    在这里插入图片描述
  3. 我们假设有一个Mask矩阵,其大小为(5, 5),如下图所示。
    在这里插入图片描述
  4. 我们将生成的A矩阵按位与Mask相乘,得到遮掩后的矩阵A’。其中单词0只能使用单词0,单词1只能使用单词0和单词1…
    在这里插入图片描述
  5. 将生成的 Mask QK^T与矩阵V相乘,得到只与前i-1个单词相关的矩阵信息
    在这里插入图片描述
    接下来的操作与Multi-Head Attention一致

3 Softmax输出预测

通过Feed Forward Network的结果通过一个全连接层得到结果如下:
在这里插入图片描述
我们进行softmax预测下一个单词
在这里插入图片描述
至此,transformer的网络总结结束,还需要对代码进行总结。

4 参考文章

  1. https://blog.csdn.net/qq_37541097/article/details/117691873?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168241225816800182716096%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=168241225816800182716096&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2blogfirst_rank_ecpm_v1~rank_v31_ecpm-3-117691873-null-null.blog_rank_default&utm_term=transformer&spm=1018.2226.3001.4450
  2. https://zhuanlan.zhihu.com/p/340149804
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Transformer是一种用于自然语言处理和其他序列到序列任务的深度学习模型。它由Google在2017年提出,并在机器翻译任务中取得了巨大成功。 Transformer的核心思想是自注意力机制(self-attention mechanism),它能够在序列中建立全局的依赖关系。传统的循环神经网络(RNN)在处理长序列时存在梯度消失和梯度爆炸的问题,而Transformer通过自注意力机制解决了这个问题。 具体来说,Transformer由编码器(Encoder)和解码器(Decoder)组成。编码器将输入序列映射为一系列高维特征表示,解码器则根据编码器的输出和之前的预测结果生成目标序列。 在编码器中,自注意力机制允许模型在处理每个位置时,能够同时考虑到输入序列中其他位置的信息。它通过计算每个位置与其他位置之间的相关性得到一个权重向量,然后将输入序列与权重向量进行加权求和,得到每个位置的上下文表示。 除了自注意力机制,Transformer还引入了残差连接和层归一化来加速训练和提高模型性能。残差连接允许信息直接跳过某些层,从而减少了梯度消失的问题。层归一化则对每个子层的输入进行归一化,使得模型更加稳定。 总结一下,Transformer通过自注意力机制实现了全局依赖关系的建立,解决了传统循环神经网络的问题。它在机器翻译、文本生成等任务中取得了很好的效果。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白三点

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值