首页 简历|笔试面试

你真懂Transformer吗?

  • 25年9月4日 发布
  • 329.36KB 共19页
你真懂Transformer吗?你真懂Transformer吗?你真懂Transformer吗?你真懂Transformer吗?你真懂Transformer吗?

你真懂 Transformer 吗?

我不知道点开这篇内容的球友们;

有多少敢说自己完全学会并理解了 Transformer 模型。

?懂? ;

反正根据面官要求你;

我敢说 100 个宣称自己学过 Transformer 的球友;

真理解 Transformer 的,可能不足 10 人。

甚至哪怕你发了一篇基于 Transformer 的论文;

或者微调了一个基于 Transformer 的模型;

但对于一些基础问题,可能也没法思路清晰的完整回答出来。

不信,咱们就试试**~ ^_^**

问题 1:

任何深度学习模型,都要讨论模型的训练流程和推理计算流程。

那么对于 Transformer 模型;

在“训练模型的过程中”与“训练完成后使用模型进行推理计算时”;

对于这两个流程,具体有哪些不同的地方呢?

请基于 Transformer 模型的推理模式,即自回归,Autoregressive 模式;

与 Transformer 模型的训练模式,即教师强制,Teacher Forcing 模式;

1749712031979-ddcb39eb-0c8c-4804-8b5c-6ef1c37ff8e2.webp

在英译汉机器翻译问题的业务场景下,深入回答这个问题。

问题 2:

观察 Transformer 会看到 3 个橙色的矩形,它们是多头注意力模块;

这个矩形的下方,有三个分叉,对应了 Q、K、V。

1749712031983-d47c00e9-bdeb-412b-b613-8645a9aba80b.webp

我们会发现,下面两个橙色的多头注意力的 Q、K、V 输入,都是一样的。

而右上方的橙色矩形的 3 个输入,也就是那 3 个分叉;

其中两个来自于左边的编码器,用红色圈标记;

一个来自于下方的解码器,用蓝色圈标记。

1749712032016-ad60892d-487a-4429-8e89-3cc76b32d0a8.webp

我的问题是,对于这三个分叉,谁是 Q、谁是 K、谁是 V?

换句话说,蓝色圈标记的那个分叉,是 Q、是 K,还是 V?

请基于 Scaled Dot Product Attention,深入回答这个问题。

再多的问题,我就不问了。

上面这两个问题,如果球友们能思路清晰的回答出来;

那就说明球友们真正理解了 Transformer。

实际上,问题 1 和问题 2,它们分别从宏观和微观的角度;

对 Transformer 背后的原理提出了问题。

对于刚刚初学 Transformer 的球友;

需要先宏观的了解 Transformer 的工作原理;

再微观的研究 Transformer 中每个组件的计算过程和细节。

接下来,我就以第 1 个问题为前提,给大家讲讲 Transformer。

帮助球友们快速了解 Transformer 是如何工作的。

讲解包括了 3 个部分:

1.基于“英译汉”机器翻译任务;

快速认识 Transformer。

2.详细讨论,Transformer 的推理模式;

即自回归,Autoregressive 模式。

3.详细讨论,Transformer 的训练模式;

即教师强制,Teacher Forcing 模式。

1.快速认识 Transformer

我们以“英译汉”机器翻译任务为前提来说明 Transformer。

首先绘制一个简洁版的 Transformer 模型架构图:

1749712032119-61b36429-9d40-4824-b505-65807b8449a4.webp

这个架构图只表现出 Transformer 的大体结构和输入、输出数据;

忽略掉了 Transformer 模型中包含的各个具体的组件;

将 Transformer 模型看做是一个整体,进行讨论。

举例说明:

设待翻译的英文数据是“Are you OK ?”;

中文的翻译标注数据是“你好吗?”;

它们会从模型的左下方“Inputs”和右下方“Outputs shifted right”;

1749712032084-1d580535-3f42-4d35-a046-729cb263346a.webp

这两个位置进入模型。

因此下方的“Inputs”和“Outputs”,是模型的数据输入位置。

经过模型的推理计算,假设模型的翻译预测结果是“你干什么?”;

那么它会从模型的右上方 Outputs 位置输出。

这里我故意将模型的翻译输出写错;

从而更明确的表示上方的输出才是模型的预测结果。

特别说明:

严格来说“Are you OK?”、“你好吗?”、“你干什么?”;

这两组输入和一组输出是无法如上图中一样,同时出现的。

我此时只是用这个例子,帮助同学们快速认识 Transformer。

总结来说,整个 Transformer 由两部分组成:

1749712032489-05f17804-4e75-4cf6-90b4-b75884a3e7aa.webp

左侧的矩形结构,被称为“Encoder 编码器”;

右侧的矩形结构,被称为“Decoder 解码器”。

初学时,我们不必深究 Encoder 和 Decoder 内部到底是如何工作的;

