专栏介绍
这个专栏下我将会写5篇文章帮助大家更好的理解Transformer
【1】Transformer模型初识
【2】词嵌入和位置编码
【3】多头注意力机制
【4】层归一化层和FeedForward
【5】手动计算和完整的代码实现
宏观理解Transformer
详细很多人都听过或者用过这个模型,你真的掌握Transformer了嘛?让我们来看一下下面这
两个问题。
问题一解释下面这两个概念:
Transformer 模型的工作模式:
(1)训练模式,教师强制,Teacher Forcing 模式
(2)推理模式,自回归,Autoregressive 模式
问题二,在下图解码器的这个部分中,回答谁是Q,谁是K,谁是V
基于 “英译汉” 机器翻译任务快速认识 Transformer
现在我们来假想一个英译汉的机器翻译任务。先把 Transformer 模型看作一个整体:假设待翻
译的英文数据是 “Are you OK?”,对应的中文标注数据是 “你好吗?”,经过模型的推理
计算后,最终输出的翻译结果为 “你干什么?”。这个模型核心由两部分构成 —— 编码器与解码
器。
Transformer 的推理模式即自回归,Autoregressive 模式
模型已经完成训练后,我们就可以利用训练好的参数对未知数据进行推理计算。比如在这个翻译
任务中,我们会输入全新的英文句子,让模型直接输出对应的中文翻译结果 —— 而推理过程中,
我们并不知道这句英文的标准答案(也就是之前提到的、没有标注的中文数据)。那么,模型该如
何一步步生成这个 “未知的中文翻译结果” 呢?
自回归推理模式本质是一个循环生成过程。在第一次循环中,待翻译的英文句子 “Are you OK?”
会从模型左下方输入,而模型右下方不会有完整的中文标注数据输入 —— 最初只会传入一个特殊
起始符号<start>,以此提示模型:中文翻译任务正式启动。
Transformer 的编码器负责接收并处理左侧的英文数据,解码器则接收并处理特殊起始符号
<start>。在二者的协同作用下,模型完成第一次推理:若模型计算准确,其右上角会输出翻译结
果的第一个字 “你”。由于输入的英文内容固定不变,左侧编码器仅需进行一次计算;到第二次推
理时,解码器会接收并处理起始符号<start>和已生成的 “你”,进而完成第二次推理,生成翻译结
果的第二个字 “好”。
由于左侧编码器只需完成一次计算,后续推理可直接复用其输出的编码结果,因此我们可以将编码
器省略,把它的编码结果视为一个固定向量传入解码器。接下来模型会继续按上述逻辑循环 n 轮:
每一轮解码器都会接收之前生成的所有中文 tokens 与起始符号<start>,逐步生成后续内容,直到
右上方输出特殊结束符号<end>,便意味着整个翻译过程完成。
基于此前已生成的结果,持续推理后续的输出内容。模型逐步生成输出序列的过程中,自回归的推
理模型如图所示。
Transformer 的训练模式即教师强制,Teacher Forcing 模式
我们先把 Transformer 看作一个基础的深度学习模型。训练这类模型的核心逻辑是:计算模型
的输出结果与人工标注的标准答案之间的误差,再通过优化算法找到能让损失函数最小化的模型参
数从整体视角看 Transformer 的前向传播过程:输入是英文句子 “Are you OK?”,预期输出是中
文标注 “你好啊”。但 Transformer 有个特殊设计 —— 人工标注的 “你好啊”,除了作为计算误差的
参考,还需要作为解码器的输入参与训练。
之前 “模型将英文与中文标注一起推理出‘你干什么’” 的例子,其实没法体现 Transformer 真
实的训练过程。在教师强制(Teacher Forcing)的训练模式下,模型输出的字数必须和人工标注
的真实数据长度完全一致 —— 比如标注数据是 “你干嘛”(3 个字),模型就只能预测出 3 个字的
结果,而不会是长度不同的 “你干什么”。接下来计算损失函数、反向传播求解梯度,再基于梯度
更新模型参数,到这里就完成了一次训练迭代。
教师强制模式的前向传播,核心是根据不同长度的真实中文标签,分步骤进行推理计算。
举个具体例子:假设待翻译的英文是 “Are you OK?”,对应的中文标注是 “你好吗?”(5 个字)。
我们会先给标注数据添加特殊起始符号<start>,再构造 5 组训练数据 —— 每组数据的时间步 t,
都与解码器输入的标签片段长度完全一致。
比如在第二个时间步,若解码器输出的 y3 本应对应 “好” 字,却出现了预测错误,我们会基于这
个误差优化损失函数。关键在于,即便第二个时间步的预测结果有误,到了第三个时间步,解码器
也不会使用前一步的错误输出,而是依然强制接收真实的标签数据作为输入 —— 这种 “无论前序
预测是否正确,都以真实标签引导后续训练” 的方式,就是教师强制(Teacher Forcing)模式的核
心。
整体而言,“Are you OK” 会被输入到编码器进行编码处理。而输入给解码器的数据,从结构上可看
作下三角形式 —— 这意味着在训练过程中,每个时间步的解码器输入仅包含此前的真实标签(不
包含当前及后续的标签信息)。模型的预测结果是一个列向量y,我们需要将其与人工标注的标签
向量y进行比对,进而计算所有时间步的损失并反向传播。值得注意的是,解码器的输入本质上仍
是一整行数据,只是会通过因果掩码矩阵在注意力计算阶段发挥作用,确保每个位置的预测仅依赖
于之前的信息,避免未来信息的 “泄露”。
Transformer的工作的架构设计和工作流程
整体包括:
编码器 - 解码器结构 (Encoder-Decoder)
词向量 (Embedding)和位置编码 (Positional Encoding)
多头注意力机制 (Multi-Head-Attention)
前馈神经网络 (Feed Forward)
残差连接 (Add) 和层标准化 (Norm)
线性层 (Linear) 和 softmax 层
词向量 (Embedding)和位置编码 (Positional Encoding)
词的最终表示等于词向量表示加上位置编码
编码器和解码器结构
有多组编码器和解码器串联堆叠的工作,主要包含了3个计算
第一个计算
编码器基于:自注意力机制 (Multi-Head Attention)前馈神经网络 (Feed Forward)对 “英文的待
译数据” 进行编码。
待译英文的张量 x1 的尺寸为 [B, Q1, D]:
B 个样本每个样本包括 Q1 个单词每个单词的嵌入维度是 D
经过解码器之后(可以看出提取特征),输出的尺寸是[B, Q1, D]
第二个计算
解码器基于:带有掩码的 (Masked)自注意力机制 (Multi-Head Attention)对 “中文的标注数据”
进行编码。(也可以看成提取特征)
中文标注的张量 x2 的尺寸为 [B, Q2, D]:
B 个样本每个样本包括 Q2 个单词每个单词的嵌入维度是 D
(对于 x1 和 x2:
1. 包含的样本个数,因此具有相同的批量大小 B
2. 英文和中文的表达方式不同,所以句子的长度不同
3. 嵌入维度 D 在通常情况下相同,保证英文和中文在特征的维度上对齐,使模型的设计更加简洁)输出的尺寸是[B, Q2, D]
第三个计算
解码器的第 2 个注意力层:编码器 - 解码器注意力层(Multi-Head Attention),对两组数据一起
解码得到解码器的最终输出。通过编码器和解码器中的 “自注意力机制”:将输入数据中的全局信息
计算并附加到解码结果中,输出的尺寸是[B, Q2, D]
x3 的单词数量会与 x2 相同;因为将英文 x1 翻译为中文 x2,所以翻译结果 x3 的长度,和中文标
注 x2 的长度相同。