回顾
Actor-critic算法本质上就是policy gradient算法的一种
θt+1=θt+αtπ(at∣st,θt)qπ(st,at)∇θ(π(at∣st,θt))
- 如果 qπ(st,at) 使用MC算法采样估计,则对应 REINFORCE 算法
- 如果 qπ(st,at) 使用TD算法估计,则对应 Actor-critic 算法
QAC

- 使用一个神经网络利用值函数近似 的Sara算法更新qw(s,a), 进行 value upate
- 使用一个神经网络利用策略梯度算法优化策略πθ(a∣s), 进行 policy update
该算法是on-policy的,因为Sara值函数近似时取出的 at+1∼π
Advantage actor-critic(A2C)
优势函数
在策略梯度算法的基础上引入一个baseline
∇J(θ)=ES∼η,A∼π(S,θ)[∇θlnπ(A∣S,θ)qπ(S,A)]=ES∼η,A∼π(S,θ)[∇θlnπ(A∣S,θ)(qπ(S,A)−b(S))]
为什么要引入它?
- 引入后该随机变量的期望不会改变,也就是策略梯度不变
- 考察 ES∼η,A∼π(S,θ)[∇θlnπ(A∣S,θ)b(S))]=0
- 但该随机变量的方差会变化,我们想要构造一个b(s)使得∇θlnπ(A∣S,θ)(qπ(S,A)−b(S))整体的 方差最小 ,这样保证更新时的稳定性,加快模型收敛
下面直接给出最优解:
b∗(s)=EA∼π[∥∇θlnπ(A∣s,θ)∥2]EA∼π[∥∇θlnπ(A∣s,θ)∥2qπ(s,A)],s∈S.
实际使用中,考虑计算和效率均衡,我们采用
b(s)=EA∼π[qπ(s,A)]=vπ(s)
由此我们得到Advantage actor-critic算法:
θt+1=θt+αES∼η,A∼π(S,θ)[∇θlnπ(A∣S,θ)(qπ(S,A)−vπ(S))]=θt+αES∼η,A∼π(S,θ)[∇θlnπ(A∣S,θ)(δπ(S,A)]
- δπ(S,A)=qπ(S,A)−vπ(S) 被称为优势函数(Advantage function),体现每个动作状态价值对于平均动作状态价值的相对值
进一步地
qπ(st,at)−vπ(st)≈rt+1+γvπ(st+1)−vπ(st)

Importance Sampling
由于策略梯度中∇J(θ)=ES∼η,A∼π[∗], 采样出的数据需要服从当前的策略, 因此都是on-policy的
importance sampling 就是一种将on-policy转化为off-policy的算法
假设我们已知两个分布p0,p1
问题简述:
已有的数据x∼p1, p0(x) 和 p1(x) 两个神经网络,如果估计Ex∼x0[x]
有读者会认为,诶,p0(x)不是有吗,我们直接拿所有的x做 ∑xp0(x) 不就行了吗
- 经典错误,这里的数据x是服从p1的, 实际上p1和p0 数据的交集可能很少
- 例如,p1(x) 主要集中在 x∈[0,1] 区间内,而 p0(x) 则主要集中在 x∈[2,3] 区间内。如果你从 p1(x) 中采样数据,这些数据在 [2,3] 区间的概率非常小或几乎为零,因此你无法通过简单地使用 ∑xp0(x) 来计算 Ex∼p0[x],因为你的数据分布并没有覆盖到 p0(x)中的那个重要区间。
正确做法:
Ex∼p0[x]=Ex∼p1[x⋅p1(x)p0(x)]≈n1x=1∑nxip1(xi)p0(xi)
- p1(xi)p0(xi) 被称为重要性权重
假设behavior policy为β, 我们的目标是利用由β 生成的数据最大化以下目标
J(θ)=∑dβvπ(s)
off-policy 策略梯度理论:
∇θJ(θ)=ES∼ρ,A∼π(S,θ)[β(A∣S)π(A∣S,θ)∇θlnπ(A∣S,θ)qπ(S,A)]
off-policy版本
目标函数为
Jθ=Es∼dβ(s)[vπ(s)]
- 有读者会问,不是才讲重要性采样吗,我们的目标为什么不是Es∼dπ(s)[vπ(s)]
- 因为事实上,我们现在要做off-policy,off-policy的定义就是数据s 从另一个策略中获得
- 除此之外,一个直觉是数据中s服从什么分布对策略学习不太重要(因为无论什么分布大概率所有状态都覆盖得到),但(a∣s)从状态中选取的动作对策略学习就很重要了!
那读者可能又要问了,那既然这样,β(A∣S)π(A∣S,θ)又是哪里来的?

- 证明如上,我们要把从β 采样的数据对(s,a) 这个行为写为对应的表达式,S服从的分布通常不重要,重要的是动作A
Deterministic actor-critic
先前的神经网络的输出是每个动作的概率,且因为目标函数中ln的原因导致学习的策略输出概率一定都大于0,因此一定不是确定性的策略
我们将神经网络的输出改为动作是学习一个确定性的策略
u(s,θ)=a
目标函数为
Jθ=s∈S∑du(s)ru(s)=Es∼du(s)[ru(s)]
计算得到其梯度:
∇θJ(θ)=s∈S∑dμ(s)∇θμ(s)(∇aqμ(s,a))a=μ(s)=ES∼dμ[∇θμ(S)(∇aqμ(S,a))a=μ(S)]
- 先对a求导,之后再将a替换为u(s)
θt+1=θt+αES∼du[∇θu(S)(∇aqu(S,a))∣a=u(S)]
θt+1=θt+αt[∇θu(st)(∇aqu(st,a))∣a=u(st)]
天然的off-policy,不需要a服从特定的分布,理论上都可以
进一步可以使用动作状态函数对应的优势函数进行优化值函数估计
