基于预训练语言模型的文本生成算法:基于强化学习的解码策略(Reinforcement Learning-based Decoding)详解
好的,我们开始讲解这个题目。这个算法旨在解决传统文本生成解码策略(如贪心搜索、束搜索)可能导致生成文本不够自然、缺乏长期连贯性或陷入重复循环的问题。它通过引入强化学习来直接优化与最终生成质量相关的目标。
题目描述
在文本生成任务中(如对话生成、故事创作、摘要生成),模型需要根据给定的上文(前缀)逐个生成下一个词元(token),直到生成一个完整的序列。传统的解码策略通常以最大化每个时间步的局部概率为目标,但这并不等同于优化整个生成序列的全局质量(如流畅性、信息量、相关性)。
基于强化学习的解码策略将文本生成过程建模为一个序列决策过程:
- 智能体(Agent): 文本生成模型。
- 动作(Action): 在每一步,从词表中选择一个词作为下一个词。
- 状态(State): 当前已生成的部分文本序列。
- 奖励(Reward): 当生成完整的序列后,由一个奖励函数 根据某些评估指标(如BLEU、ROUGE、人为评分,或基于判别模型打分的奖励)来计算一个总的奖励值。这个奖励衡量的是整个序列的最终质量。
目标是训练一个策略,使得依据该策略生成的序列所能获得的期望累积奖励最大化。
解题过程(循序渐进讲解)
步骤一:明确问题与挑战
- 传统方法的局限性: 最大似然估计训练模型的目标是最大化真实序列的条件概率,即
P(目标序列 | 源序列)。但在推理(解码)时,模型是自回归的,每一步都基于自己之前生成的上文来预测下一个词。这会导致曝光偏差——模型在训练时看到的是真实的上文,而在推理时看到的是自己可能不完美的生成结果,错误会逐步累积。 - 目标不匹配: 训练时的MLE目标(如交叉熵损失)与最终用于评估生成质量的指标(如BLEU, ROUGE, 人类评判)往往不一致。一个在MLE上表现好的模型,不一定能生成在最终指标上得分高的文本。
基于强化学习的解码策略的核心思想就是直接优化我们最终关心的评估指标。
步骤二:将文本生成建模为强化学习问题
我们需要精确地定义强化学习中的各个要素:
-
时间步 t: 生成序列中的第t个位置。
-
状态 s_t: 由源文本(如果有的话,如机器翻译中的源句子)和当前已生成的前t-1个词元
(y_1, y_2, ..., y_{t-1})共同构成。 -
动作 a_t: 在时间步t,从词表V中选择一个词元
y_t。所以动作空间就是整个词表。 -
策略 π(a_t | s_t): 在状态s_t下选择动作a_t的概率。这直接对应于我们预训练好的语言模型(或微调过的模型)的条件概率分布,即
π(a_t | s_t) = P_θ(y_t | 源文本, y_<t),其中θ是模型参数。 -
奖励 R(s_t, a_t): 这是关键。在大部分设定中,中间时间步的奖励为0。只有当序列生成结束(即生成了结束符
<EOS>)时,才会根据整个生成序列Y = (y_1, y_2, ..., y_T)得到一个最终奖励R(Y)。- 奖励函数
R(Y)可以是:- 任务特定指标: 如机器翻译中的BLEU分数,文本摘要中的ROUGE分数。
- 判别器奖励: 使用一个额外训练的判别器模型来判断生成文本
Y是否看起来像“人类写的”或是否与上文相关。 - 混合奖励: 结合多个奖励,例如
R(Y) = BLEU(Y) + λ * 流畅度(Y),其中流畅度可以由生成模型自己对自己生成序列的概率来近似。
- 奖励函数
-
回报: 由于只有最终有奖励,所以从时间步t开始的累积回报
G_t基本上就等于最终奖励R(Y)。
目标是为策略π(即我们的语言模型)找到一组参数θ,以最大化期望回报:
J(θ) = E_{Y ~ π_θ} [R(Y)]
这里,Y ~ π_θ 表示序列Y是根据策略π_θ采样生成的。
步骤三:使用策略梯度方法进行优化
我们的目标是最大化 J(θ)。由于奖励函数R(Y)通常不可微(例如,BLEU分数是离散的),我们不能直接用梯度下降。策略梯度方法可以直接对期望回报进行优化。最常用的算法是REINFORCE算法,也称为蒙特卡洛策略梯度。
-
梯度计算:
REINFORCE算法的核心是策略梯度定理,其推导出的梯度估计量为:
∇_θ J(θ) ≈ E_{Y ~ π_θ} [ R(Y) * ∇_θ log π_θ(Y) ]其中
π_θ(Y)是生成整个序列Y的概率,根据链式法则,它等于每一步生成概率的连乘:
π_θ(Y) = ∏_{t=1}^T π_θ(y_t | s_t)
因此,
log π_θ(Y) = ∑_{t=1}^T log π_θ(y_t | s_t)
最终,梯度公式为:
∇_θ J(θ) ≈ E_{Y ~ π_θ} [ R(Y) * ∑_{t=1}^T ∇_θ log π_θ(y_t | s_t) ] -
蒙特卡洛估计:
这个期望可以通过采样来近似。我们使用当前的策略π_θ生成一批(比如N个)序列{Y^1, Y^2, ..., Y^N}。
对于每个采样到的序列Y^i,我们计算其奖励R(Y^i)。
然后,梯度的近似估计为:
∇_θ J(θ) ≈ (1/N) ∑_{i=1}^N [ R(Y^i) * ∑_{t=1}^{T^i} ∇_θ log π_θ(y_t^i | s_t^i) ] -
直观理解:
∇_θ log π_θ(y_t^i | s_t^i)是评分函数,它指出了如何调整参数θ,使得在状态s_t^i下选择动作y_t^i的概率增加的方向。R(Y^i)是一个标量,充当权重。- 如果一个序列
Y^i获得了高奖励(正奖励),那么我们会沿着增加生成这个序列概率的方向更新模型参数。 - 反之,如果一个序列获得了低奖励(可视为负奖励),我们会沿着降低生成这个序列概率的方向更新参数。
步骤四:降低方差与引入基准值
原始的REINFORCE算法虽然无偏,但方差很大。因为采样到的序列奖励值 R(Y^i) 可能波动剧烈,导致训练不稳定。
-
问题: 一个高奖励序列可能并非因为其中所有决策都好,而可能带有一定的运气成分。直接用这个可能“虚高”的奖励去加权整个序列的所有动作,会导致更新不准确。
-
解决方案:引入基准值:
一个经典的技巧是引入一个基准值b,将梯度公式改为:
∇_θ J(θ) ≈ (1/N) ∑_{i=1}^N [ (R(Y^i) - b) * ∑_{t=1}^{T^i} ∇_θ log π_θ(y_t^i | s_t^i) ] -
基准值b的作用:
(R(Y^i) - b)现在衡量的是序列Y^i的“相对优势”。如果奖励高于基准,则进行正向更新;如果低于基准,则进行负向更新。- 这大大降低了梯度估计的方差,而不会改变其期望值(只要b不依赖于当前动作)。
- 一个常见的b选择是平均奖励,即
b = (1/N) ∑_{i=1}^N R(Y^i)。
-
进阶:批评家网络:
更先进的方法是使用一个独立的神经网络(称为批评家)来学习一个状态值函数V(s_t),它预测从状态s_t开始所能获得的期望回报。然后用(R(Y) - V(s_t))作为每个时间步的优势函数估计。这就进入了演员-评论家 框架,可以进一步降低方差。
步骤五:训练流程与重要技巧
- 预热: 直接对预训练好的语言模型进行RL微调可能不稳定。通常先使用最大似然估计(MLE)在目标数据集上进行少量微调,让模型先适应特定任务。
- 混合损失函数: 为了防止模型在优化RL目标时“遗忘”基本的语言建模能力(导致生成不连贯的文本),通常将RL损失和MLE损失结合:
L_{total} = λ_{RL} * L_{RL} + λ_{MLE} * L_{MLE}
其中L_{RL} = -J(θ)(因为我们通常最小化损失),L_{MLE}是标准的交叉熵损失。 - 迭代训练:
a. 用当前模型(演员)采样生成一批序列。
b. 使用奖励函数R计算每个序列的奖励。
c. (如果使用评论家)用奖励信号来更新评论家网络。
d. 计算策略梯度(带基准或优势函数),并结合MLE损失,反向传播更新语言模型(演员)的参数。
e. 重复上述过程。
总结
基于强化学习的解码策略通过将文本生成视为序列决策过程,直接优化与最终质量挂钩的奖励信号,从而弥补了传统解码策略的目标不一致问题。其核心是策略梯度方法,通过采样来估计梯度。为了稳定训练,引入基准值或使用演员-评论家架构来降低方差是关键。同时,混合损失函数和预训练模型预热是保证生成文本基本质量的重要实践。这种方法虽然计算成本较高,但在需要高质量、可控文本生成的场景中非常有效。