Transformer 学习笔记 | Decoder

本文涉及的产品
RDS DuckDB + QuickBI 企业套餐,8核32GB + QuickBI 专业版
简介: 本文记录了笔者学习Transformer的过程,重点介绍了填充(padding)和掩码(masking)机制。掩码确保解码器只依赖于之前的位置,避免信息泄露,保持因果关系及训练与推理的一致性。通过线性层和softmax函数生成输出概率,并使用梯度下降和反向传播进行训练。评估指标包括BLEU、ROUGE、METEOR和困惑度等。欢迎指正。

前言

本文是笔者在学习Transformer过程中记录的笔记,可能有一些错误。望指正。


Pasted image 20250218162344.png

填充(padding)和掩码(masking)机制

在解码器(decoder)中使用掩码(mask)的目的是确保当前位置的输出仅仅依赖于其之前的位置,而不是未来的位置。

掩码(mask)的作用

1. 因果关系(Causality)
在序列生成中,每个输出仅仅应当依赖于之前的输出。例如,生成句子的第四个单词时,我们只能考虑前三个单词,而不能考虑第五个单词。加入掩码确保模型在训练时保持这种因果关系。

2. 训练与推理的一致性
在推理(即实际使用)时,我们通常采用自回归方式生成序列:一次生成一个标记,然后将其作为新输入传递回模型。使用掩码确保模型在训练和推理时的行为是一致的。

3. 避免信息泄露
如果不使用掩码,模型可能会在训练期间“窥视”未来的标记,并过度依赖这些信息。这会导致在推理时性能下降,因为在实际应用中这些未来的标记是不可用的。

在实际操作中,掩码通常是一个上三角形状的矩阵,其中上三角(包括对角线)的部分设为0,其余部分设为负无穷(或非常大的负数)。在应用 softmax 函数计算注意力权重之前,这个掩码会被加到注意力分数上,这样上三角部分的分数在 softmax 后基本上就会变成0,从而实现了掩蔽效果。

举例

  • “我喜欢猫猫”
  • “我喜欢打羽毛球”

步骤 1:Tokenization 我们将每个句子分词,得到以下token序列:

1. “我” “喜” “欢” “猫” “猫”
2. “我” “喜” “欢” “打” “羽” “毛” “球”

步骤 2:Padding 由于训练集中最长的句子长度为10个tokens,我们需要对这两个句子进行填充,使它们的长度都达到10个tokens。通常使用一个特殊的填充token(例如"")来实现这一点:

1. “我” “喜” “欢” “猫” “猫” “” “” “” “” “”
2. “我” “喜” “欢” “打” “羽” “毛” “球” “” “” “”

步骤 3:Masking 现在,模型需要知道哪些是真正的token,哪些是填充的token。这是通过创建一个掩码矩阵来实现的,掩码矩阵与输入序列的长度相同。在这个掩码矩阵中,真实token的位置用0表示,填充token的位置用1表示:

1. 掩码:[0, 0, 0, 0, 0, 1, 1, 1, 1, 1]
2. 掩码:[0, 0, 0, 0, 0, 0, 0, 1, 1, 1]

步骤 4:应用掩码 在模型的注意力机制中,特别是在计算softmax之前,我们会将这些掩码应用到模型中。具体来说,我们会在掩码为1的位置上加上一个非常大的负数(例如负无穷),这样在经过softmax操作后,这些位置的值将接近0,从而不会对全局概率预测产生影响。

通过这种方式,模型在计算注意力权重时,会忽略填充token,确保只关注实际的内容token。这样,模型就能够正确地学习序列数据,而不会被填充token所干扰。

Mask-Multi-Head-Attention

Mask 的目的是防止 Decoder “seeing the future”,就像防止考生偷看考试答案一样。

Pasted image 20250218182106.png

Linear 和 Softmax 来生成输出概率

在解码器的最终阶段,其输出将通过一个线性层进行转换,该层的作用是将解码器的输出映射到与词汇表大小相匹配的维度。随后,应用softmax函数将这些数值转换成概率分布,其中每个词汇对应一个概率值。在这一过程中,概率最高的词汇被选为预测的下一个词

训练过程

模型没有收敛得很好时,Decoder预测产生的词很可能不是我们想要的。这个时候如果再把错误的数据再输给Decoder,就会越跑越偏。这个时候怎么办?

(1)在训练过程中可以使用 “teacher forcing”。因为我们知道应该预测的word是什么,那么可以给Decoder喂一个正确的结果作为输入。

(2)除了选择最高概率的词 (greedy search),还可以选择是比如 “Beam Search”,保留top-K个预测的word。 Beam Search 方法不再是只得到一个输出放到下一步去训练了,我们可以设定一个值,拿多个值放到下一步去训练,这条路径的概率等于每一步输出的概率的乘积。

训练和损失函数

在训练过程中,我们使用损失函数(例如交叉熵损失)将生成的输出概率分布与目标序列进行比较。概率分布给出了每个单词出现在该位置的概率。

模型的训练与评估

训练Transformer模型涉及优化其参数以最小化损失函数,通常使用梯度下降和反向传播。一旦训练完成,就会使用各种指标评估模型的性能,以评估其解决目标任务的有效性。

梯度下降 (Gradient Descent)是一种迭代优化算法,用于最小化损失函数。 它通过沿着负梯度方向逐步更新参数,寻找最优解。

反向传播 (Backpropagation)利用 链式法则,将梯度从输出层反向传播到输入层,计算出所有参数的梯度。

训练神经网络的完整流程
随机初始化参数 --> 前向传播 --> 反向传播 --> 参数更新 --> 重复步骤 2-4,直到模型收敛或达到预设的训练轮数

