2 spinup-TRPO
在更新策略过程中最大化性能提升的步长, 并使用KL散度限制新旧策略的分布不要偏离的太远.
与标准PG的区别:
- PG的新旧策略在参数空间距离很近; 但是即使参数空间距离很近, 也不能保证策略或性能离得近.所以PG算法中, 某一步的策略不好, 可能导致整个算法崩溃.
- 同时PG算法样本效率低, 因为它不能使用比较大的步长
- TRPO使用重要性采样避免了性能函数崩溃, 同时倾向于更平滑的性能提升.
综上, TRPO性质:
- on-policy, 随机策略算法
- 适应离散和连续动作空间
- 可以支持并行化
1. 关键公式
TRPO更新公式为
θk+1=argθmaxs.t.L(θk,θ)D¯KL(θ∣∣θk)≤δ
其中 L(θk,θ) 称为surrogate advantage, 衡量新旧策略相对性能.
DKL为平均KL散度.
L(θk,θ)=Es,a∼πθk[πθk(a∣s)πθ(a∣s)Aπθk(s,a)]
- 当新旧策略相同时, 目标函数和约束项都为0
- 当新旧策略相同时, 约束项相对于theta的梯度为0
2 更新
TRPO将目标函数和约束项进行泰勒展开, 然后使用函数近似进行更新:
L(θk,θ)D¯KL(θ∣∣θk)≈gT(θ−θk)≈21(θ−θk)TH(θ−θk)
得到如下近似的带约束优化问题:
θk+1=s.t.argθmaxgT(θ−θk)21(θ−θk)TH(θ−θk)≤δ.
其中g是surrogate advantage函数在θ=θk处的梯度, 等于策略梯度▽θJ(πθ)
3. 解析求解, 使用拉格朗日对偶公式
θk+1=θk+√gTH−1g2δH−1g.
上述公式就是 Natural Policy Gradient的求解公式. 但是问题是:
由于泰勒展开引入的函数逼近误差可能导致上述更新不满足KL约束, 也有可能不满足性能提升的目的
- TRPO使用如下更新规则: a backtracking line search(回溯线性搜索)
θk+1=θk+αj√gTH−1g2δH−1g,
其中, α∈(0,1)是回溯因子, j表示满足KL约束并产生正surrogate advantage的最小的非负整数.
使用神经网络逼近时, 矩阵求逆运算复杂度太高.
- TRPO使用共轭梯度算法( conjugate gradient, CG).
- 通过计算Hx=g 代替计算 x=H−1g, 只用计算一个矩阵-向量的乘积就行, 不用存储整个矩阵H.
Hx=∇θ((∇θD¯KL(θ∣∣θk))Tx),
4 伪代码
TRPO是on-policy, 随机策略算法, 对最新策略抽样得到动作.
动作选择的随机性取决于初始条件和训练过程.
随着训练随机性下降, 可能陷入局部最优