详解Transformer中的Encoder

一.Transformer架构

在这里插入图片描述
左半边是Encoder,右半边是Decoder。

二.Vision Transformer

Vision Transformer取了Transformer的左半边。包含

  1. Input Embedding
  2. Positional Encoding
  3. 多头注意力机制 + Add & Norm
  4. (前馈网络)Feed Forward + Add & Norm
    在这里插入图片描述

2.1 Input Embedding

在这里插入图片描述

2.2 Positional Encoding

  1. 为什么需要位置编码?

Transformer替代的是RNN(循环神经网络),RNN本身是一种训练网络,天然包含句子之间的位置信息,Tranformer用attention替代了RNN,所以就缺乏位置信息。模型没有办法知道每个单词在句子中的相对位置和绝对位置。

  1. 具体实现方法是:

每个奇数时间步,使用余弦函数创建一个向量。

在这里插入图片描述

  1. 偶数时间步,使用正弦函数创建向量
    在这里插入图片描述
    然后将这些向量添加到相应的嵌入向量中。

这样就成功了为网络提供了每个向量的信息。选用正弦和余弦函数,是因为他们有线性特性。

2.3 多头注意力机制

在这里插入图片描述

它的内部如下:
在这里插入图片描述
多头注意力机制是多个自注意力。
多头注意力模块运用了自注意力,自注意力机制可将输入的每个单词和其它单词关联起来。
比如:模型将You与How 和 are联系起来。
在这里插入图片描述

1. 自注意力机制中的Q,K,V

在这里插入图片描述

在这里插入图片描述
为了实现自注意力,将输入分别输入到三个不同的全连接层,来创建查询向量、键向量、值向量

查询向量、键向量、值向量来自检索系统,
Q:例如当在youtube上输入一个查询词Q,搜索某个视频。
K:搜索引擎将你的查询值映射到一组键K中(如视频标题,视频描述)。
V:与数据库的候选视频相关联。

2. 自注意力机制中的第一个MatMul

查询和键经过点积矩阵乘法产生一个分数矩阵。分数矩阵确定了一个单词应该如何关注其它单词。
在这里插入图片描述

(MatMul)点乘获得分数矩阵:

在这里插入图片描述
分数矩阵确定一个单词应该如何关注其它单词。
在这里插入图片描述
每个单词都会有一个与时间步长中的其他单词相对应的分数。分数越高,关注度越高。这就是查询如何映射到键的。

3.缩放

在这里插入图片描述

在这里插入图片描述
将查询和键的维度开平方将得分缩放,因为这样可以让梯度更稳定,因为乘法可能会产生爆炸效果。

4. softmax

在这里插入图片描述

对缩放后的得分进行softmax计算,得到注意力权重,进行softmax计算后,较高的得分会得到增强,较低的得分得到抑制。
在这里插入图片描述
得到的是注意力权重。

5. 第二个MatMul操作

在这里插入图片描述

在这里插入图片描述

将注意力权重 和 值向量相乘。得到输出向量。

6. concat层

为了使这个计算成为多头注意力计算,在应用自注意力之前将查询、键、值分成N个向量。分割后的向量分别经过相同的自注意力,每个自注意力过程称为一个头,每个头产生一个输出向量。这些向量经过最后的线性层之前被拼接成一个向量。
在这里插入图片描述

理论上,每个头都会学到不同的东西。从而为编码器模型提供更多的表达能力。

7.多头注意力机制总结

多头注意力是一个模块,用于计算输入的注意力权重,并生成一个带有编码信息的输出向量,指示序列中每个词应该如何关注其它所有词。

8.多头注意力机制后的Add & Norm

在这里插入图片描述
接下来,使用残差连接,将多头注意力机制输出向量,加到原始输入上。

2.4 前馈网络 + Add & Norm

在这里插入图片描述

在这里插入图片描述

残差连接的输出经过层归一化(LayerNorm)。归一化后的残差输出被送入点对点前馈网络进行进一步处理。点对点前馈网络是几个线性层,中间有ReLu激活函数。

残差连接有助于网络训练,因为它允许梯度直接流过网络。

使用层归一化来稳定网络,显著减少所需训练时间。

最后:

可将编码器堆叠n次,以进一步编码信息。其中每一层都有机会学习不同的注意力表示。从而有可能提高transformer网络的预测能力。

在这里插入图片描述

参考

超强动画,一步一步深入浅出解释Transformer原理!
https://www.bilibili.com/video/BV1ih4y1J7rx/?spm_id_from=333.999.top_right_bar_window_history.content.click&vd_source=ebc47f36e62b223817b8e0edff181613

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

computer_vision_chen

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

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

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

打赏作者

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

抵扣说明:

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

余额充值