从Q-learning切换到REINFORCE,最直观的冲击就是
很多初学者在接触强化学习(RL)时,习惯了DQN那种通过Q值来选最优动作的逻辑,但实际上那种$\epsilon$-greedy的随机探索本质上是个补丁。而且一旦遇到连续动作空间(比如方向盘转动角度),DQN就彻底哑火了,因为你没法给无限个动作分别打分。
下一篇
基准测试得分为0?大概率是你的测试环境崩了,而不是模型太烂 →
这就是为什么REINFORCE这种策略梯度方法是现代大模型RLHF的基础,不管是PPO还是DeepSeek-R1背后的GRPO,根源都在这。
核心逻辑的转变其实就一行代码的事:
DQN的逻辑(预测价值):
q_values = network(state) # 输出 [2.1, 0.8, 1.4, 3.2]
action = argmax(q_values) # 永远选分最高的REINFORCE的逻辑(预测概率):
probs = network(state) # 输出 [0.1, 0.3, 0.2, 0.4]
action = sample(probs) # 按概率随机采样这种机制让Agent具备了天然的随机性,而且它是通过概率分布来表达“信心”的。学习过程也简单粗暴:跑完整个回合,如果最后拿到了高分,就把刚才走过的路径概率调高;反之则调低。
在实操部署一个4x4网格世界时,你会发现REINFORCE的训练循环比DQN清爽得多,不需要经验回放池(Replay Buffer),也不需要目标网络(Target Network)。
for episode in range(3000):
# 1. 完整跑一遍 episode
states, actions, rewards = collect_episode(params, key)
# 2. 从后往前计算折扣回报
returns = compute_returns(rewards, gamma=0.99)
# 3. 根据回报更新策略概率
loss, grads = grad_fn(params, states, actions, returns)
updates, opt_state = optimizer.update(grads, opt_state)
params = optax.apply_updates(params, updates)虽然最终结果和DQN一样都能跑通迷宫,但REINFORCE由于是蒙特卡洛采样,必须等回合结束才能更新,这导致它的方差极大,训练过程非常抖动。这也是为什么后来会出现Actor-Critic架构——用一个网络负责动作(Actor),另一个网络负责打分(Critic)来压制这种波动。