2 spinup-SAC
随机策略, 连续动作空间, off-policy算法, 但是通过改变策略更新规则适用离散动作空间.
- 随机策略+DDPG方法,
- 使用了TD3相似的double-Q trick; 因为固有的策略随机性, 它也从类似于策略平滑方法中受益.
- 核心是熵正则化(entropy regularization). 策略训练目标是最大化期望奖励和熵的权衡, 即考虑最大化期望奖励的同时保证策略的随机性.
- 这也是一种exploration-exploitation trade-off: 熵增加会增加探索性, 可以加速学习.
- 同时可以防止策略过早收敛到局部最优.
核心公式
1 Entropy-Regularized Reinforcement Learning
熵
衡量随机变量分布的随机性.
H(P)=Ex∼P−logP(x).
熵正则化RL
SAC通过熵正则化训练随机策略, 并以on-policy方式进行探索. 用熵作为正则化项, 策略公式变成:
π∗=argπmaxEτ∼π[t=0∑∞γt(R(st,at,st+1)+αH(π(⋅∣st)))],
其中α为平衡系数, 用来权衡奖励和策略随机性. 这里假设有限MDP问题.
那么, Q值和V值计算公式变成:
Vπ(s)=Qπ(s,a)=Eτ∼π[∑t=0∞γt(R(st,at,st+1)+αH(π(⋅∣st)))∣s0=s],Eτ∼π[∑t=0∞γtR(st,at,st+1)+α∑t=1∞γtH(π(⋅∣st))∣s0=s,a0=a]
由此, Q和V相互表示的公式为
Vπ(s)=Ea∼π[Qπ(s,a)]+αH(π(⋅∣s))
可以得到贝尔曼迭代公式为:
Qπ(s,a)=Es′∼P,a′∼π[R(s,a,s′)+γ(Qπ(s′,a′)+αH(π(⋅∣s′)))]=Es′∼P[R(s,a,s′)+γVπ(s′)].
2 SAC
SAC同时学习策略和两个Q函数, 目前关于熵正则化项有两种变体:
- 使用固定的熵正则化系数
- 通过在训练过程中自适应变化alpha来加强熵约束项
另外SAC也可以选择是否学习V值, 形成不同的版本, 但是核心思想不变.
熵正则化的作用
用熵的定义重写Q迭代公式
Qπ(s,a)=Es′∼P,a′∼π[R(s,a,s′)+γ(Qπ(s′,a′)+αH(π(⋅∣s′)))]=Es′∼P,a′∼π[R(s,a,s′)+γ(Qπ(s′,a′)−αlogπ(a′∣s′))]
公式右边是关于下一个状态(来自replay buffer)和下一个动作(来自于当前策略, 不在buffer中)的期望, 因此可以用样本逼近期望
Qπ(s,a)≈r+γ(Qπ(s′,a~′)−αlogπ(a~′∣s′)),a~′∼π(⋅∣s′).
上边动作加了个波浪线表示, 下一个动作必须从策略中采样更新, 而s'和r从buffer中采样得到.
Q-learning
与TD3相似, 但也有些不同
- 相似
- Q函数使用MSBE训练, 来回归一个共享的target
- 这个共享的target使用target-Q-net计算, 目标网络参数通过polyak averaging得到
- 共享的target使用clipped double-Q trick
- 差别
- SAC 的target包含了熵正则化项
- SAC中, 下一个状态-动作用于当前策略, 而不是目标策略.
- SAC不使用 target policy smoothing. TD3是确定性策略, 需要给next-state actions加入噪声进行探索并进行clip. SAC训练随机策略, 所以随机性满足探索需求.
这里, SAC使用MSBE逼近target, 使用 clipped double-Q trick.
L(ϕi,D)=y(r,s′,d)=E(s,a,r,s′,d)∼D[(Qϕi(s,a)−y(r,s′,d))2],r+γ(1−d)(j=1,2minQϕtarg,j(s′,a~′)−αlogπθ(a~′∣s′)),a~′∼πθ(⋅∣s′).
policy 学习
策略应该在每个状态下, 输出最大化目标(未来回报和期望未来熵的和)的动作. 也就是说需要最大化V,
Vπ(s)=Ea∼πQπ(s,a)+αH(π(⋅∣s))=Ea∼πQπ(s,a)−αlogπ(a∣s).
这里优化策略使用reparameterization trick. 从策略中采样得到的动作表示为 状态, 策略参数, 和一个独立噪声的确定性函数. 即
a~θ(s,ξ)=tanh(μθ(s)+σθ(s)⊙ξ),ξ∼N(0,I).
reparameterization trick下的策略与其他策略优化的区别
1. 扁函数(The squashing function). SAC策略使用tanh函数保证动作有界. VPG或PPO等算法的动作没有这样处理. 这也改变了动作的分布: tanh之前的策略是因式高斯分解(网络输出 mu和sigma 两个参数), 但是经过了tanh之后分布就不是了, 但是仍然可以计算动作的log-Probability.
2. The way standard deviations are parameterized. 在VPG, TRPO,PPO中, 表示 log std devs. 在SAC中, log std devs可以用神经网络的输出来表示, 也就是说它与状态相关. spinnup版本的SCA使用状态无关的log std devs没有用. (原因很明显,观察loss函数,熵的大小与log std devs密切相关,所以必须是神经网络算出来的,不然熵对神经网络就是个常数还放进loss里干嘛)
这样, 通过reparameterization trick重写期望公式. 解决了一个痛点:
Ea∼πθQπθ(s,a)−αlogπθ(a∣s)=Eξ∼NQπθ(s,a~θ(s,ξ))−αlogπθ(a~θ(s,ξ)∣s)
这个方法就解决了其他随机策略的一个问题: 其他随机策略方法是不可以直接对Q求梯度, 而只能对策略pi求梯度.
而SAC可以像DDPG那样直接对Q求梯度.
下面求Q的梯度, 这里与TD3不同, TD3只是用第一个Q函数优化策略, SAC使用两个Q的最小值, 然后使用链式法则计算:
θmaxEs∼D,ξ∼Nj=1,2minQϕj(s,a~θ(s,ξ))−αlogπθ(a~θ(s,ξ)∣s),
与DDPG不同点: the min-double-Q trick, the stochasticity, and the entropy term.
3 探索与利用
SAC通过熵正则化训练随机策略, 并以on-policy方式进行探索.
SAC使用熵正则化项明确控制探索性, α越大探索性越强
在开始时对动作进行均匀采样几个时间步, 之后再使用标准的DDPG算法
伪代码