Transformer模型流程通俗理解

transformer模型是如何进行训练和推理?

学习Transformer模型内部机制

2025-4-10

transformer注意力机制掩码

Transformer模型

问题描述

如何理解transfomer模型训练过程?

问题分析

1. 编码层

假设我们要训练的数据是:

const data = [{text:'猫喜欢吃鱼<eos>'},{text:'狗喜欢吃骨头<eos>'}]
  • 再用分词器整理成我们的训练数据
cosnt trainsData = [
  ['猫','喜欢','吃','鱼','<eos>'],
  ['狗','喜欢','吃','骨头','<eos>']
]
  • 通过计算注意力得分来获取文字之间的上下文关系(单一样本讲解)

猫对猫的得分是0,猫对喜欢的得分是2,猫对吃的得分是3,猫对鱼的得分是4,以此类推

喜欢<eos>
02340
喜欢10560
23070
34500
<eos>34500
  • 接着我们会得到一个带有概率的样本,记住我们的输出维度还是跟输入维度是一样的
['猫*0.2','喜欢*0.2','吃*0.3','鱼*0.2','<eos>*0.1']

2. 解码层

  • 解码的过程跟输入差不多,只不过有点变化, 输入变成了以下数据:

['<SOS>','猫','喜欢','吃','鱼']
  • 看到我们的<eos>不见了,开头添加了<SOS>,这叫做 右移 操作
  • 为什么需要这样做呢,记得我们之前的注意力得分吗,我们要这里做一个神奇操作:
<SOS>喜欢
<SOS>0-inf-inf-inf-inf
00-inf-inf-inf
喜欢000-inf-inf
0000-inf
00000
  • -inf 就代表极小值,也就是没有注意力的分数,所以 <SOS>不能看到这个词,不能看到未来才能求损失
  • 有损失才能不断的修正参数
样式=['猫','喜欢','吃','鱼','<eos>']
标签=['<SOS>','猫','喜欢','吃','鱼']

3.最终的输出

  • 我们会有个词表,也就是一开始的分词器适应的词表,通过这个词表,我们可以知道预测的是哪个词