Reinforcement Learning in Continuous Action Spaces through SMC
Intro:
这几天做连续控制域上的 Actor-Critic 遇到了麻烦,即如何设计 Policy 网络的输出,在离散域上,定义为各控制量对应的概率,显然连续控制域是无法这样表示的。(很奇怪的是即使在我一直在看的 CS294-112 这么详细的课程都没有提过这点。)
第一反应必然是 直接输出控制量,但下一秒就反应过来,在之前一篇PG数学原理中,我们推导出 Return梯度 用 Action的概率 来计算的过程中,必须要能够写出 Aciton的概率,若直接输出控制量显然是没有概率这种东西了。于是思路显然是要利用输出来构造分布。
很快我找到了在 StackOverflow 中的一个回复:Policy 网络输出正态分布的 mu 和 sigma 参数,来构成一个正态分布,对它采样就得到了 Action。(google的结果也挺少,而且好像前面几个都是同一个人在推这个方案。。。)我很快就去实现了这个方法,结果虽然很不理想,但有一定的收敛效果,问题是飞快的陷入局部极小,当然很可能是我其他方面没有设计好。但考虑一下这个方法,问题明显是存在的。例如,若某一 State 时,最优的 Action 为 1,而当前的分布的 期望 mu 为 -0.5, 此时实际采样得到的 Action 是 -0.4 ,得到了不好的结果,所以要减小 -0.4 的概率,但如果算一下 -0.4 对应概率密度关于 mu 的梯度,会发现减小 -0.4 概率的方向 为 mu 减小的方向,于是最优 Action 对应的概率密度梯度也是一个减小的方向。这就很奇怪,而在离散域时,若减小某一个 Action 对应的概率,那么其他所有 Action 对应的概率都会上升。
于是我自然的就想到,把输出设计为几个点,通过这几个点补出一条分布曲线。然后在搜索的时候就发现了这篇同一个思路的文章。
SMC
这个词好像在wiki en上是和粒子滤波等同,于是其实现的步骤就很容易想到了。首先从初始策略(假设为均匀分布)采样 N 个 Action,
每一个 Action 有一个对应的权重 w。于是初始策略就可以近似为,
此处,使用了 Dirac 函数,也可以用其它分布(作为 核函数)。而 N 个 w ,就是 Policy 网络的输出了。于是同离散域的情形一样可以进行优化。
由于初始策略是均匀分布,所以 N 个 w 都为 1/N ,而通过不断的优化,比较好的 Action 对应的 w 就会增大, N 个 w 的 方差就会增大, 当到达一定程度之后,我们就会进行 重采样,即同一开始时一样,重新用当前的策略来产生 N 个 Action 。显然,新的 N 个 Action 会集中在之前概率最大的 Action 的附近,因此这个重采样的过程就是从粗到细,通过 N 个离散值的不断细分,就能找到连续域上的优化解。
这篇文章并没有详细的分析这个方法,因此数学推导待续。
实验待续。
思考:1。重采样这一做法意味着缩小搜索范围,因此重采样之前必须能够收敛到比较好的效果(最优解附近);2。采样得到 N 个 Action,它们的分布影响很大,这一方差就依赖于 N 的大小,但如果 N 很大,问题就会成为高维离散动作空间的问题,也不理想。因此是否可以按照分布来选取 N 个 Action,即两两之间所夹部分的概率都为 1/N。感觉没有问题,因为符合分布的期望,方差也可以通过调整两两间的概率来使其相同。3。核函数的方差参数要如何取,如正态分布的sigma?