我们只需要知道,Encoder 用来接收并处理“待译英文”数据;

Decoder 用来接收并处理“中文标注”数据,就可以了。

下面,我们要重点研究 Transformer 的 2 种不同的工作模式:

自回归的推理模式和教师强制的训练模式。

2.自回归的推理模式

理解“自回归的推理模式”是理解“教师强制的训练模式”的前提。

我们需要知道,在使用“自回归推理”时;

Transformer 模型已经完成了训练。

我们要使用模型中的参数,对未知的数据进行推理计算。

例如,对于英译汉问题,就是根据未知的英文;

使用已训练的 Transformer 模型,将英文推理计算为中文翻译结果。

因此在“推理模式”时,我们并不知道英文的准确翻译结果。

1749712032629-f8d881fb-2e64-4c81-90e6-fa677056e594.webp

也就是模型的右下角,问号标记的位置;

一开始并没有可以输入的中文标注数据。

同学们此时可以想一想,这个???位置应该输入什么样的数据呢?

“****自回归的****推理模式****”实际上是一个循环的过程。

第 1 次循环:

首先,待译英文是“Are you OK ?”,它仍然会从模型下方的左侧位置输入。

不同于训练阶段,在推理时,模型的右下方,不会有完整的中文标注数据输入。

1749712032502-472190f0-7631-44c0-b9e1-31d43880c873.webp

最开始只有一个特殊的起始符号;

例如,输入进来。它会提示模型此时已开始中文翻译工作。

Transformer 模型的 Encoder,会接收并处理左侧的英文输入;

Transformer 模型的 Decoder,会接收并处理右侧的起始符号。

然后经过 Encoder 和 Decoder 的共同努力;

Transformer 就会完成了第一次推理计算。

如果此时模型算对了;

就会看到模型整体计算出了中文翻译结果中的第一个单词:“你”。

这里要特别说明:

因为待翻译的英文后面也不会发生变化;

所以对于左侧的英文的编码计算工作,只会进行一次计算。

第 2 次循环:

对于待翻译的英文“Are you OK ?”的计算,会直接使用刚刚的计算结果。

1749712032646-c859e194-7098-485a-bd08-ada4685cb4ef.webp

将起始符号和生成的“你”;

一起作为输入,输入至模型;

并生成第 2 次推理计算的结果“好”。

第 3 次循环:

实际上我们只需要考虑右侧的 Decoder 的循环工作过程;

因此我们可以将左侧的矩形框 Encoder 省略掉。

按照同样的方式,进行第 3 次推理计算:

1749712032592-f29533fb-4691-465e-b8ed-76ce58372b93.webp

根据“”、“你”、“好”,计算出“吗”。

继续按照这样的计算流程,进行 n 轮推理计算。

当模型的右上方,生成了预先定义的特殊结束符号时:

1749712032947-99b43fb9-792a-4da4-858b-45d4a0db5029.webp

例如,就说明 Transformer 的推理计算完成了,不再需要下一次计算。

总结

“自回归的推理模式”就是基于之前的计算结果,推理后续的计算结果。

换句话说,在模型逐步生成输出序列的过程中;

其中的每一步产生的生成结果,都会依赖于之前已生成的结果。

如果疏略掉“自回归”中的循环进行输入输出的过程:

1749712032964-b24b7cf6-2ab5-4d1d-8152-d00106b773ce.webp

那么 Tranformer 就是基于“Are you OK ?”和“”;

生成了翻译结果,“你 好 吗 ?”。

3.Transformer 的基本训练流程

我们先不讨论 Transformer 的教师强制训练模式。

单纯将 Transformer 看作是一个普通的深度学习模型;

思考这个模型的基本训练逻辑。

训练一个深度学习模型;

就是要想办法,计算出“模型推理结果 y^”和“人工标注数据 y”之间的误差。

1749712033033-56152084-9f9c-4aa6-bcf5-a4400f1478ff.webp

然后尽可能找出使“误差”最小的模型参数。

其中“误差”使用“损失函数 loss”基于 y 和 y-hat 计算。

下面我们将 Transformer 前向传播的推理过程,看作是一个整体来考虑。

前向推理:

输入 x 对应了“Are you OK ?”;

预测结果是“你干什么?”,它对应了 y^。

相比其他深度学习模型,Transformer 最特殊的地方在于;

标记值 Y“你好吗”也需要作为输入,输入到神经网络中。

1749712033191-5d31a5e4-14ab-4c2b-a66e-d11cb4a35d84.webp

相当于每次训练 Transformer 时;

Transformer 会将“Are you OK ?”和“你好吗?”;

一起推理为“你干什么?”。

需要注意的是:

这个例子并不能体现真正的训练过程。

因为在教师强制的训练模式下;

是不可能出现“你干什么?”,这种预测结果的。

因为其中 Y^和 Y 的长度,一定是一样的。

