Transformer学习笔记

模型架构图

Transformer用于自然语言处理(NLP)中的机器翻译模型。
Transformer是典型的编码器-解码器架构。
在这里插入图片描述
encoder 将 (x1, x2, … , xn)(原始输入) 映射成 (z1, z2, …, zn)(机器可以理解的向量)
例如:一个句子有 n 个词,xt 是第 t 个词,zt 是第 t 个词的向量表示。

decoder 拿到 encoder 的输出,会生成一个长为 m 的序列(y1, y2, … , ym)。
m和n可以一样长可以不一样。

编码器和解码器的区别:
编码器一次性可以看到整个句子。
解码器只能一个一个生成(自回归auto-regressive,根据自己(前面已经预测过的词)预测自己(后面待预测的词))
Shifted right 指的是 decoder 在之前时刻的一些输出,作为此时的输入。一个一个往右移。

在这里插入图片描述

三个Embeddings

embedding(本质为线性层):将输入的一个词语 token 映射成 为一个长为 d 的向量。学习到的长为 d 的向量来表示所有的词语 token。

本文 d = 512
编码器、解码器、最后 softmax 之前线性层的 3 个 embedding 共享权重,让训练更简单,其实本来就应该共享,因为向量和token之间的对应关系应该在每个地方都是一致的。

Note:权重 * sqrt(d = 512) ,
学 embedding 的时候,维度d大的话,会把每个token对应的向量的学的比较小,学到的一些权重值就会变小,但之后还需要加上 positional encoding(不会随着维度的增加而变化)。
multiply weights by sqrt(d) 使得 embedding 和 positional encosing 的 scale 差不多,可以做加法。

Positional Encoding

原因:output 是 value 的加权和(权重是 query 和 key 之间的距离,和序列信息无关)。
一句话把顺序任意打乱之后,attention 出来,结果都是一样的,根本不看 key - value 对在序列哪些地方。
在处理时序数据的时候,一句话里面的词完全打乱,那么语义肯定会发生变化,但是 attention 不会处理这个情况,需要加入时序信息改善这个情况。
How:attention 在输入里面加入时序信息 --> positional encoding

一个词在嵌入层表示成一个 512 维的向量,用周期不一样的 sin 和 cos 函数计算另一个512 维的向量来表示一个数字(positional encoding),位置信息 1 2 3 4 5 6 7 8…。
这个长为 512 、记录了时序信息的一个 + 嵌入层相加 --> 完成把时序信息加进数据。

positional encodding 是 cos 和 sin 的一个函数,在 [-1, +1] 之间抖动的。所以 input embedding * sqrt(d) ,使得乘积后的每个数字也是在差不多的 [-1, +1] 数值区间。

完成 与 positional encoding 相加之后的部分是顺序不变的。

不管怎么打乱输入序列的顺序,进入 layer 之后,输出那些值是不变的,最多是顺序发生了相应的变化。所以就直接把顺序信息直接加在数据值里。

编码器

输入(一个一个token,单词)经过一个 Embedding层:一个词进来之后表示成一个向量。得到的向量值和 Positional Encoding 相加。
Nx:N个encoder的 block 叠在一起。
每个block有两个子层
第一个子层包括多头注意力和自注意力+Add&Norm
第二个子层包括Feed-forward(MLP)+Add&Norm

注意力机制

在这里插入图片描述

通过计算query与key的相似度作为注意力分数,此分数再通过一个softmax计算出权重和为1的权重分布,输出为value的加权和,其中query、key、value都是向量。

计算query与key的相似度的方法称为相似度函数,不同的相似度函数导致不同的注意力,分为缩放点积注意力加性注意力

缩放点积注意力

查询和键具有相同的长度dk(本文中dk=512)。
在这里插入图片描述
以下为计算过程
在这里插入图片描述

对每一个 query 和 key 做内积,然后把它作为相似度,如果这两个向量的方向与大小越一致,那么它的余弦值越大,这两个向量的相似度就越高,如果内积为0,两向量正交,不相似。
然后将算出的结果除srqt(dk),再乘以V得到最终输出。

采用缩放(scale)的原因:防止softmax函数的梯度消失。

