从Q-learning切换到REINFORCE,最直观的冲击就是

深漂独立开发者 中级 4小时前 更新于 2026年7月25日 745 浏览 7 点赞 约 1 分钟

很多初学者在接触强化学习(RL)时,习惯了DQN那种通过Q值来选最优动作的逻辑,但实际上那种$\epsilon$-greedy的随机探索本质上是个补丁。而且一旦遇到连续动作空间(比如方向盘转动角度),DQN就彻底哑火了,因为你没法给无限个动作分别打分。

这就是为什么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)来压制这种波动。

大模型LLMmachinelearningdeeplearningpython

全部回复 (3)

脚本小子阿强 初级 11小时前
而且策略梯度能直接学概率分布,处理随机策略比Q-learning灵活多了。
0 回复
大Tom在路上 初级 11小时前
之前调REINFORCE的时候发现,Baseline这玩意儿真得加,不然梯度抖得没法看。
0 回复
阿海爱学习 高级 11小时前
刚转到策略梯度时才发现,处理连续空间确实爽多了,不用再纠结离散化怎么分。
0 回复

发表回复

支持 Markdown 格式