换句话说,在训练时,模型有可能预测出“你干嘛?”;

因为它的长度和“你好吗?”一样。

但模型一定预测不出“你干什么?”。

一会等我具体讲到“教师强制”后,同学们就理解我此时为什么这么说了。

计算损失:

然后我们要做的就是计算出中文标注“你好吗?”;

和模型预测“你干嘛?”之间的损失 loss 了。

1749712033288-a802a227-9b02-469b-91a8-9dffce80b13b.webp

loss 描述了中文标注 Y“你好吗?”;

和预测值 Y^“你干嘛?”之间的差异;

这个差异会使用交叉熵误差 CrossEntropy 进行计算。

梯度下降:

当计算出 loss 后,要继续计算 loss 关于 Transformer 模型中参数 θ 的梯度:

1749712033387-be148234-51a1-4677-a7f2-df15fd697de1.webp

然后使用梯度下降算法,更新这些参数 θ。

当完成前向推理、损失计算和梯度下降三个步骤后;

就完成了 1 次深度学习模型的迭代。

4.教师强制,Teacher Forcing 模式

“教师强制的前向推理”与“自回归的前向推理”,它们的底层逻辑是一样的。

不同的地方在于,“自回归”的前向推理是一个循环过程。

而“教师强制的前向推理”,是基于不同长度的真实标签,“分别”进行推理。

具体举个例子。

设一组标注,待译英文是“Are you OK ?”,中文标注是“你好吗?”。

在计算前,我们需要会先将标注“你好吗?”添加和,对应起始和结束标记。

接着构造出表格中的 5 组训练数据:

1749712033428-6565cdd7-7229-4d4f-bd40-2015c7dc9016.webp

这 5 组训练数据,也被称为“5 个时间步”的训练数据。

仔细观察表格:

第 1 列,时间步 t:

它和第 3 列,解码器输入序列 y 的长度相同。

第 2 列,编码器的输入 x:

每个 x 都一样,为 are you ok?。

第 3 列,解码器的输入序列:

y 的下标是 1~t-1,表示预测第 t 个时间步的单词 yt,需要 1 到 t-1 时间步的历史信息。

第 4 列是解码器输出:

也就是第 t 个时间步的预测标签。

以第 2 个时间步举例说明:

1749712033492-99c0d348-8fcc-4189-a5bc-586002b50424.webp

x“Are you OK ?”从左下方输入;

解码器输入长度是 2,也就是 y1、y2;

对应了“”和“你”,它们从右下方输入;

解码器输出为 y3,对应“好”字。

如果此时模型预测出“干”字。

这说明模型预测错了,我们要优化预测值“干”和标注“好”之间的损失。

接着基于这个例子继续说明“教师强制”:

1749712033505-c6ab27e0-8caa-4b9e-9450-99d2355f84a1.webp

我们会看到解码器的每一步输入,也就是 y1 到 y(t-1)这一列,实际上都是标注数据中的

词语。

比如输出了“干”;

但对于第 3 个时间步;

在训练时仍然会使用“Are you OK ?”和“ 你 好”作为输入,去预测“吗”。

所以第 2 个时间步的错误输出“干”;

只是第 2 个时间步的输出。

它不会影响第 3 个时间步的训练时的输入。

因此解码器强制使用了正确的数据作为输入,就被称为“教师强制”。

在使用“教师强制”时,可以不用担心某一个时间步出错,影响到后面的计算。

换句话说,如果没有“教师强制”,就很可能越错越离谱。

整体来说:

1749712033816-bc5794fe-7587-4ed2-9efe-f7a0975cd343.webp

Are you OK 会被输入至编码器;

输入给解码器的数据可以看做是下三角矩阵;

模型的预测结果是一个列向量 y-hat。

标签值是列向量 Y,其中保存了“你、好、吗、?、”。

最终我们要计算所有时间步的:

1749712033935-866e3775-b2b7-4d5d-82b6-02acf789fad4.webp

Y 与 y-hat 之间的损失 loss。

这里需要说明的是:

输入至解码器的下三角矩阵形式的数据;

并非是真实意义的下三角矩阵数据。

它的本质仍然是一行数据:

1749712033825-3c6aa1ca-afaf-47ba-a583-65169e0e1dc7.webp

只不过会通过因果掩码矩阵,在计算注意力的时候体现处理。

说到这,本期视频也就结束了。

大家是不是已经学懂了 Transformer 呢?

对了,别忘了还有个问题 2。

在解码器上方的多头自注意力机制中:

1749712034134-96942a84-27c9-4249-9c7c-309f3dbabb28.webp

对于三个输入分叉,到底谁是 Q、谁是 K、谁是 V?

开通会员 本次下载免费

所有资料全部免费下载! 推荐用户付费下载获取返佣积分! 积分可以兑换商品!
一键复制 下载文档 联系客服