机器学习笔记(17): REINFORCE 算法

可能更好的阅读体验 Jeefy's Blog: REINFORCE 算法

核心思想和蒙特卡洛强相关,很幸运的在 THUWC 2024 遇到了 MCTS 的工程题。

这个算法是 RL Policy Based 类的始祖,需要对大量的 Trajectory 进行采样,而每个Trajectory之间的差异可能是巨大的,结果就引入了高方差(High Variance)和较大的梯度噪声(noisy gradients) ,导致训练的不稳定和策略收敛困难。

所以之后的优化和变体就是基于上述两个问题进行的。


  • \(\pi_\theta\) 基于参数 \(\theta\) 的策略函数
  • \(\tau\) 轨迹。
  • \(G_{\tau, t} = \sum_{k=0}^{\infty} \gamma^{k} r_{t+k}\) 带衰减的累计收益
  • \(a, r\) 动作和收益。

期望最大收益:

\[J(\theta) = {\mathbb E}_{s \sim \tau^{\pi_\theta}, a \sim \pi_\theta} [G_{\tau, 1}] \]

利用马尔可夫和蒙特卡洛无偏估计,以及 \(\nabla_\theta p(\theta) = p(\theta) \nabla_\theta \log p(\theta)\) 的小 trick,可以有:

\[\nabla J(\theta) = {\mathbb E}_{\tau \sim \pi_\theta} \left[ \sum_{t = 0}^T \nabla \log \pi_\theta(a_t|s_t) G_{\tau, t} \right] \]

\[\nabla J(\theta) = {\mathbb E}_{\tau \sim \pi_\theta} \left[ \sum_{t = 0}^T G_{\tau, t} \nabla \log \pi_\theta(a_t|s_t) \right] \]

\(\nabla \log \pi_\theta(a_t|s_t)\) 其实就是预测概率分布和真实 one-hot 动作之间的交叉熵,可以通过数学推导而来。

于是 REINFORCE 算法就有了:

posted @ 2026-09-26 20:52  jeefy  阅读(1)  评论(0)    收藏  举报