actor-critic方法(一)— 同策方法
本文介绍带自益的策略梯度算法。这类算法将策略梯度和自益结合了起来:一方面,用一个含参函数近似价值函数,然后利用这个价值函数的近似值来估计回报值;另一方面,利用估计得到的回报值估计策略梯度,进而更新策略参数。这两方面又常常被称为评论者(critic)和执行者(actor)。所以,带自益的策略梯度算法被称为执行者/评论者算法(actorcritic)。
同策actor-critic方法
执行者/评论者算法同样用含参函数 h ( s , a ; θ ) h(s,a;θ) h(s,a;θ)表示偏好,用其softmax运算的结果 π ( a ∣ s ; θ ) π(a|s;θ) π(a∣s;θ)来近似最优策略。在更新参数θ时,执行者/评论者算法依然也是根据策略梯度定理,取 E [ Ψ t ▽ l n π ( A t ∣ S t ; θ ) ] E[Ψ_t▽lnπ(A_t|S_t;θ)] E[Ψt▽lnπ(At∣St;θ)]为梯度方向迭代更新。
在实际使用时,真实的价值函数是不知道的。但是,我们可以去估计这些价值函数。具体而言,我们可以用函数近似的方法,用含参函数 v ( s ; w ) ( s ∈ S ) v(s;w)(s∈\mathcal{S} ) v(s;w)(s∈S)或 q ( s , a ; w ) ( s ∈ S , a ∈ A ( s ) ) q(s,a;w)(s∈\mathcal{S},a∈\mathcal{A} (s)) q(s,a;w)(s∈S,a∈A(s))来近似vπ和qπ。引入自益的思想,用价值的估计 U t U_t Ut来代替 Ψ t Ψ_t Ψt中表示回报的部分。例如,对于时序差分,用估计来代替价值函数可以得到 Ψ t = γ t [ R t + v ( S t + 1 ; w ) − v ( S t ; w ) ] Ψ_t=γ^t[R_t+v(S_{t+1};w)-v(S_t;w)] Ψt=γt[Rt+v(St+1;w)−v(St;w)]。这里的估计值 v ( w ) v(w) v(w)就是评论者,这样的算法就是执行者/评论者算法。
*只有采用了自益的方法,即用价值估计来估计回报,并引入了偏差,才是执行者/评论者算法。用价值估计来做基线并没有带来偏差(因为基线本来就可以任意选择)。所以,带基线的简单策略梯度算法不是执行者/评论者算法。
动作价值actor-critic算法
根据前述分析,同策执行者/评论者算法在更新策略参数θ时也应该试图减小 Ψ t l n π ( A t ∣ S t ; θ ) Ψ_tlnπ(A_t|S_t;θ) Ψtlnπ(At∣St;θ),只是在计算 Ψ t Ψ_t Ψt时采用了基于自益的回报估计。算法一开始初始化了策略参数和价值参数。虽然算法中写的是可以将这个参数初始化为任意值,但是如果它们是神经网络的参数,还是应该按照神经网络的要求来初始化参数。在迭代过程中有个变量 I I I,用来存储策略梯度的表达式中的折扣因子 γ t γ_t γt。在同一回合中,每一步都把这个折扣因子乘上 γ γ γ,所以第t步就是 γ t γ_t γt。
算法1 动作价值同策执行者/评论者算法
输入:环境(无数学描述)。
输出:最优策略的估计π(θ)。
参数:优化器(隐含学习率 α ( w ) , α ( θ ) α(w),α(θ) α(w),α(θ)),折扣因子γ,控制回合数和回合内步数的参数。
1.(初始化)θ←任意值,w←任意值;
2.(带自益的策略更新)对每个回合执行以下操作:
2.1 (初始化累积折扣) I I I←1;
2.2 (决定初始动作)用 π ( ⋅ ∣ S ; θ ) π(·|S;θ) π(⋅∣S;θ)得到动作A;
2.3 如果回合未结束,执行以下操作:
2.3.1 (采样)根据状态S和动作A得到采样R和下一状态S’;
2.3.2 (执行)用 π ( ⋅ ∣ S ′ ; θ ) π(·|S';θ) π(⋅∣S′;θ)得到动作A’;
2.3.3 (估计回报) U ← R + γ q ( S ′ , A ′ ; w ) U←R+γq(S',A';w) U←R+γq(S′,A′;w);
2.3.4 (策略改进)更新 θ θ θ以减小 − I q ( S , A ; w ) l n π ( A ∣ S ; θ ) -Iq(S,A;w)lnπ(A|S;θ) −I