解释:当dk的值比较小的时候,缩放与否都无所谓,但是当dk比较大的时候,点积的之后的值会比较大(or小)。
当某一个值比较大的时候,与其余各值的相对的差距会变大,导致最大值的softmax会更加靠近1,其余各值会更加靠近0,值就会更加向两端靠拢,算梯度的时候,梯度比较小。
因为 softmax 最后的结果是希望 softmax 的预测值,置信的地方尽量靠近1,不置信的地方尽量靠近0,以保证收敛差不多了。这时候梯度就会变得比较小,那就会跑不动。
如果除了sqrt(dk),就会将比较大的值拉小,对小的值影响不是很大,拉小之后,相对距离就会变小了,这样大家都会差不多大。
在这里插入图片描述

加性注意力

查询和键具有不同的长度。
在这里插入图片描述
Transformer采用缩放点积注意力的原因:点积只需要两次矩阵乘法计算,实现简单、高效。

自注意力

由于query、key、value都是同一个向量,因此称为自注意力,这是根据query、key、value的来源进行分类的。

在这里插入图片描述
下面是b1向量的self-attention的举例
在这里插入图片描述

多头注意力

在这里插入图片描述
单一的注意力只能学到一种模式(特征),采用多头注意力是为了有机会学到不同的特征,对应于CNN中的多通道,可以捕获多种特征(纹理、颜色、线条等)。
具体实现过程:
这里的query、key、value的值都一样,使用自注意力机制【后面会讲到】。
采用8个头,即h=8,首先线性层(Linear)将整个query、key、value(维度为512)投影到低维(64),这个线性就是为了将高维度均匀的分布在8个部分,每个部分有64维,然后通过注意力评分函数进行计算注意力分数,然后进行拼接操作,再采用一个线性层(Linear)投影回512维。

Position-wise Feed-Forward Networks (MLP)

作用在最后一个维度的MLP,采用Linear+ReLU+Linear构成FFN。
单隐藏层的 MLP,中间 W1 将512扩维到4倍 2048,最后 W2 投影回到 512 维度大小,便于残差连接。
红色方块 MLP, 是一个权重相同的 MLP。
在进入MLP之前,序列特征信息已经被提取(汇聚)完成,这一步是分别对每个token分别MLP,映射到我们想要的那个语义空间,也就是向量化的过程。
在这里插入图片描述
RNN与Transformer对比:
不同点:如何传递序列的信息

RNN 是把上一个时刻的信息输出传入下一个时候做输入。Transformer 通过一个 attention 层,去全局的拿到整个序列里面信息,再用 MLP 做语义的转换。

相同点:语义空间的转换 + 关注点
用一个线性层 (MLP) 来做语义空间的转换。 关注点:怎么有效的去使用序列的信息。
如下图所示,红色框就是语义空间转换。
在这里插入图片描述

Add&Norm

残差连接

Add即残差连接(Residual connections ),因此连接对象需要保持维度一致。
residual connections 需要输入输出维度一致,不一致需要做投影。简单起见,固定每一层的输出维度dmodel = 512。

维度变化:
MLP 通常空间维度往下减;CNN 空间维度往下减,channel 维度往上增;而transformer则保持不变。

Norm即LayerNorm,层归一化。

LayerNorm与BatchNorm的对比

【二维】
在这里插入图片描述
一行是一个样本 X,每一列是 一个 feature

**BatchNorm:**每次把一列(1 个 feature)放在一个 mini-batch 里,均值变成 0, 方差变成 1 的标准化。

具体步骤:(该列向量 - mini-batch 该列向量的均值)/(mini - batch 该列向量的方差)

训练时:mini-batch 计算均值;

测试时:使用 全局 均值、方差。

BatchNorm 还会学 lambda(均值)和beta(方差),BatchNorm 可以通过学习将向量 放缩成 任意均值、任意方差 的一个向量。

**LayerNorm:**对每个样本做 Normalization(把每一行变成 均值为 0、方差为 1),不是对每个特征做 normalization。

LayerNorm 在操作上 和 BatchNorm 的关系 【二维】

LayerNorm 整个把数据转置一次,放到 BatchNorm 里面出来的结果,再转置回去,基本上可以得到LayerNorm的结果。

【三维】
在这里插入图片描述
一横行(seq)表示一个序列的长度n,不同的样本,长度不一样。
第三维feature是每个词的向量表示,比如the用(1,3,2)表示。

BatchNorm:每次取一个特征,切一块(蓝色线),拉成一个向量,均值为 0 、方差为 1 的标准化。
LayerNorm (橙色):对每一个样本进行均值为0,方差为1的标准化。(横着切)

transformer用LayerNorm不用BatchNorm的原因:
时序数据中样本长度可能不一样,用LayerNorm能够取得更为稳定的效果。

