问题:怎样设计深度强化学习的【动作】的随机性呢?
其实这个动作的随机性的问题就是强化学习里老生常谈的“探索与利用”(Exploration vs. Exploitation)问题。
探索的意思就是"敢于尝试新东西",利用则是说让agent重复上次的动作。所以探索和利用是需要权衡的,你既要利用已知的好策略拿奖励,又得探索未知区域防止错过更优解。
所以最简单的办法肯定就是简单地 random() 一下,但是这个肯定不行,因为这样agent就会像个无头苍蝇一样原地打转。
针对不同的动作空间和算法,设计随机性的思路也是完全不同,也就是说各村有个村的高招,我知道的一些方法如下,供参考。
离散动作:简单粗暴但有效的 ϵ-Greedy
如果你的环境是像 Atari 游戏或者走迷宫这种,动作就那么几个(上下左右),最经典、最常用的肯定还是 ϵ-Greedy。
这玩意儿逻辑特简单:就是上面的random,不过他是扔色子。有 ϵ 的概率瞎选一个动作(探索),剩下 1−ϵ 的概率选当前 Q 值最高的动作(利用)。
但是不能让agent像无头苍蝇那样乱闯到死,所以需要设计一个 Decay Schedule(衰减策略)。训练刚开始,你甚至可以设 ϵ=1.0,让agent把环境摸个遍(类似广度优先);随着训练步数增加,慢慢把它降下来,最后保留一个很小的值(比如 0.01 或 0.05),防止它彻底丧失发现新策略的能力(类似深度优先)。
具体的论文可以看这两篇
https://www.nature.com/articles/nature14236https://arxiv.org/abs/1312.5602除了 ϵ-Greedy,还有一种基于概率分布的 Boltzmann Exploration (Softmax),就是根据 Q 值的大小转化为概率,Q 值大的被选中的概率高,但小 Q 值也有机会。这个需要再调一个温度系数 T,所以比较麻烦,效果也不是很好,我看现在好像没多少人用了。
连续动作
到了机械臂控制或者自动驾驶这种连续动作空间,输出是具体的数值,ϵ-Greedy 就不管用了。我知道的有几种方法
1、确定性策略加噪声(Off-Policy)
像 DDPG、TD3 这种算法,网络输出的是一个确定的动作值 μ(s)。为了让它动起来不一样,所以可以手动在输出上叠加一个噪声:
Action=μ(s)+N
最开始 DDPG 的论文推荐用 Ornstein-Uhlenbeck (OU) 噪声。不用高斯白噪声的原因因为物理世界是有惯性的:比如控制机械臂,这一秒向左用力,下一秒大概率还是向左,OU 噪声能产生这种时间相关性的随机扰动,有助于维持探索的动量。
Continuous control with deep reinforcement learning后来大家发现 OU 噪声参数太难调,我记得是TD3 的作者实验证明过,简简单单的 高斯噪声(Gaussian Noise) 配合参数衰减,效果也并不差,甚至更稳。所以现在还是用这个的多。
2、随机性策略(Stochastic Policy)
这是现在 PPO、A3C 这类算法的主流的方法。因为这些网络不再直接输出动作,而是输出动作分布的参数,通常是 均值 μ 和 标准差 σ。而具体的动作是直接从这个高斯分布 N(μ,σ) 里采样出来的。
因为 σ 也是网络学出来的,随着训练进行,agent如果对某个状态很有把握,它会自动把 σ 学得很小(动作变精准);如果它很迷茫,σ 就会很大(增加探索幅度),可以理解为是自动探索了。
但是为了防止它过早躺平(σ 迅速收敛到 0),通常会在 Loss 函数里硬加一项 熵正则化(Entropy Regularization),比如
这个 S 就是熵:熵越大,分布越扁平,随机性越大。所以如果强行奖励高熵就是逼着agent多尝试几种可能,也就是让他强制探索。
3、参数空间噪声(Parameter Space Noise)
这是 OpenAI 提出来的一想法:别在动作上加噪声了,直接在神经网络的权重参数上加噪声。
这样做的好处是:产生的动作随机性是 State-dependent(状态依赖) 的。普通的动作噪声在每一帧都是独立的抖动(看起来像帕金森);而参数噪声会让agent在这一整个 Episode 里表现出一种“稍微不同的性格”。这种一致性的探索,能去到更远的地方,特别适合那些容易陷入局部最优的复杂任务。
https://arxiv.org/abs/1706.019054、最大熵强化学习 (SAC)
既然说到了熵就不能不提 Soft Actor-Critic (SAC)。以前我们加熵正则项只是个辅助手段,SAC 直接把「最大化熵」写进了主目标函数里。
公式太复杂我就不手写了,直接截论文里的图了:

这样agent的目标不仅仅是拿高分,还要在拿高分的同时保持动作尽可能的随机。这听起来很矛盾,但实际上这让 SAC 具有了极强的泛化性,是目前连续控制领域的标杆算法之一。它能自动平衡探索和利用,完全不需要像 ϵ-Greedy 那样手动调衰减,所以用起来特舒服。
https://arxiv.org/abs/1801.01290以上供参考
目录
最新
- 如何评价DeepSeek发布梁文锋署名论文,提出「条件记忆」及Engram记忆检索架构?有哪些亮点?
- 构建自己的AI编程助手:基于RAG的上下文感知实现方案
- rope最早是为了解决llm外展问题提出的么?
- 深度研究Agent架构解析:4种Agent架构介绍及实用Prompt模板
- AR+diffusion的一类工作是怎么做的,相比DDPM式的diffusion工作有什么优势?
- 在构建多轮工具调用的开放域research agent时,SFT和RL流程应该如何设计和优化?
- 别再往一个智能体里塞功能了:6种多智能体模式技术解析与选型指南
- Anthropic 发布 AIAgent 评估体系完整指南,对 AIAgent 发展有何意义?