学习记录--Transformer(学习记录,大部分copy)

主要参考:【Transformer 模型结构原理超级详细解析】_z = softmax(q,k)*v-CSDN博客,其他的在具体地方都有标注参考了哪位大佬的博客。


不得不拿出陈年包浆老图来回顾一下:

本图为Transform的结构示意图,我们简单说下流程:


1:输入

获取输入句子的每一个单词的表示向量 X,X由词嵌入 Embedding 和位置嵌入的 Embedding 相加得到Transformer 的输入表示

词嵌入:可以采用 Word2Vec、Glove 等算法预训练得到,也可以在 Transformer 中训练得到。

word2vec:是Google研究团队里的Tomas Mikolov等人于2013年的《Distributed Representations ofWords and Phrases and their Compositionality》以及后续的《Efficient Estimation of Word Representations in Vector Space》两篇文章中提出的一种高效训练词向量的模型,基本出发点是上下文相似的两个词,它们的词向量也应该相似,比如香蕉和梨在句子中可能经常出现在相同的上下文中,因此这两个词的表示向量应该就比较相似。(想深入了解请看vcr:如何通俗理解Word2Vec (23年修订版)-CSDN博客

Glove:大概就是将词语的表示和出现的频次相挂钩

位置嵌入:


2:Encoder部分

将得到的单词表示向量矩阵 (如上图所示,每一行是一个单词的表示 x) 传入 Encoder 中,经过 6 个 Encoder block 后可以得到句子所有单词的编码信息矩阵 C。单词向量矩阵用 X(n×d)表示, n 是句子中单词个数,d 是表示向量的维度 (论文中 d=512)。每一个 Encoder block 输出的矩阵维度与输入完全一致。

Multi-Head Attention:

Encoder里面包含了 Multi-Head Attention结构,而它又是由重要的 Self-Attention组成的:

Self-Attention 接收的是输入(单词的表示向量 x组成的矩阵 X) 或者上一个 Encoder block 的输出。而 Q, K, V 正是通过 Self-Attention 的输入进行线性变换得到的。

得到Q, K, V 以后就利用公式计算Self-Attention 的输出了。

公式中计算矩阵 Q和 K 每一行向量的内积,为了防止内积过大,因此除以 dk 的平方根。Q 乘以 K 的转置后,得到的矩阵行列数都为 n,n 为句子单词数,这个矩阵可以表示单词之间的 attention 强度。下图为 Q 乘以 K 的转置,1234 表示的是句子中的单词。

得到 QKT 之后,使用 Softmax 计算每一个单词对于其他单词的 attention 系数,公式中的 Softmax 是对矩阵的每一行进行 Softmax,即每一行的和都变为 1。

最后再和 V相乘,得到最终的输出 Z。

上图中 Softmax 矩阵的第 1 行表示单词 1 与其他所有单词的 attention 系数,最终单词 1 的输出 Z1 等于所有单词 i 的值 Vi 根据 attention 系数的比例加在一起得到,如下图所示:

如果是 Multi-Head Attention ,就是将单个的Self-Attention运行结果合并到一起,然后经过一个线性层得到最终输出。

Add & Norm:

Add就是残差连接:就是将之前的X在此加入到输出的结果中。

Norm指 Layer Normalization,通常用于 RNN 结构,Layer Normalization 会将每一层神经元的输入都转成均值方差都一样的,这样可以加快收敛。Layer Normalization :随着网络层数的增加,数据的分布方式也会随着层与层之间的变化而变化,这种现象被称为内部协变量偏移(Internal Convariate Shift, ICS)。为解决内部协方差变化(ICS),思路是固定每一层输出的均值和方差,即层归一化算法(Layer Normalization,LN),层归一化算法用每个样本的均值和方差对输入进行归一化。
BN和LN的区别:

NLP中的Layer Normalization-CSDN博客

Feed Forward:

上面所说的三个结构:Multi-Head Attention、Add & Norm、Feed Forward就是一个完整的Encoder。第一个 Encoder block 的输入为句子单词的表示向量矩阵,后续 Encoder block 的输入是前一个 Encoder block 的输出,最后一个 Encoder block 输出的矩阵就是 编码信息矩阵 C,这一矩阵后续会用到 Decoder 中。


补充:feed forward起什么作用?(当然不是造型上起一个作用)

FFN是Transformer模型中的一个核心组成部分,它位于每个Encoder层的最后部分。FFN主要由两个线性变换(全连接层)和一个非线性激活函数组成。具体来说,FFN接收来自自注意力机制(Self-Attention Mechanism)层的输出,首先通过一个线性变换将其映射到一个更高维度的空间,然后通过一个非线性激活函数(通常是ReLU)进行非线性变换,最后再通过另一个线性变换将其映射回原始维度或另一个维度

作用:

  1. 特征提取与增强
    • FFN通过两个线性变换和一个非线性激活函数,对输入的特征进行映射和提取。这种变换能够引入非线性关系,从而增强模型的表达能力。
    • 在自注意力机制的基础上,FFN进一步对特征进行细化和增强,使得模型能够捕捉到更丰富的信息。
  2. 非线性变换
    • 引入非线性激活函数(如ReLU)是FFN的关键所在。非线性激活函数使得FFN能够学习复杂的非线性关系,这对于提高模型的泛化能力和性能至关重要。
  3. 位置信息强化
    • 在Transformer模型中,由于自注意力机制是位置无关的,FFN通过对每个位置的元素进行相同的非线性变换,有助于强化位置信息的表示。虽然FFN本身不直接处理位置信息,但它通过对自注意力机制输出的特征进行变换,间接地影响了位置信息的表示。
  4. 模型并行性
    • FFN对每个位置的元素进行相同的变换,这种位置独立的特性使得Transformer模型能够并行计算,从而加快了训练和推理的速度。

3:Decoder部分

将 Encoder 输出的编码信息矩阵 C传递到 Decoder 中,Decoder 依次会根据当前翻译过的单词 1~ i 翻译下一个单词 i+1,如下图所示。在使用的过程中,翻译到单词 i+1 的时候需要通过 Mask (掩盖) 操作遮盖住 i+1 之后的单词。首先输入一个翻译开始符 "<Begin>",预测第一个单词 "I";然后输入翻译开始符 "<Begin>" 和单词 "I",预测单词 "have",以此类推。这是 Transformer 使用时候的大致流程。

Decoder block 结构,与 Encoder block 相似,但是存在一些区别:

包含两个 Multi-Head Attention 层。第一个 Multi-Head Attention 层采用了 Masked 操作。第二个 Multi-Head Attention 层的 K, V 矩阵使用 Encoder 的编码信息矩阵 C 进行计算,而 Q 使用上一个 Decoder block 的输出计算。最后有一个 Softmax 层计算下一个翻译单词的概率。

第一个Multi-Head Attention(包含Masked):

第一个Multi-Head Attention的输入是输入矩阵Mask 矩阵

Mask是在 Self-Attention 的 Softmax 之前使用的,后面有加粗Mask

输入矩阵包含 "<Begin> I have a cat" (0, 1, 2, 3, 4) 五个单词的表示向量,Mask 是一个 5×5 的矩阵。在 Mask 可以发现单词 0 只能使用单词 0 的信息,而单词 1 可以使用单词 0, 1 的信息,即只能使用之前的信息。

接下来的操作和之前的 Self-Attention 一样,通过输入矩阵 X计算得到 Q, K, V 矩阵。然后计算 Q 和 KT(代表K的转置) 的乘积 QKT。

在得到 QKT 之后需要进行 Softmax,计算 attention score,我们在 Softmax 之前需要使用 Mask矩阵遮挡住每一个单词之后的信息,遮挡操作如下:

得到 Mask QKT 之后在 Mask QKT 上进行 Softmax,每一行的和都为 1。但是单词 0 在单词 1, 2, 3, 4 上的 attention score 都为 0。

使用 Mask QKT 与矩阵 V相乘,得到输出 Z,则单词 1 的输出向量 Z1 是只包含单词 1 信息的。

第二个Multi-Head Attention(使用encoder的KV):

其中 Self-Attention 的 K, V矩阵不是使用 上一个 Decoder block 的输出计算的,而是使用 Encoder 的编码信息矩阵 C 计算的.

根据 Encoder 的输出 C计算得到 K, V,根据上一个 Decoder block 的输出 Z 计算 Q (如果是第一个 Decoder block 则使用输入矩阵 X 进行计算),后续的计算方法与之前描述的一致。这样做的好处是在 Decoder 的时候,每一位单词都可以利用到 Encoder 所有单词的信息 (这些信息无需 Mask)。

补充Teacher Forcing:它每次不使用上一个state的输出作为下一个state的输入,而是直接使用训练数据的标准答案(ground truth)的对应上一项作为下一个state的输入。(一文弄懂关于循环神经网络(RNN)的Teacher Forcing训练机制_free-running mode-CSDN博客

  • 19
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值