不用重参数化技巧的SAC

不能直接求梯度的原因

SAC算法的目标函数:

(1)Jπ(ϕ)=EstD,atπϕ[logπϕ(at|st)1αQθ(st,at)]

如果按照机器学习通常的做法,就是将期望里的项目(即中括号里的项)对ϕ进行求导,然后对采样的样本取平均值。但这样是不对的,因为采样的过程atπϕ是和参数ϕ相关的,有待优化的参数,因此前面那种方法求的导不等于原始目标函数对ϕ的梯度。

注:策略梯度方法从来都不是直接能拿一个目标函数去自动求梯度,都是先用公式推出一个策略梯度来

使用REINFORCE的方法对策略梯度进行推导

(2)Jπ(ϕ)=EstD[ϕatπϕ(at|st)(logπϕ(at|st)1αQθ(st,at))](3)=EstD[at[ϕπϕ(at|st)(logπϕ(at|st)1αQθ(st,at))+πϕ(at|st)ϕπϕ(at|st)πϕ(at|st)]](4)=EstD[atϕπϕ(at|st)(logπϕ(at|st)1αQθ(st,at)+1)](5)为了利用atπϕ采样,再改写(6)=EstD[atπϕ(at|st)ϕπϕ(at|st)πϕ(at|st)(logπϕ(at|st)1αQθ(st,at)+1)](7)=EstD,atπϕ[logπϕ(at|st)(logπϕ(at|st)1αQθ(st,at)+1)]

上式中的+1可以去掉,因为atϕπϕ(at|st)=ϕatπϕ(at|st)=ϕ1=0

也可以将+1换成其他和a无关的量,不会影响梯度,相当于带baseline的梯度算法,例如:

(8)Jπ(ϕ)=EstD,atπϕ[logπϕ(at|st)(logπϕ(at|st)1αQθ(st,at)1αVθ(st))]

经实验,重参数化和非重参数化的方法从性能和运算开销上基本一致,但剪不剪去上边的baseline效果差不少。

使用重参数技巧的SAC

使用重参数化技巧的原因

SAC的actor以state为输入,以μσ为输出,即根据状态s建立高斯分布,然后随机采样动作aN(μ,σ2),因为是随机采样,导致不能计算梯度a/μa/σ,所以采用重参数化技巧,即先采样一个常数ξN(μ,σ2),然后a=μ+ξσ,则a仍然服从分布N(μ,σ2),且对μσ可导。

另外,由于式8中期望的at是从高斯策略N(μϕ(st),σϕ(st))中采样的,如果这个高斯分布很扁平的话,会导致梯度估计值方差很大,不利于学习。

因此,可以借鉴VAE中的Reparameterization Trick来减少方差,使学习更稳定。即:

(9)at=μϕ(st)+ϵσϕ(st)