问题:怎样设计深度强化学习的【动作】的随机性呢?

其实这个动作的随机性的问题就是强化学习里老生常谈的“探索与利用”(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),比如

Loss=L_{CLIP} +c_{1}L_{VF}+c_2 S[π](s)

这个 S 就是熵:熵越大,分布越扁平,随机性越大。所以如果强行奖励高熵就是逼着agent多尝试几种可能,也就是让他强制探索。

3、参数空间噪声(Parameter Space Noise)

这是 OpenAI 提出来的一想法:别在动作上加噪声了,直接在神经网络的权重参数上加噪声。

W′=W+σ⋅ϵ

这样做的好处是:产生的动作随机性是 State-dependent(状态依赖) 的。普通的动作噪声在每一帧都是独立的抖动(看起来像帕金森);而参数噪声会让agent在这一整个 Episode 里表现出一种“稍微不同的性格”。这种一致性的探索,能去到更远的地方,特别适合那些容易陷入局部最优的复杂任务。

https://arxiv.org/abs/1706.01905

4、最大熵强化学习 (SAC)

既然说到了熵就不能不提 Soft Actor-Critic (SAC)。以前我们加熵正则项只是个辅助手段,SAC 直接把「最大化熵」写进了主目标函数里。

公式太复杂我就不手写了,直接截论文里的图了:

这样agent的目标不仅仅是拿高分,还要在拿高分的同时保持动作尽可能的随机。这听起来很矛盾,但实际上这让 SAC 具有了极强的泛化性,是目前连续控制领域的标杆算法之一。它能自动平衡探索和利用,完全不需要像 ϵ-Greedy 那样手动调衰减,所以用起来特舒服。

https://arxiv.org/abs/1801.01290

以上供参考

原始链接: https://www.zhihu.com/question/1981837456866312931/answer/1982035204848779565
侵权请联系站方: [email protected]

相关推荐

换一批