【举例分析】:4个长度不一样的样本,0 填充到 max_len
在这里插入图片描述
BatchNorm的结果:
在这里插入图片描述
计算均值和方差,有效的是阴影部分,其余是 0(如上图所示)

Mini-batch 的均值和方差:如果样本长度变化比较大的时候,每次计算小批量的均值和方差,均值和方差的抖动大。

全局的均值和方差:测试时遇到一个特别长的全新样本 (最上方蓝色阴影块),训练时未见过,训练时计算的均值和方差可能并不符合当前的数据。
在这里插入图片描述
LayerNorm 切出来的结果
在这里插入图片描述
每个样本在自己的所有特征中算均值和方差,不需要存全局的均值和方差。
LayerNorm更稳定,不管样本长还是短,均值和方差是在每个样本内计算。

Transfomer选用LayerNorm。

解码器

编码器和解码器很像,都有6个相同的解码器block堆叠,每个block通过三个子层构成,后两个子层和编码器相同,
不同的是第一个子层,为一个带掩码的注意力层。

带掩码的(masked)注意力层

解码器是自回归的,当前时刻的输入集合是之前一些时刻的输入,在训练与预测的时候,编码器不能看到之后时刻的输出,但attention每一次都能看到完完整整的输入,所以通过掩码的注意力层避免这个情况的发生(避免在 t 时刻,看到 t 时刻以后的输入)。

具体操作步骤:在计算权重的时候,t 时刻只用了 v1, …, vt-1 的结果,不要用到 t 时刻以后的内容。
把 t 时刻以后 Qt 和 Kt 的值换成一个很大的负数,如 1 ^ (-10),进入 softmax 后,权重为0。和 V 矩阵做矩阵乘法时,没看到 t 时刻以后的内容,只看 t 时刻之前的 key - value pair。

理解:mask是个 0 1矩阵,和attention(scale QK)size一样,t 时刻以后 mask 为 0。

中间层注意力层

没有采用自注意力,key、value来源于编码器的输出,query 是来自解码器里 masked multi-head attention 的输出。在这里插入图片描述
例子:Hello World --> 你好世界

计算 “好” 的时候,“好”作为 query,会跟 “hello” 向量更相近一点,给 “hello” 向量一个比较大的权重。
但是 “world” 跟后面的词相关, “world” 跟 当前的query (“好” )相关度没那么高。
在算 “好” 的时候,我会给“hello” 向量一个比较大的权重。
在算 query “世” 的时候,会给第二个 “world” 向量,一个比较大的权重。
根据解码器的输入的不一样,会根据当前的 query 向量,去在编码器的输出里面去挑我(当前 query)感兴趣的东西。
attention:query 注意到当前的 query 感兴趣的东西,对当前的 query的不感兴趣的内容,可以忽略掉。
attention 作用:在 encoder 和 decoder 之间传递信息

写在后面:Transformer中的自注意力实现了继MLP、CNN、RNN之后的第三大骨干网络,这为后面的多模态应用奠定了良好的模型基础。

  • 7
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
李宏毅是一位著名的机器学习深度学习专家,他在教学视频中也提到了Transformer模型。下面是一些关于李宏毅关于Transformer笔记总结: 1. Transformer 是一种基于注意力机制(attention mechanism)的序列到序列(sequence-to-sequence)模型。它在自然语言处理任务中取得了很大的成功。 2. Transformer 模型的核心思想是完全摒弃了传统的循环神经网络(RNN)结构,而是采用了自注意力机制(self-attention mechanism)来建模输入序列之间的依赖关系。 3. 自注意力机制能够将输入序列中的每个位置与其他位置建立联系,从而捕捉到全局上下文的信息。它能够解决传统的RNN模型在处理长序列时的梯度消失和梯度爆炸问题。 4. Transformer 模型由编码器(Encoder)和解码器(Decoder)两部分组成。编码器负责将输入序列表示为高维向量,解码器则根据编码器的输出生成目标序列。 5. 编码器和解码器由多个层堆叠而成,每一层都包含了多头自注意力机制和前馈神经网络。多头自注意力机制可以并行地学习输入序列中不同位置之间的关系。 6. Transformer 模型还引入了残差连接(residual connection)和层归一化(layer normalization)来帮助模型更好地进行训练和优化。 这些是李宏毅关于Transformer的一些主要笔记总结,希望对你有所帮助。注意,这些总结仅代表了我对李宏毅在其教学视频中所讲述内容的理解,如有误差请以李宏毅本人的观点为准。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值