不用重参数化技巧的SAC
不能直接求梯度的原因
SAC算法的目标函数:
如果按照机器学习通常的做法,就是将期望里的项目(即中括号里的项)对进行求导,然后对采样的样本取平均值。但这样是不对的,因为采样的过程是和参数相关的,有待优化的参数,因此前面那种方法求的导不等于原始目标函数对的梯度。
注:策略梯度方法从来都不是直接能拿一个目标函数去自动求梯度,都是先用公式推出一个策略梯度来
使用REINFORCE的方法对策略梯度进行推导
为了利用采样,再改写 上式中的+1可以去掉,因为
也可以将+1换成其他和a无关的量,不会影响梯度,相当于带baseline的梯度算法,例如:
经实验,重参数化和非重参数化的方法从性能和运算开销上基本一致,但剪不剪去上边的baseline效果差不少。
使用重参数技巧的SAC
使用重参数化技巧的原因
SAC的actor以state为输入,以和为输出,即根据状态s建立高斯分布,然后随机采样动作,因为是随机采样,导致不能计算梯度和,所以采用重参数化技巧,即先采样一个常数,然后,则a仍然服从分布,且对和可导。
另外,由于式8中期望的是从高斯策略中采样的,如果这个高斯分布很扁平的话,会导致梯度估计值方差很大,不利于学习。
因此,可以借鉴VAE中的Reparameterization Trick来减少方差,使学习更稳定。即: