一个有用的思维模型

训练就是受控的错误修正。

想象一个内部装有可调旋钮的模型。输入一个示例后,模型会生成输出。一条评分规则会说明该输出的好坏。训练会计算出应朝哪个方向转动这些旋钮,将它们稍微调整后再试一次。

这些“旋钮”就是数值形式的模型参数。评分规则称为目标函数。当分数越低越好时,这个分数通常称为损失

与其说模型“吸收”了数据,不如用这幅图景来理解。数据提供示例,目标函数提供改进方向,而训练算法改变模型。

training examples
       |
       v
model makes outputs
       |
       v
objective measures loss or reward
       |
       v
calculate each parameter's contribution
       |
       v
update parameters
       |
       +---------- repeat ----------+

held-out validation data checks whether the result transfers

AI 训练如何运作

具体方法取决于模型和目标,但神经网络训练通常遵循以下循环:

  1. 准备示例和目标函数。训练数据可能将输入与标签配对、隐藏输入的一部分让模型进行预测,或包含关于偏好输出的反馈。
  2. 选择起始模型。训练可以从新初始化的参数开始,也可以从已经训练过的模型开始。
  3. 将一个批次输入模型。批次是一起处理的一小组示例。这次前向传播类似于推理:当前模型将输入转换为输出。
  4. 评估输出。损失函数可以衡量输出与目标答案的差距。另一种目标函数则可能为偏好的行为分配更高的奖励。
  5. 分配功劳或责任。对于神经网络,反向传播会为每个参数计算一个梯度。梯度表示该参数发生微小变化时,预计会如何改变损失。
  6. 更新参数。优化器利用这些梯度来选择实际的变化幅度。学习率控制一次典型更新的大小。
  7. 重复并检查。训练会在更多批次上继续进行。单独的验证数据用于检查这种改进是否能超出产生这些更新的示例。

一个训练轮次(epoch)是对训练数据集进行一次完整遍历。训练可以进行不到一个训练轮次,也可以进行许多个训练轮次。训练轮次只是进度单位,并不保证产生了有用的学习。

上述循环描述了训练的狭义技术含义。在实践中,人们也会用训练来指围绕训练展开的更大流程:收集和筛选数据、选择目标函数、运行实验、评估检查点,以及决定何时停止。

反馈并不总是以同一种形式出现

“将预测结果与正确答案进行比较”是一个有用的起点,但作为定义来说过于狭窄。

  • 监督学习中,示例包含目标标签,例如为图像分配的类别。
  • 自监督学习中,数据会提供自己的目标。语言模型可以通过预测隐藏的文本片段或下一个文本片段来学习。
  • 强化学习中,结果会获得奖励,而训练会提高采取能带来更高奖励的行动的概率。

这些方法的不同之处在于训练信号的来源不同。它们共享同一个核心思想:利用反馈,按照某个目标改变模型参数。

一个单步训练示例

考虑一个只有一个参数的模型:w。它进行如下预测:

output = w × input

模型从w = 0.5开始。其训练示例的输入为2,目标输出为4

第一次预测为:

0.5 × 2 = 1

使用平方误差作为损失:

(prediction - target)²
(1 - 4)² = 9

对于这个示例,损失相对于w的梯度为-12。负号意味着增大w应当降低损失。当学习率为0.1时,梯度下降会进行如下更新:

new w = old w - learning rate × gradient
new w = 0.5 - 0.1 × (-12)
new w = 1.7

现在预测值为1.7 × 2 = 3.4,平方误差为0.36。一次更新就使模型对这个示例的拟合更好。

真实模型可能有许多参数,训练通常还会结合一个批次中的多个信号。优化器必须找到适用于各种不同示例的变化。改善一个批次还不够,模型还必须在留出数据上表现良好。

训练为何重要

训练决定了模型之后被使用时能够表现出的行为。

架构决定模型能够执行哪些类型的计算。训练则在该架构允许的范围内选择具体的参数值。这些值会影响模型响应哪些模式,以及它倾向于生成哪些输出。

目标函数之所以重要,是因为模型会针对接收到的信号进行优化,而不是针对人们可能关心的所有质量进行优化。经过文本预测训练的语言模型可以在许多语言任务上发挥作用,但预测损失并不能直接保证真实性、安全性或遵循指令。后续训练可以通过示范或偏好反馈来针对其中一些行为进行优化。

数据同样重要,原因也相同。模型只能从可用的示例和反馈中获得训练信号。其中的缺失、错误、重复和偏差都可能影响训练结果。

常见误解

训练会存储每个示例的副本

训练会改变参数。它通常不会在模型内部创建一个可按行检索的训练集数据库。

模型仍然可能记住某些示例,尤其是在数据重复或模型对数据拟合过度时。但记忆和有用的泛化是不同的结果。在真正独立的数据上进行评估,有助于区分两者。

训练损失越低,模型就越好

损失降低意味着模型在所测量的数据上更好地拟合了训练目标。它并不能证明模型能处理新情况,也不能证明该目标函数涵盖了真正的目标。

如果训练损失下降而验证集表现变差,模型可能出现过拟合:模型变得更加专门适应训练示例,却以处理新示例的能力为代价。

训练越多,模型就总会越好

额外的更新可能带来帮助、几乎没有效果、使训练不稳定,或加剧过拟合。结果取决于数据、目标函数、优化器设置、模型容量以及停止决策。

模型会在你与它聊天时从你这里学习

在普通的AI 推理过程中,已部署的模型使用固定参数来回答输入。当前对话中的信息可以影响它的下一次输出,但不会改变这些参数。

根据具体产品及其数据政策,提供商之后可能会在独立的训练过程中使用所收集的交互数据。这与模型在对话期间自行更新并不是一回事。

每个模型都是从头开始训练的

训练可以从现有模型开始。预训练利用大型通用数据集构建广泛的能力。微调则继续训练,以适应更狭窄的任务或领域。后训练是对后续阶段的更宽泛称呼,这些阶段旨在塑造模型行为,可能包括微调和基于偏好的方法。

这些标签之间的界限尚未完全标准化。可靠的判断标准是:该过程是否更新了模型参数。在提示中提供示例可以改变输出,但不等于训练模型。

训练如何融入 AI 系统

机器学习是一种更广泛的方法,系统通过数据或经验改进其行为。训练则是在这种方法中产生或调整模型的过程。

训练运行的输出通常是一个保存下来的检查点,其中包含已学习的权重及其他状态。开发者会评估候选检查点,并选择一个用于继续训练或部署。

部署会开启另一个不同的运行阶段。在推理过程中,输入会经过训练好的模型,以生成预测、分类结果或生成内容。前向传播在两个阶段中都会出现;训练则额外包括反馈、梯度计算和参数更新。

接下来阅读什么

阅读《什么是 AI 推理?》,了解当参数更新循环停止、训练好的模型开始被使用时会发生什么变化。然后阅读《训练与推理的区别》,直接比较这两个生命周期阶段。