(1) 梯度下降和反向传播:

  • 在训练期间,将输入序列输入模型,并生成输出序列。
  • 将模型的预测与地面真相进行比较,涉及使用损失函数(例如交叉熵损失)来衡量预测值与实际值之间的差异。
  • 梯度下降用于更新模型的参数,使损失最小化的方向。
  • 优化器根据这些梯度调整参数,迭代更新它们以提高模型性能。

(2) 学习率调度:

  • 可以应用学习率调度技术来动态调整训练期间的学习率。
  • 常见策略包括热身计划,其中学习率从低开始逐渐增加,以及衰减计划,其中学习率随时间降低。

模型的评估指标

  • BLEU(Bilingual Evaluation Understudy):适用于机器翻译和文本生成任务,衡量生成文本与参考文本的相似度。
  • ROUGE(Recall-Oriented Understudy for Gisting Evaluation):常用于文本摘要,评估生成摘要与参考摘要的重叠部分。
  • METEOR(Metric for Evaluation of Translation with Explicit ORdering of Renderings):结合精确率和召回率,用于评估翻译质量。
  • Perplexity 困惑度:用于语言模型,衡量模型预测测试数据的能力,数值越低越好。
相关文章
|
机器学习/深度学习 存储 算法
深度学习中的稀疏注意力
深度学习中的稀疏注意力
1352 0
|
JavaScript 安全 Windows
NPM包的安装、更新、卸载
NPM包的安装、更新、卸载
1726 0
|
9月前
|
机器学习/深度学习 自然语言处理 PyTorch
Transformer自回归关键技术:掩码注意力原理与PyTorch完整实现
掩码注意力是生成模型的核心,通过上三角掩码限制模型仅关注当前及之前token,确保自回归因果性。相比BERT的双向注意力,它实现单向生成,是GPT等模型逐词预测的关键机制,核心仅需一步`masked_fill_`操作。
708 0
Transformer自回归关键技术:掩码注意力原理与PyTorch完整实现
|
7月前
|
人工智能 监控 算法
Transformer模型训练全解析:从数据到智能的炼金术
模型训练是让AI从数据中学习规律的过程,如同教婴儿学语言。预训练相当于通识教育,为模型打下通用知识基础;后续微调则针对具体任务。整个过程包含数据准备、前向传播、损失计算、反向更新等步骤,需克服过拟合、不稳定性等挑战,结合科学与艺术,最终使模型具备智能。
|
机器学习/深度学习 数据处理
大语言模型中的归一化技术:LayerNorm与RMSNorm的深入研究
本文分析了大规模Transformer架构(如LLama)中归一化技术的关键作用,重点探讨了LayerNorm被RMSNorm替代的原因。归一化通过调整数据量纲保持分布形态不变,提升计算稳定性和收敛速度。LayerNorm通过均值和方差归一化确保数值稳定,适用于序列模型;而RMSNorm仅使用均方根归一化,省略均值计算,降低计算成本并缓解梯度消失问题。RMSNorm在深层网络中表现出更高的训练稳定性和效率,为复杂模型性能提升做出重要贡献。
3501 14
大语言模型中的归一化技术:LayerNorm与RMSNorm的深入研究
|
机器学习/深度学习 人工智能 自然语言处理
Transformer图解
Transformer 是一种在自然语言处理(NLP)领域广泛使用的模型架构该模型通过Self-Attention机制和位置编码技术替代传统的RNN结构,实现了并行处理和更有效的长距离依赖捕捉。Transformer主要由编码器(Encoder)和解码器(Decoder)两部分组成,其中编码器负责处理输入序列,解码器则基于编码器的输出生成目标序列。每一层的编码器和解码器内部均采用多头注意力机制(Multi-Head Attention)、前馈神经网络以及残差连接和归一化层,以增强模型的学习能力和稳定性。此外,位置编码的引入使得模型能够在处理无序的输入序列时保留词语的位置信息。
1314 13
|
机器学习/深度学习 数据库 索引
Transformer 学习笔记 | Encoder
本文记录了学习Transformer模型过程中对Encoder部分的理解,包括多头自注意力机制(Multi-Head Self-Attention)和前馈网络(Feed-Forward Network)的工作原理。每个Encoder Layer包含残差连接(Residual Connection)和层归一化(Layer Normalization),以缓解梯度消失问题并稳定训练过程。文中详细解释了Q、K、V的含义及缩放点积注意力机制(Scaled Dot-Product Attention),并通过图解展示了各组件的工作流程。欢迎指正。
|
机器学习/深度学习 自然语言处理 算法
生成式 AI 大语言模型(LLMs)核心算法及源码解析:预训练篇
生成式 AI 大语言模型(LLMs)核心算法及源码解析:预训练篇
4050 1
|
机器学习/深度学习 资源调度 自然语言处理
Transformer中高级位置编码的介绍和比较:Linear Rope、NTK、YaRN、CoPE
在NLP中,位置编码如RoPE、CoPE等增强模型对序列顺序的理解。RoPE通过旋转矩阵编码位置,适应不同距离的相对位置。线性旋转、NTK和YaRN是RoPE的变体,优化长序列处理。CoPE是动态的,根据序列内容调整位置编码,改善长距离依赖的捕捉。这些技术提升了模型在处理复杂语言任务时的性能。
1171 5
|
PyTorch 算法框架/工具
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解
本文介绍了PyTorch中的F.softmax()和F.log_softmax()函数的语法、参数和使用示例,解释了它们在进行归一化处理时的作用和区别。
1842 1
Pytorch学习笔记(七):F.softmax()和F.log_softmax函数详解