Skip to content

奖励模型的初始化、损失计算与训练流程

1. 奖励模型的初始化

奖励模型的初始化是确保模型具备良好性能的基础步骤。常见的初始化方法包括使用预训练模型和随机初始化。以下详细描述使用预训练模型进行初始化的数学过程:

1.1 使用预训练模型初始化

假设我们选择一个预训练语言模型,其参数为 \(\theta_{\text{pre}}\)。奖励模型将在此基础上进行调整,以适应评分任务。

  1. 加载预训练权重

将预训练模型的参数作为奖励模型的初始参数:

$$ \theta_{\text{RM}}^{(0)} = \theta_{\text{pre}} $$

  1. 调整模型架构

根据评分任务的需求,通常需要在预训练模型的基础上添加一个线性层,将模型的输出映射到一个实数评分。例如,若预训练模型的隐藏层输出维度为 \(d\),则线性层的参数为 \(W \in \mathbb{R}^{1 \times d}\) 和偏置 \(b \in \mathbb{R}\)。奖励函数表示为:

$$ R(x, y; \theta_{\text{RM}}) = W \cdot \text{Model}(x, y; \theta_{\text{pre}}) + b $$

其中,\(\text{Model}(x, y; \theta_{\text{pre}})\) 表示输入 \(x\) 和候选答案 \(y\) 通过预训练模型得到的隐藏表示。


2. 损失函数的计算

奖励模型的训练目标是使其评分能够准确反映人类的偏好。常用的损失函数是**交叉熵损失**,用于最大化最佳答案的相对概率。

2.1 概率分布的构建

给定输入 \(x\) 和候选答案集合 \(\{y_i\}_{i=1}^K\),奖励模型为每个候选答案 \(y_i\) 生成评分 \(R(x, y_i; \theta_{\text{RM}})\)。通过Softmax函数将评分转化为概率分布:

\[ P(y_i \mid x) = \frac{e^{R(x, y_i; \theta_{\text{RM}})}}{\sum_{j=1}^{K} e^{R(x, y_j; \theta_{\text{RM}})}} \]

2.2 交叉熵损失函数

假设在每个样本中,人类标注的最佳答案为 \(y_b\)。交叉熵损失函数定义为:

\[ L = -\log P(y_b \mid x) = -\log \left( \frac{e^{R(x, y_b; \theta_{\text{RM}})}}{\sum_{j=1}^{K} e^{R(x, y_j; \theta_{\text{RM}})}} \right) \]

2.3 经验风险近似

在实际训练中,使用有限的训练数据集进行经验风险最小化。假设训练集包含 \(N\) 个样本,每个样本对应 \(K_n\) 个候选答案,最佳答案索引为 \(b_n\)。经验损失函数表示为:

\[ L_{\text{empirical}} = -\frac{1}{N} \sum_{n=1}^{N} \log \left( \frac{e^{R(x_n, y_{b_n}; \theta_{\text{RM}})}}{\sum_{i=1}^{K_n} e^{R(x_n, y_i^n; \theta_{\text{RM}})}} \right) \]

2.4 梯度计算

对经验损失函数 \(L_{\text{empirical}}\) 关于模型参数 \(\theta_{\text{RM}}\) 的梯度为:

\[ \nabla_{\theta_{\text{RM}}} L_{\text{empirical}} = -\frac{1}{N} \sum_{n=1}^{N} \left[ \nabla_{\theta_{\text{RM}}} R(x_n, y_{b_n}; \theta_{\text{RM}}) - \sum_{i=1}^{K_n} P(y_i^n \mid x_n) \nabla_{\theta_{\text{RM}}} R(x_n, y_i^n; \theta_{\text{RM}}) \right] \]

3. 训练流程

奖励模型的训练流程包括数据准备、前向传播、损失计算、反向传播与参数更新。以下是具体的数学描述:

3.1 数据准备

每个训练样本由输入 \(x_n\),候选答案集合 \(\{y_i^n\}_{i=1}^{K_n}\) 和最佳答案索引 \(b_n\) 组成。训练集表示为:

\[ D = \{ (x_n, \{y_i^n\}_{i=1}^{K_n}, b_n) \}_{n=1}^{N} \]

3.2 前向传播

对于每个样本 \(n\) 和其候选答案 \(y_i^n\),计算奖励分数:

\[ R(x_n, y_i^n; \theta_{\text{RM}}) \]

将奖励分数转化为概率分布:

\[ P(y_i^n \mid x_n) = \frac{e^{R(x_n, y_i^n; \theta_{\text{RM}})}}{\sum_{j=1}^{K_n} e^{R(x_n, y_j^n; \theta_{\text{RM}})}} \]

3.3 损失计算

计算经验损失函数:

\[ L_{\text{empirical}} = -\frac{1}{N} \sum_{n=1}^{N} \log \left( \frac{e^{R(x_n, y_{b_n}; \theta_{\text{RM}})}}{\sum_{i=1}^{K_n} e^{R(x_n, y_i^n; \theta_{\text{RM}})}} \right) \]

3.4 反向传播与参数更新

通过计算损失函数 \(L_{\text{empirical}}\) 相对于参数 \(\theta_{\text{RM}}\) 的梯度 \(\nabla_{\theta_{\text{RM}}} L_{\text{empirical}}\),使用梯度下降法更新参数:

\[ \theta_{\text{RM}} \leftarrow \theta_{\text{RM}} - \eta \cdot \nabla_{\theta_{\text{RM}}} L_{\text{empirical}} \]

其中,\(\eta\) 为学习率。

3.5 迭代训练

重复执行前向传播、损失计算、反向传播与参数更新的步骤,直到满足终止条件(如达到预设的训练轮数或损失收敛)。


4. 总结

奖励模型在RLHF中的初始化、损失计算和训练流程如下:

  1. 初始化
  2. 使用预训练模型的参数 \(\theta_{\text{pre}}\) 作为奖励模型的初始参数 \(\theta_{\text{RM}}^{(0)} = \theta_{\text{pre}}\)
  3. 调整模型架构以适应评分任务,如添加线性层。

  4. 损失计算

  5. 构建概率分布 \(P(y_i \mid x)\) 通过Softmax函数。
  6. 定义交叉熵损失函数 \(L_{\text{empirical}}\),最大化最佳答案的相对概率。
  7. 计算梯度 \(\nabla_{\theta_{\text{RM}}} L_{\text{empirical}}\) 以指导参数更新。

  8. 训练流程

  9. 准备包含输入、候选答案和最佳答案的数据集。
  10. 通过前向传播计算奖励分数和概率分布。
  11. 计算损失并通过反向传播更新模型参数。
  12. 迭代执行上述步骤,直至模型收敛。