Policy#
1 Lecture 7#
1.1 Policy Learning#
状态 st,观察 ot ,动作 at,奖励 rt,策略 π(at∣st),π(at∣ot)
如果 st=ot ,那么这是一个完全信息的学习问题
通常有两种学习模式:
- 可监督:对于任意状态 st,我们都知道最优动作 at∗,所以可以直接监督学习,最大化 NLL loss L=−∑tlogπ(at∗∣st) (离散情况),这也被称为模仿学习
- 强化学习:对于任意状态 st,我们不知道最优动作 at∗,只能通过试错来学习,最大化 reward L=−∑trt
1.2 模仿学习#
world model:给出世界发展的动力学 p(st+1∣st,at) ,不少 video gen 自称为世界模型,其思想就是给定当前的 text 和当前画面 It,预测下一帧 p(It+1∣It,text)
模仿学习和 image classification 的区别就是:很容易进入预期外的、不理想的状态区域,这一部分并没有学习过,即 out of distribution
如何解决 drift :在 drift 的情况下,模型也要也能找到回到正确路径的方式
Dagger:Dataset Aggregation(借助人类标注)
- train πθ(at∣ot) from human data D=o1,a1,...,oN,aN
- run πθ(at∣ot) to get dataset Dπ=o1,..,om
- Ask human to label Dπ with actions at
- Aggregate: D=D∪Dπ
- goto 1 for loop
对于当前的人形机器人,Dagger 不是直接获得 label,而是人接管;但是维度一高,接管也变得十分困难
其它最优 actions 来源:
- 来自最优策略,比如 3 d 场景下的路径可以从 2 D 路径中获得
- On policy diagram:随着训练的进行,策略会不断更新,数据分布也会不断变化,所以需要不断地从新的策略中采样数据来训练模型
- Off policy diagram:策略更新的时候,数据分布并不发生改变,可能会出现重复修正、训练低效的问题。
- 从 teacher policy 学习,student 提供 ot ,teacher 给出 πT,t,让 student 学习 πt≈πT,t ,通常让 teacher 拥有更多信息
Non-Markovian 问题:运用历史信息不一定会让策略更好,因为很容易会出现过拟合
多峰问题:对于一个问题的答案不一定是 Gaussian 的,而有可能是多峰的,要解决这个问题要么离散化,要么使用类似 diffusion 的 model
2 Lecture 8#
2.1 强化学习#
MDP (Markov Decision Process):M=(S,A,T,r) 其中 S 是状态空间,A 是动作空间,T 是转移概率,r 是奖励函数,且满足 Tijk=P(st+1=i∣st=j,at=k)
如果是 POMDP (Partially Observable MDP),则 agent 只能观察到 ot,而不能直接观察到 st,此时 M=(S,A,T,r,O) 其中 O 是观察函数
强化学习的目标是找到一个 policy π(at∣st) 来最大化 reward 的期望
θ⋆=argθmaxEτ∼pθ(τ)[t=0∑Tr(st,at)]
令 Jθ=Eτ∼pθ(τ)r(τ)=∫pθ(τ)r(τ)dτ,则可以给出梯度的表达式
∇θJθ=∫∇θpθ(τ)r(τ)dτ=∫pθ(τ)∇θlogpθ(τ)r(τ)dτ=Eτ∼pθ(τ)[∇θlogpθ(τ)r(τ)]
又根据 logpθ(τ)=logp(s1)+∑t=1T(logπθ(at∣st)+logp(sT∣aT,sT)),可以得到
∇θJθ=Eτ∼pθ(τ)[t=1∑T∇θlogπθ(at∣st)t=1∑Tr(st,at)]
Monte Carlo 模拟:
Eτ∼pθ(τ)[t∑r(st,at)]≈N1i∑t∑r(si,t,ai,t)
另外,梯度也使用
∇θJ(θ)≈N1i=1∑N(t=1∑T∇θlogπθ(ai,t∣si,t))(t=1∑Tr(si,t,ai,t))
REINFORCE algorithm:
- sample {τi} from πθ(at∣st) (run the policy)
- ∇θJ(θ)≈∑i(∑t∇θlogπθ(ati∣sti))(∑tr(sti,ati))
- θ←θ+α∇θJ(θ)
但是这通常十分昂贵,因为每次采样的数据都不能复用,这也被称为 on policy RL,与之相对的,off policy RL 允许复用一段时间前的数据
on policy 一般只能在 simulator 里面搞,现实数据太昂贵搞不了
[! note] 一个值得注意的分别
这里的梯度长得很像 behavior cloning 那里的 Maximum Likelihood 梯度
∇θJML(θ)≈N1i=1∑N(t=1∑T∇θlogπθ(ai,t∣si,t))
但是这完全是两种东西,因为后者的 at 是 teacher 的,而前者的是自己生成的;所以不能认为 reinforcement learning 是 imitation learning 加权得到的
事实上,如果 at 是由当前策略自己生成的,那么一定有
Eτ∼pθ(τ)[∇θlogπθ(ai,t∣si,t)]=0
但是如果是 behavior cloning 的结果,那么有
∇θJML(θ)=Eτ∼πexpert (τ)[∇θlogπθ(ai,t∣si,t)]=0
2.1.1 高斯策略#
策略服从高斯分布: πθ(at∣st)=N(fneural network (st);Σ)
此时,由于 logπθ(at∣st)=−21∥f(st)−at∥Σ2+ const
于是,梯度可以协作: ∇θlogπθ(at∣st)=−(dθdf)TΣ−1(f(st)−at)
然后再进行 reinforcement 算法
2.1.2 Partial Observability#
直接用 ot 替换 st 即可,也即
∇θJ(θ)≈N1i=1∑N(t=1∑T∇θlogπθ(ai,t∣oi,t))(t=1∑Tr(si,t,ai,t))
2.2 降低方差#
对于强化学习而言,梯度存在很大不确定性,降低方差可以让算法更快地收敛
第一个办法是只保留 reward to go,也即只考虑 t′≥t 的部分
∇θJ(θ)≈N1i=1∑N[t=1∑T∇θlogπθ(ai,t∣si,t)(t′=t∑Tr(si,t′,ai,t′))]
第二个办法是减去一个常数 baseline
∇θJ(θ)≈N1i=1∑N∇θlogpθ(τ)[r(τ)−b]
可以证明,最优的 b 是
b=Eg2(τ)Eg2(τ)r(τ),g(τ)=∇θlogpθ(τ)
但是无法得到,所以通常我们会把 b 取为 b=N1∑i=1Nr(τ),
[! tip]
强化学习算法常常训不出好的 policy,因为 reward 的设计,或者采样太过稀疏,gradient 太 noisy。
Q function 和 Value function
- Qπ(st,at)=∑t′=tTEπθ[r(st′,at′)∣st,at]: total reward from taking at in st
- Vπ(st)=∑t′=tTEπθ[r(st′,at′)∣st]: total reward from st
如果能学到很好的 Q 和 V,那么第三种降低方差的方式是使用
∇θJ(θ)≈N1i=1∑Nt=1∑T∇θlogπθ(ai,t∣si,t)(Q(si,t,ai,t)−V(si,t))
通常我们会定义 Aπ(st,at)=Qπ(st,at)−Vπ(st) 叫做 advantage function,表示在 st 的状态下,at 的动作相比于平均水平的优势程度;于是上式也可以写作
∇θJ(θ)≈N1i=1∑Nt=1∑T∇θlogπθ(ai,t∣si,t)Aπ(si,t,ai,t)
我们通常不直接拟合 Q,A 而是利用
Aπ(st,at)≈r(st,at)+Vπ(st+1)−Vπ(st)
只拟合出 Vπ 就可以了,这也被称为 Actor-Critic 方法
2.2.1 如何拟合 Value Function#
- 传统办法:直接用 Vπ(st)≈N1∑i=1N∑t′=tTr(st′,at′) 来拟合,但是需要 reset,在现实中很难做到
- Monte Carlo 模拟:直接用 Vπ(st)≈∑t′=tTr(st′,at′) 来拟合
- bootstrap:用 Vπ(st)≈r(st,at)+V^ϕπ(st+1) 来拟合,这样就不需要 reset 了,但是会引入 bias,因为用到了自己上一次估计的 Value Function
- 此时的误差 δt=yt−V^ϕ(st) ,其中 yt=r(st,at)+V^ϕπ(st+1) 叫做 TD target,δt 叫做 TD error
2.3 无穷情形#
对于无穷情形,我们需要引入 discount factor γ 来保证 reward 的收敛性,此时
J(θ)=Eτ∼pθ(τ)[t=0∑∞γtr(st,at)]
而且
Aπ(st,at)≈r(st,at)+γVπ(st+1)−Vπ(st)
此时 γ 越接近 1,越看重长远的 reward,但是也会导致 variance 增大;γ 越接近 0,越看重短期的 reward,但是也会导致 bias 增大
2.3.1 Generalized Advantage Estimation (GAE)#
首先,对于折现因子的选择,我们通常是使用
∇θJ(θ)≈N1i=1∑Nt=1∑T∇θlogπθ(ai,t∣si,t)(t′=t∑Tγt′−tr(si,t′,ai,t′))
而非
∇θJ(θ)≈N1i=1∑Nt=1∑T∇θlogπθ(ai,t∣si,t)(t=1∑Tγt−1r(si,t′,ai,t′))
这是因为我们使用折现因子,是想对相对位置进行折现,而不是绝对时间
另外,我们在使用 bootstrap 和 policy gradient 的时候,其实分别是用到
∇θJ(θ)≈N1i=1∑Nt=1∑T∇θlogπθ(ai,t∣si,t)(r(si,t,ai,t)+γV^ϕπ(si,t+1)−V^ϕπ(si,t))
with lower variance but probably bias
和
∇θJ(θ)≈N1i=1∑Nt=1∑T∇θlogπθ(ai,t∣si,t)((t′=t∑Tγt′−tr(si,t′,ai,t′))−b)
with high variance but no bias
所以首先我们就可以改进为
∇θJ(θ)≈N1i=1∑Nt=1∑T∇θlogπθ(ai,t∣si,t)((t′=t∑Tγt′−tr(si,t′,ai,t′))−V^ϕπ(si,t))
其次,我们考虑前两者之间的优缺点,可以通过 N-steps 的方式权衡,即不止考虑一步,而是考虑
Gt(n)=t′=t∑t+n−1γt′−tr(st′,at′)+γnV^ϕπ(st+n)
换言之,我们综合了两种 Advantage
A^Cπ(st,at)A^MCπ(st,at)=r(st,at)+γV^ϕπ(st+1)−V^ϕπ(st)=t′=t∑∞γt′−tr(st′,at′)−V^ϕπ(st)
给出了新的 Advantage
A^nπ(st,at)=t′=t∑t+nγt′−tr(st′,at′)−V^ϕπ(st)+γnV^ϕπ(st+n)
但是这个 n 不一定要人工固定。若 n 过小,估计更依赖价值函数 V^ϕπ,方差较小,但当价值函数估计不准时会引入较大偏差;若 n 过大,估计更接近 Monte Carlo return,偏差较小,但会受到长轨迹采样噪声的影响,方差较大。因此,一个自然的想法是将不同步数的 advantage 进行加权组合,而不是只选择某一个固定的 n。这就得到 GAE:
A^GAEπ(st,at)=n=1∑∞wnA^nπ(st,at)
其中权重通常按指数衰减选取:
wn∝λn−1
这里 λ∈[0,1] 控制对长时间尺度回报的依赖程度。等价地,GAE 可以写成 TD error 的加权
A^GAEπ(st,at)=l=0∑∞(γλ)lδt+l
其中
δt=r(st,at)+γV^ϕπ(st+1)−V^ϕπ(st)
是一步 TD error。这个形式说明,GAE 本质上是在累计当前以及未来若干步的 TD error,但越远的 TD error 权重越小。当 λ=0 时,GAE 退化为一步 TD advantage,方差较低但偏差较大;当 λ 接近 1 时,GAE 更接近 Monte Carlo advantage,偏差较小但方差较大。实际的 on-policy actor-critic 方法,常使用 λ≈0.95,