上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
1.2.5 损失函数
我们在分词阶段创建了一张标准词汇表,其中每个词都由一个相同维度的向量表示,最简单的向量表示方法是one-hot编码,如表1-7所示。
表1-7 T5词汇表的one-hot编码示例
在使用Transformer模型进行有监督训练时,模型会通过相同的前向传播过程,将其输出与正确的输出进行比较。模型最终的输出也是一个词汇表,在刚开始训练时,因为模型的参数是随机初始化的,所以未训练的模型符合随机的概率分布。举个例子,如果第一步是将“你好”翻译为“Hello”,那么模型应该输出一个表示“Hello”的概率分布序列,我们当然期望它直接输出[1, 0, 0, 0, 0, 0, 0]。然而,由于模型刚开始训练,这种期望的输出是不太可能出现的,假设模型实际的输出是[0.1, 0.2, 0.3, 0.2, 0.2, 0.1](经过softmax层向,概率和才为1.0)。我们可以通过比较期望的输出和实际的输出计算一个损失值,然后用反向传播来调整模型的权重,通过训练让模型实际的输出更接近期望的输出。比较两个概率分布序列的最简单的方法就是计算它们的差值,具体的计算方法可以参考交叉熵和KL散度。
在实际情况中,我们的输入通常会包含多个词。例如,输入可能是“你好世界!”,期望的输出是“Hello World!”。在这种情况下,我们期望模型能够连续输出概率分布序列,其中每个概率分布都是一个宽度等于词汇表大小的向量。在这个概率分布序列中,每个值都对应词所在位置上的最大概率,如表1-8所示。
表1-8 期望输出的概率分布序列
在训练模型时,我们的目标是让模型能够生成期望的概率分布,但实际上不可能与其完全一致。如果训练足够长的时间,我们期望模型的输出能够如表1-9所示。
表1-9 实际可能输出的概率分布序列