什么是策略梯度?
首先从文本生成角度简单介绍一下强化学习:
因为状态-动作空间非常庞大,将强化学习应用于对话生成是一个巨大的挑战。在这种背景下,我们将人类交互视为“环境”。在每个时间步 t ,代理(即AI助手)从环境(即对话历史)中接收到一个状态 s_t ,这个状态包括至今为止的所有对话文本,然后代理根据其策略 \pi 选择一个动作 a_t 以生成下一个词。环境会返回一个奖励 r(s_t, a_t) ,这个奖励是根据从人类偏好数据中训练出来的奖励函数 r 计算得出的。随后,代理过渡到下一个状态 s_{t+1} ,其包括了下一段对话历史。强化学习的目标是找到一种最优行为策略,使得代理能够在整个轨迹 \tau = \{s_1, a_1, \dots, s_T, a_T\} 上最大化累积奖励(即回报)。一种回报形式是有限视界非折扣回报 R(\tau) = \sum_{t'=1}^{T'} r(s_t, a_t) ,这只是一个固定步数内累积的奖励总和。另一种是无限视界折扣回报 R(\tau) = \sum_{t=0}^{\infty} \gamma^t r(s_t, a_t) ,它将代理在整个轨迹上获得的所有奖励考虑在内,并且有一个折扣因子 \gamma \in (0, 1) 。
策略梯度方法是一种直接优化代理策略的强化学习技术——将状态映射到动作,而不是像基于值的方法那样学习值函数。策略梯度方法的核心思想是使用梯度上升算法改进策略。简而言之,这些方法调整策略的参数,使得预期回报最大化。策略 \pi 通常由参数 \theta 表示,我们将其表示为 \pi(a|s, \theta) ,即在状态 s 下选择动作 a 的概率。策略梯度的更新规则给出为:
\theta \leftarrow \theta + \alpha \nabla_\theta J(\theta),其中 \alpha 是学习率, J(\theta) 表示遵循策略 \pi_\theta 时的预期回报,策略性能的梯度 \nabla_\theta J(\theta) 称为策略梯度。
策略梯度的一般形式可以表述为:
\nabla_\theta J(\theta) = \mathbb{E}_{\tau \sim \pi_\theta} \left[ \sum_{t=0}^{T} \nabla_\theta \log \pi_\theta(a_t | s_t) \Phi_t \right],其中 \Phi_t 可以是 \Phi_t = R(\tau) 或 \Phi_t = \sum_{t'=t}^{T} R(s_{t'}, a_{t'}) 或 \Phi_t = \sum_{t'=t}^{T} R(s_{t'}, a_{t'}) - b(s_t) 之一。这些选择都会导致相同的策略梯度预期值,尽管它们具有不同的方差。
通过蒙特卡洛采样计算回报。如果回报是有利的,则所有动作都会被“强化”以增加它们被选择的概率。这种方法的优点在于其无偏性,因为我们仅依赖于实际获得的回报,而不是对其进行估计。然而,由于与此方法相关的高方差问题,一个挑战是由环境随机性(在一次情节中发生的随机事件)和策略本身引起的不同轨迹会导致回报的多样性。
为了减少这种方差,常见的策略是使用优势函数估计来代替回报在策略梯度更新规则中的使用。优势函数 A(s_t, a_t) 表示在状态 s_t 下采取特定动作 a_t 比在同一策略下其他动作的平均质量高出多少。这样, \Phi_t = A(s_t, a_t) 。
从数学上讲:
A(s_t, a_t) = Q(s_t, a_t) - V(s_t),其中 Q(s_t, a_t) 是动作-值函数,表示在状态 s_t 下采取动作 a_t 后的预期回报, V(s_t) 是值函数,表示状态 s_t 下的平均预期回报。
在RL领域中,使用优势函数的策略梯度方法的应用至关重要。然而,不同算法中对优势函数的估计方法在不同RL领域中会有显著差异。最常用的方法是广义优势估计,简称GAE,技术细节详见:https://www.mlpod.com/655.html
评论 (0)