ADreamLeft's site

Back

Lecture 7#

1 Policy Learning#

状态 sts_{t},观察 oto_{t} ,动作 ata_{t},奖励 rtr_{t},策略 π(atst),π(atot)\pi(a_{t}|s_{t}),\pi(a_{t}|o_{t}) 如果 st=ots_{t}=o_{t} ,那么这是一个完全信息的学习问题

通常有两种学习模式:

  • 可监督:对于任意状态 sts_{t},我们都知道最优动作 ata_{t}^{*},所以可以直接监督学习,最大化 NLL loss L=tlogπ(atst)\mathcal{L}=-\sum_{t}\log \pi(a_{t}^{*}|s_{t}) (离散情况),这也被称为模仿学习
  • 强化学习:对于任意状态 sts_{t},我们不知道最优动作 ata_{t}^{*},只能通过试错来学习,最大化 reward L=trt\mathcal{L}=-\sum_{t}r_{t}

2 模仿学习#

world model:给出世界发展的动力学 p(st+1st,at)p(s_{t+1}|s_{t},a_{t}) ,不少 video gen 自称为世界模型,其思想就是给定当前的 text 和当前画面 ItI_{t},预测下一帧 p(It+1It,text)p(I_{t+1}|I_{t},text) 模仿学习和 image classification 的区别就是:很容易进入预期外的、不理想的状态区域,这一部分并没有学习过,即 out of distribution 如何解决 drift :在 drift 的情况下,模型也要也能找到回到正确路径的方式

Dagger:Dataset Aggregation(借助人类标注)

  1. train πθ(atot)\pi_{\theta}(a_{t}|o_{t}) from human data D=o1,a1,...,oN,aND = {o_{1}, a_{1},..., o_{N}, a_{N}}
  2. run πθ(atot)\pi_{\theta}(a_{t}|o_{t}) to get dataset Dπ=o1,..,omD_{\pi} = {o_{1},.., o_{m}}
  3. Ask human to label DπD_{\pi} with actions ata_{t}
  4. Aggregate: D=DDπD=D \cup D_{\pi}
  5. goto 1 for loop

对于当前的人形机器人,Dagger 不是直接获得 label,而是人接管,即 HG-DAgger,当策略出错的时候,人纠正,并且记录下这个状态和动作,之后再用这些数据来训练模型。这样可以提高数据效率。

其它最优 actions 来源:

  1. 来自最优策略,比如 3d 场景下的路径可以从 2 D 路径中获得
    1. On policy diagram:随着训练的进行,策略会不断更新,数据分布也会不断变化,所以需要不断地从新的策略中采样数据来训练模型
    2. Off policy diagram:策略更新的时候,数据分布并不发生改变,可能会出现重复修正、训练低效的问题。
  2. 从 teacher policy 学习,student 提供 oto_{t} ,teacher 给出 πT,t\pi_{T,t},让 student 学习 πtπT,t\pi_{t}\approx\pi_{T,t} ,通常让 teacher 拥有更多信息

Non-Markovian 问题:运用历史信息不一定会让策略更好,因为很容易会出现过拟合 对专家拟合失败的原因

  • 多峰问题:对于一个问题的答案不一定是 Gaussian 的,而有可能是多峰的,要解决这个问题要么离散化,要么使用类似 diffusion 的 model,或者加入隐变量

Lecture 8#

1 强化学习#

MDP (Markov Decision Process):M=(S,A,T,r)\mathcal{M}=(S,A,\mathcal{T},r) 其中 SS 是状态空间,AA 是动作空间,T\mathcal{T} 是转移概率,rr 是奖励函数,且满足 Tijk=P(st+1=ist=j,at=k)\mathcal{T}_{ijk}=P(s_{t+1}=i|s_{t}=j,a_{t=k}) 如果是 POMDP (Partially Observable MDP),则 agent 只能观察到 oto_{t},而不能直接观察到 sts_{t},此时 M=(S,A,T,r,O)\mathcal{M}=(S,A,\mathcal{T},r,O) 其中 OO 是观察函数

强化学习的目标是找到一个 policy π(atst)\pi(a_{t}|s_{t}) 来最大化 reward 的期望

θ=argmaxθEτpθ(τ)[t=0Tr(st,at)]=argmaxθi=1TE(st,at)pθ(st,at)[r(st,at)]\begin{align} \theta^{\star} & = \arg\max_{\theta} \mathbb{E}_{\tau\sim p_{\theta}(\tau)}\left[\sum_{t=0}^{T}r(s_{t},a_{t})\right] \\ & = \arg\max_{\theta} \sum_{i=1}^{T}\mathbb{E}_{(s_{t},a_{t})\sim p_{\theta}(s_{t},a_{t})}\left[r(s_{t},a_{t})\right] \end{align}

2 策略梯度#

Jθ=Eτpθ(τ)r(τ)=pθ(τ)r(τ)dτJ_{\theta}=\mathbb{E}_{\tau \sim p_{\theta}(\tau)}r(\tau)=\int p_{\theta}(\tau)r(\tau)\mathrm{d}\tau,则可以给出梯度的表达式

θJθ=θpθ(τ)r(τ)dτ=pθ(τ)θlogpθ(τ)r(τ)dτ=Eτpθ(τ)[θlogpθ(τ)r(τ)]\nabla_{\theta} J_{\theta} = \int \nabla_{\theta} p_{\theta}(\tau) r(\tau) \mathrm{d}\tau = \int p_{\theta}(\tau) \nabla_{\theta} \log p_{\theta}(\tau) r(\tau) \mathrm{d}\tau = \mathbb{E}_{\tau \sim p_{\theta}(\tau)}\left[\nabla_{\theta} \log p_{\theta}(\tau) r(\tau)\right]

又根据 logpθ(τ)=logp(s1)+t=1T(logπθ(atst)+logp(sTaT,sT))\log p_{\theta}(\tau)=\log p (s_1) + \sum_{t=1}^{T}\left(\log \pi_{\theta}(a_{t}|s_{t}) + \log p(s_{T}|a_{T},s_{T})\right),可以得到

θJθ=Eτpθ(τ)[t=1Tθlogπθ(atst)t=1Tr(st,at)]\nabla _{\theta} J_{\theta} = \mathbb{E}_{\tau \sim p_{\theta}(\tau)}\left[\sum_{t=1}^{T} \nabla_{\theta} \log \pi_{\theta}(a_{t}|s_{t}) \sum_{t=1}^{T}r(s_{t},a_{t})\right]

Monte Carlo 模拟:

Eτpθ(τ)[tr(st,at)]1Nitr(si,t,ai,t)E_{\tau\sim p_{\theta}(\tau)}\left[\sum_{t}r(\mathbf{s}_{t},\mathbf{a}_{t})\right]\approx\frac{1}{N}\sum_{i}\sum_{t}r(\mathbf{s}_{i,t},\mathbf{a}_{i,t})

另外,梯度也使用

θJ(θ)1Ni=1N(t=1Tθlogπθ(ai,tsi,t))(t=1Tr(si,t,ai,t))\nabla_{\theta} J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N} \left( \sum_{t=1}^{T} \nabla_{\theta} \log \pi_{\theta}(\mathbf{a}_{i,t} | \mathbf{s}_{i,t}) \right) \left( \sum_{t=1}^{T} r(\mathbf{s}_{i,t}, \mathbf{a}_{i,t}) \right)

REINFORCE algorithm:

  1. sample {τi}\{\tau^{i}\} from πθ(atst)\pi_{\theta}\left(\mathbf{a}_{t} \mid \mathbf{s}_{t}\right) (run the policy)
  2. θJ(θ)i(tθlogπθ(atisti))(tr(sti,ati))\nabla_{\theta} J(\theta) \approx \sum_{i}\left(\sum_{t} \nabla_{\theta} \log \pi_{\theta}\left(\mathbf{a}_{t}^{i} \mid \mathbf{s}_{t}^{i}\right)\right)\left(\sum_{t} r\left(\mathbf{s}_{t}^{i}, \mathbf{a}_{t}^{i}\right)\right)
  3. θθ+αθJ(θ)\theta \leftarrow \theta + \alpha \nabla_{\theta} J(\theta)

但是这通常十分昂贵,因为每次采样的数据都不能复用,这也被称为 on policy RL,与之相对的,off policy RL 允许复用一段时间前的数据 on policy 一般只能在 simulator 里面搞,现实数据太昂贵搞不了

[!note] 一个值得注意的区分 这里的梯度长得很像 behavior cloning 那里的 Maximum Likelihood 梯度

θJML(θ)1Ni=1N(t=1Tθlogπθ(ai,tsi,t))\nabla_{\theta} J_{ML}(\theta) \approx \frac{1}{N} \sum_{i=1}^{N} \left( \sum_{t=1}^{T} \nabla_{\theta} \log \pi_{\theta}(\mathbf{a}_{i,t} | \mathbf{s}_{i,t}) \right)

但是这完全是两种东西,因为后者的 ata_{t} 是 teacher 的,而前者的是自己生成的;所以不能认为 reinforcement learning 是 imitation learning 加权得到的

事实上,如果 ata_{t} 是由当前策略自己生成的,那么一定有

Eτpθ(τ)[θlogπθ(ai,tsi,t)]=0E_{\tau \sim p_{\theta}(\tau)}\left[\nabla_{\theta} \log \pi_{\theta}\left(\mathbf{a}_{i, t} \mid \mathbf{s}_{i, t}\right)\right]=0

但是如果是 behavior cloning 的结果,那么有

θJML(θ)=Eτπexpert (τ)[θlogπθ(ai,tsi,t)]0\nabla_{\theta} J_{\mathrm{ML}}(\theta)=\mathbb{E}_{\tau \sim \pi_{\text {expert }}(\tau)}\left[\nabla_{\theta} \log \pi_{\theta}\left(a_{i, t} \mid s_{i, t}\right)\right] \neq 0

2.1 高斯策略#

策略服从高斯分布: πθ(atst)=N(fneural network (st);Σ)\pi_{\theta}\left(\mathbf{a}_{t} \mid \mathbf{s}_{t}\right)=\mathcal{N}\left(f_{\text {neural network }}\left(\mathbf{s}_{t}\right) ; \Sigma\right) 此时,由于 logπθ(atst)=12f(st)atΣ2+ const \log \pi_{\theta}\left(\mathbf{a}_{t} \mid \mathbf{s}_{t}\right)=-\frac{1}{2}\left\|\boldsymbol{f}\left(\mathbf{s}_{t}\right)-\mathbf{a}_{t}\right\|_{\Sigma}^{2}+\text { const } 于是,梯度可以协作: θlogπθ(atst)=(dfdθ)TΣ1(f(st)at)\nabla_{\theta} \log \pi_{\theta}\left(a_{t} \mid s_{t}\right)=-\left(\frac{d f}{d \theta}\right)^{T} \Sigma^{-1}\left(f\left(s_{t}\right)-a_{t}\right) 然后再进行 reinforcement 算法

2.2 Partial Observability#

直接用 oto_{t} 替换 sts_{t} 即可,也即

θJ(θ)1Ni=1N(t=1Tθlogπθ(ai,toi,t))(t=1Tr(si,t,ai,t))\nabla_{\theta} J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N}\left(\sum_{t=1}^{T} \nabla_{\theta} \log \pi_{\theta}\left(\mathbf{a}_{i, t} \mid \mathbf{o}_{i, t}\right)\right)\left(\sum_{t=1}^{T} r\left(\mathbf{s}_{i, t}, \mathbf{a}_{i, t}\right)\right)

3 降低方差#

对于强化学习而言,梯度存在很大不确定性,降低方差可以让算法更快地收敛 第一个办法是只保留 reward to go,也即只考虑 ttt'\geq t 的部分

θJ(θ)1Ni=1N[t=1Tθlogπθ(ai,tsi,t)(t=tTr(si,t,ai,t))]\nabla_{\theta} J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N}\left[\sum_{t=1}^{T} \nabla_{\theta} \log \pi_{\theta}\left(\mathbf{a}_{i, t} \mid \mathbf{s}_{i, t}\right)\left(\sum_{t'=t}^{T} r\left(\mathbf{s}_{i, t'}, \mathbf{a}_{i, t'}\right)\right)\right]

第二个办法是减去一个常数 baseline

θJ(θ)1Ni=1Nθlogpθ(τ)[r(τ)b]\nabla_{\theta} J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N} \nabla_{\theta} \log p_{\theta}(\tau)[r(\tau)-b]

可以证明,最优的 bb

b=Eg2(τ)r(τ)Eg2(τ),g(τ)=θlogpθ(τ)b = \dfrac{\mathbb{E}g^{2}(\tau)r(\tau)}{\mathbb{E}g^{2}(\tau)} ,\quad g(\tau) = \nabla_{\theta} \log p_{\theta}(\tau)

但是无法得到,所以通常我们会把 bb 取为 b=1Ni=1Nr(τ)b=\frac{1}{N} \sum_{i=1}^{N} r(\tau)

[!tip] 强化学习算法常常训不出好的 policy,因为 reward 的设计,或者采样太过稀疏,gradient 太 noisy。

4 On-Policy Actor Critic Algorithm#

Q function 和 Value function

  • Qπ(st,at)=t=tTEπθ[r(st,at)st,at]:Q^{\pi}\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)=\sum_{t^{\prime}=t}^{T} E_{\pi_{\theta}}\left[r\left(\mathbf{s}_{t^{\prime}}, \mathbf{a}_{t^{\prime}}\right) \mid \mathbf{s}_{t}, \mathbf{a}_{t}\right]: total reward from taking at\mathbf{a}_{t} in st\mathbf{s}_{t}
  • Vπ(st)=t=tTEπθ[r(st,at)st]:V^{\pi}\left(\mathbf{s}_{t}\right)=\sum_{t^{\prime}=t}^{T} E_{\pi_{\theta}}\left[r\left(\mathbf{s}_{t^{\prime}}, \mathbf{a}_{t^{\prime}}\right) \mid \mathbf{s}_{t}\right]: total reward from st\mathbf{s}_{t}

如果能学到很好的 Q 和 V,那么第三种降低方差的方式是使用

θJ(θ)1Ni=1Nt=1Tθlogπθ(ai,tsi,t)(Q(si,t,ai,t)V(si,t))\nabla_{\theta} J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N} \sum_{t=1}^{T} \nabla_{\theta} \log \pi_{\theta}\left(\mathbf{a}_{i, t} \mid \mathbf{s}_{i, t}\right)\left(Q\left(\mathbf{s}_{i, t}, \mathbf{a}_{i, t}\right)-V\left(\mathbf{s}_{i, t}\right)\right)

通常我们会定义 Aπ(st,at)=Qπ(st,at)Vπ(st)A^{\pi}\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)=Q^{\pi}\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)-V^{\pi}\left(\mathbf{s}_{t}\right) 叫做 advantage function,表示在 st\mathbf{s}_{t} 的状态下,at\mathbf{a}_{t} 的动作相比于平均水平的优势程度;于是上式也可以写作

θJ(θ)1Ni=1Nt=1Tθlogπθ(ai,tsi,t)Aπ(si,t,ai,t)\nabla_{\theta} J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N} \sum_{t=1}^{T} \nabla_{\theta} \log \pi_{\theta}\left(\mathbf{a}_{i, t} \mid \mathbf{s}_{i, t}\right) A^{\pi}\left(\mathbf{s}_{i, t}, \mathbf{a}_{i, t}\right)

我们通常不直接拟合 Q,AQ,A 而是利用

Aπ(st,at)r(st,at)+Vπ(st+1)Vπ(st)A^{\pi}\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right) \approx r\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)+V^{\pi}\left(\mathbf{s}_{t+1}\right)-V^{\pi}\left(\mathbf{s}_{t}\right)

只拟合出 VπV^{\pi} 就可以了,这也被称为 Actor-Critic 方法

4.1 如何拟合 Value Function#

  • 传统办法:直接用 Vπ(st)1Ni=1Nt=tTr(st,at)V^{\pi}\left(\mathbf{s}_{t}\right) \approx\frac{ 1}{N}\sum_{i=1}^{N}\sum_{t'=t}^{T} r\left(\mathbf{s}_{t'}, \mathbf{a}_{t'}\right) 来拟合,但是需要 reset,在现实中很难做到
  • Monte Carlo 模拟:直接用 Vπ(st)t=tTr(st,at)V^{\pi}\left(\mathbf{s}_{t}\right) \approx \sum_{t'=t}^{T} r\left(\mathbf{s}_{t'}, \mathbf{a}_{t'}\right) 来拟合
  • bootstrap:用 Vπ(st)r(st,at)+V^ϕπ(st+1)V^{\pi}\left(\mathbf{s}_{t}\right) \approx r\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)+\hat{V}^{\pi}_{\phi}\left(\mathbf{s}_{t+1}\right) 来拟合,这样就不需要 reset 了,但是会引入 bias,因为用到了自己上一次估计的 Value Function
    • 此时的误差 δt=ytV^ϕ(st)\delta_{t}=y_{t}-\hat{V}_{\phi}(s_{t}) ,其中 yt=r(st,at)+V^ϕπ(st+1)y_{t}=r\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)+\hat{V}^{\pi}_{\phi}\left(\mathbf{s}_{t+1}\right) 叫做 TD target,δt\delta_{t} 叫做 TD error

5 无穷情形(折现因子)#

对于无穷情形,我们需要引入 discount factor γ\gamma 来保证 reward 的收敛性,此时

J(θ)=Eτpθ(τ)[t=0γtr(st,at)]J(\theta) = \mathbb{E}_{\tau \sim p_{\theta}(\tau)}\left[\sum_{t=0}^{\infty} \gamma^{t} r(s_{t}, a_{t})\right]

而且

Aπ(st,at)r(st,at)+γVπ(st+1)Vπ(st)A^{\pi}\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right) \approx r\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)+\gamma V^{\pi}\left(\mathbf{s}_{t+1}\right)-V^{\pi}\left(\mathbf{s}_{t}\right)

此时 γ\gamma 越接近 11,越看重长远的 reward,但是也会导致 variance 增大;γ\gamma 越接近 00,越看重短期的 reward,但是也会导致 bias 增大

5.1 Generalized Advantage Estimation (GAE)#

首先,对于折现因子的选择,我们通常是使用

θJ(θ)1Ni=1Nt=1Tθlogπθ(ai,tsi,t)(t=tTγttr(si,t,ai,t))\nabla_{\theta} J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N} \sum_{t=1}^{T} \nabla_{\theta} \log \pi_{\theta}\left(\mathbf{a}_{i, t} \mid \mathbf{s}_{i, t}\right)\left(\sum_{t^{\prime}=t}^{T} \gamma^{t^{\prime}-t} r\left(\mathbf{s}_{i, t^{\prime}}, \mathbf{a}_{i, t^{\prime}}\right)\right)

而非

θJ(θ)1Ni=1Nt=1Tθlogπθ(ai,tsi,t)(t=1Tγt1r(si,t,ai,t))\nabla_{\theta} J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N} \sum_{t=1}^{T} \nabla_{\theta} \log \pi_{\theta}\left(\mathbf{a}_{i, t} \mid \mathbf{s}_{i, t}\right)\left(\sum_{t=1}^{T} \gamma^{t-1} r\left(\mathbf{s}_{i, t^{\prime}}, \mathbf{a}_{i, t^{\prime}}\right)\right)

这是因为我们使用折现因子,是想对相对位置进行折现,而不是绝对时间

另外,我们在使用 bootstrap 和 policy gradient 的时候,其实分别是用到

θJ(θ)1Ni=1Nt=1Tθlogπθ(ai,tsi,t)(r(si,t,ai,t)+γV^ϕπ(si,t+1)V^ϕπ(si,t))\nabla_{\theta} J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N} \sum_{t=1}^{T} \nabla_{\theta} \log \pi_{\theta}\left(\mathbf{a}_{i, t} \mid \mathbf{s}_{i, t}\right)\left(r\left(\mathbf{s}_{i, t}, \mathbf{a}_{i, t}\right)+\gamma \hat{V}_{\phi}^{\pi}\left(\mathbf{s}_{i, t+1}\right)-\hat{V}_{\phi}^{\pi}\left(\mathbf{s}_{i, t}\right)\right)

with lower variance but probably bias 和

θJ(θ)1Ni=1Nt=1Tθlogπθ(ai,tsi,t)((t=tTγttr(si,t,ai,t))b)\nabla_{\theta} J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N} \sum_{t=1}^{T} \nabla_{\theta} \log \pi_{\theta}\left(\mathbf{a}_{i, t} \mid \mathbf{s}_{i, t}\right)\left(\left(\sum_{t^{\prime}=t}^{T} \gamma^{t^{\prime}-t} r\left(\mathbf{s}_{i, t^{\prime}}, \mathbf{a}_{i, t^{\prime}}\right)\right)-b\right)

with high variance but no bias 所以首先我们就可以改进为

θJ(θ)1Ni=1Nt=1Tθlogπθ(ai,tsi,t)((t=tTγttr(si,t,ai,t))V^ϕπ(si,t))\nabla_{\theta} J(\theta) \approx \frac{1}{N} \sum_{i=1}^{N} \sum_{t=1}^{T} \nabla_{\theta} \log \pi_{\theta}\left(\mathbf{a}_{i, t} \mid \mathbf{s}_{i, t}\right)\left(\left(\sum_{t^{\prime}=t}^{T} \gamma^{t^{\prime}-t} r\left(\mathbf{s}_{i, t^{\prime}}, \mathbf{a}_{i, t^{\prime}}\right)\right)-\hat{V}_{\phi}^{\pi}\left(\mathbf{s}_{i, t}\right)\right)

其次,我们考虑前两者之间的优缺点,可以通过 N-steps 的方式权衡,即不止考虑一步,而是考虑

Gt(n)=t=tt+n1γttr(st,at)+γnV^ϕπ(st+n)G_t^{(n)}= \sum_{t'=t}^{t+n-1} \gamma^{t'-t} r(s_{t'},a_{t'})+ \gamma^n \hat V_\phi^\pi(s_{t+n})

换言之,我们综合了两种 Advantage

A^Cπ(st,at)=r(st,at)+γV^ϕπ(st+1)V^ϕπ(st)A^MCπ(st,at)=t=tγttr(st,at)V^ϕπ(st)\begin{aligned} \hat{A}_{C}^{\pi}\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right) & =r\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)+\gamma \hat{V}_{\phi}^{\pi}\left(\mathbf{s}_{t+1}\right)-\hat{V}_{\phi}^{\pi}\left(\mathbf{s}_{t}\right) \\ \hat{A}_{\mathrm{MC}}^{\pi}\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right) & =\sum_{t^{\prime}=t}^{\infty} \gamma^{t^{\prime}-t} r\left(\mathbf{s}_{t^{\prime}}, \mathbf{a}_{t^{\prime}}\right)-\hat{V}_{\phi}^{\pi}\left(\mathbf{s}_{t}\right) \end{aligned}

给出了新的 Advantage

A^nπ(st,at)=t=tt+nγttr(st,at)V^ϕπ(st)+γnV^ϕπ(st+n)\hat{A}_{n}^{\pi}\left(\mathbf{s}_{t}, \mathbf{a}_{t}\right)=\sum_{t^{\prime}=t}^{t+n} \gamma^{t^{\prime}-t} r\left(\mathbf{s}_{t^{\prime}}, \mathbf{a}_{t^{\prime}}\right)-\hat{V}_{\phi}^{\pi}\left(\mathbf{s}_{t}\right)+\gamma^{n} \hat{V}_{\phi}^{\pi}\left(\mathbf{s}_{t+n}\right)

但是这个 nn 不一定要人工固定。若 nn 过小,估计更依赖价值函数 V^ϕπ\hat V_\phi^\pi,方差较小,但当价值函数估计不准时会引入较大偏差;若 nn 过大,估计更接近 Monte Carlo return,偏差较小,但会受到长轨迹采样噪声的影响,方差较大。因此,一个自然的想法是将不同步数的 advantage 进行加权组合,而不是只选择某一个固定的 nn。这就得到 GAE:

A^GAEπ(st,at)=n=1wnA^nπ(st,at)\hat A_{\mathrm{GAE}}^\pi(s_t,a_t) = \sum_{n=1}^{\infty} w_n \hat A_n^\pi(s_t,a_t)

其中权重通常按指数衰减选取:

wnλn1w_n \propto \lambda^{n-1}

这里 λ[0,1]\lambda\in[0,1] 控制对长时间尺度回报的依赖程度。等价地,GAE 可以写成 TD error 的加权

A^GAEπ(st,at)=l=0(γλ)lδt+l\hat A_{\mathrm{GAE}}^\pi(s_t,a_t) = \sum_{l=0}^{\infty} (\gamma\lambda)^l \delta_{t+l}

其中

δt=r(st,at)+γV^ϕπ(st+1)V^ϕπ(st)\delta_t = r(s_t,a_t) + \gamma \hat V_\phi^\pi(s_{t+1}) - \hat V_\phi^\pi(s_t)

是一步 TD error。这个形式说明,GAE 本质上是在累计当前以及未来若干步的 TD error,但越远的 TD error 权重越小。当 λ=0\lambda=0 时,GAE 退化为一步 TD advantage,方差较低但偏差较大;当 λ\lambda 接近 11 时,GAE 更接近 Monte Carlo advantage,偏差较小但方差较大。实际的 on-policy actor-critic 方法,常使用 λ0.95\lambda\approx 0.95

Lecture 9#

1 policy 的简单修正#

policy 部分的两个核心问题

  • gradient 很 noisy,variance 很大
    • 一旦维度高了,batch 就得大一点来降低 noisy
  • on policy 是一个 data sample efficiency 很低的方法
    • 所有 data 用一次就废
    • 所以要 reuse data:off policy RL,将 data 存在 buffer 里面

在 AC 里面用 off policy 的数据的潜在问题

  1. target 不对:yi=ri+γV^ϕπ(si)y_{i}=r_{i}+\gamma \hat{V}_{\phi}^{\pi}(s_{i}') 用的是旧策略 μ\mu sample 出来的 aa ,并影响了 ss',这时的 r(s,a)r(s,a) 不对,Vϕπ(s)V_{\phi}^{\pi}(s') 也不对
  2. 梯度不对:logπθ(aisi)\log \pi_{\theta}(a_{i}|s_{i}) 里用到的 πθ\pi_{\theta} 不对

对于第一个问题:我们需要放弃价值函数,因为这时候的 ss' 无法再改变,转而使用 QQ ,然后我们使用

yi=ri+γQ^ϕπ(si,ai)y_{i}= r_i + \gamma \hat{Q}_{\phi}^{\pi}(s'_i, a'_i)

相应地,loss 改为 L(ϕ)=1NiQ^ϕπ(si,ai)yi2\mathcal{L}(\phi) = \frac{1}{N} \sum_{i} \left\| \hat{Q}_{\phi}^{\pi}(s_i, a_i) - y_i \right\|^2

对于第二个问题,首先,由于第一个问题的解决方案,我们不再能估计 VπV^{\pi} ,所以就不能使用 AπA^{\pi} 。然后还有一个问题未解决,就是 sis_{i} 采样的概率其实发生了改变,但是我们暂且不管他,先解决另一个问题,就是这里的 aia_{i} 也是旧策略采样的,现在我们需要重新采样

θJ(θ)1Niθlogπθ(aiπsi)Q^ϕπ(si,aiπ)\nabla_{\theta} J(\theta) \approx \frac{1}{N} \sum_{i} \nabla_{\theta} \log \pi_{\theta}(\mathbf{a}_i^{\pi} | \mathbf{s}_i) \hat{Q}_{\phi}^{\pi}(\mathbf{s}_i, \mathbf{a}_i^{\pi})

最后结果是

2 TRPO 和 PPO#

PPO 的想法,既然要提升数据 efficiency,那么是否可以简单的数据复用,同一批数据复用 KK 次。但是出于策略更新的的考量,不能直接这么搞。我们需要重要性采样

Exp(x)[f(x)]=Exq(x)[p(x)q(x)f(x)]\mathbb{E}_{x\sim p(x)}[f(x)] = \mathbb{E}_{x\sim q(x)}[ \dfrac{p(x)}{q(x)}f(x)]

理论上来说,重要性采样的乘子应该是

pθ(τ)pθ(τ)=t=1Tπθ(atst)t=1Tπθ(atst)\frac{p_{\theta'}(\tau)}{p_{\theta}(\tau)} = \frac{\prod_{t=1}^{T} \pi_{\theta'}(\mathbf{a}_t | \mathbf{s}_t)}{\prod_{t=1}^{T} \pi_{\theta}(\mathbf{a}_t | \mathbf{s}_t)}

但是为了简化,我们做了两件事,第一对于未来奖励,我们考虑 rr 不做重要性采样,这样 reward to go 是可以复用的;另外,由于 pθ(τ)pθ(τ)\frac{p_{\theta'}(\tau)}{p_{\theta}(\tau)} 连乘太多了,所以我们选择用最后一项 πθ(atst)πθ(atst)\frac{ \pi_{\theta'}(\mathbf{a}_t | \mathbf{s}_t)}{ \pi_{\theta}(\mathbf{a}_t | \mathbf{s}_t)} 来近似。

接下来的问题是,只要这个新策略和旧策略差的比较多,就很容易训崩,未来减小差距,我们的想法是减小 KK ,但是这就和我们原来的思想矛盾,所以有人是采用的。 TRPO 把这个变为了一个优化问题,但是太复杂了,不是很多人用。

另一种思路是 PPO,直接控制重要性部分 PPO-Clip:Clip 后保证

πθ(atst)πθ(atst)1ϵ\lvert \frac{ \pi_{\theta'}(\mathbf{a}_t | \mathbf{s}_t)}{ \pi_{\theta}(\mathbf{a}_t | \mathbf{s}_t)}-1 \rvert \le \epsilon

PPO-penalty:加上惩罚 LKLPEN(θ)=E^t[πθ(atst)πθold(atst)A^tβKL[πθold(st),πθ(st)]]L_{KL\text{PEN}}(\theta) = \hat{\mathbb{E}}_t \left[ \frac{\pi_{\theta}(a_t | s_t)}{\pi_{\theta_{\text{old}}}(a_t | s_t)} \hat{A}_t - \beta \text{KL} \left[ \pi_{\theta_{\text{old}}}(\cdot | s_t), \pi_{\theta}(\cdot | s_t) \right] \right] Compute d=E^t[KL[πθold(st),πθ(st)]]d = \hat{\mathbb{E}}_t [\text{KL}[\pi_{\theta_{\text{old}}}(\cdot | s_t), \pi_{\theta}(\cdot | s_t)]],记得 β\beta 要动态确认

  • If d<dtarg/1.5d < d_{\text{targ}} / 1.5, ββ/2\beta \leftarrow \beta / 2
  • If d>dtarg×1.5d > d_{\text{targ}} \times 1.5, ββ×2\beta \leftarrow \beta \times 2

看起来,在具身的任务中,clip 是最优秀的,

其他注意点,初始化和激活:

  • 正交初始化:高斯采样初始化矩阵,然后 SVD 得到正交的初始化矩阵
  • 使用 Tanh 激活函数

PPO 的经验:首先调好奖励,然后网格搜索参数。PPO 已经是 off policy 领域,最“on policy” 的办法了,虽然很难训,但是已经是最好用的了。 本课程没有提到 Q-learning,和 PPO 的核心区别是,Q-learning 更倾向于学习价值表,一旦动作、状态空间太大了,那么效果不佳;但是 PPO 学习的是策略,会更 robust 一点。Q-learning 的好处在于数据效率高。

Lecture 10#

1 Diffusion Model#

why diffusion?因为无论是估计策略还是估计价值函数,一般都是假设策略满足高斯分布,这天然的是带有单峰分布的假设的,但是真实任务常出现多峰分布。

  • mixture of gaussian:但是到底多少个多峰分布很难确定,很少用
  • 离散化: RT-2,OpenVLA,但是牺牲了精度,而且无法利用到相邻点之间的相关信息

GAN:现在已经很少用了,他只有对规则分布(如人脸)用的比较好用 Diffusion:现在大家基本用 Diffusion-Based 的算法,甚至是其简化 Flow-matching

2 Flow Matching#

先介绍 Flow Matching 模型

基础假设:zpnoise,xpdata,tU[0,1]z \sim p_{\text{noise}} , x \sim p_{\text{data}} , t \sim U[0, 1] (对于不同 step,z 都是同一个) 考虑:xt=(1t)x+tzx_t = (1 - t)x + tz 尝试预测:v=zxv = z - x 损失函数为:L=fθ(xt,t)v22L = ||f_\theta(x_t, t) - v||_2^2

重建的过程反过来,进行积分,整个过程没有随机性,而且没有条件约束,x,zx,z 也必须在同一个维度的空间里。就像空间中有流速场一样,流线建立了 xxzz 之间的一一映射。 Flow Matching 是结果导向,flow 模型需要显式写出概率模型,但是很难处理。

conditional flow matching

  • 在训练的时候,对不同的类别,采用不同的 sample 方式,model 加一个参数 v=model(xt,y,t)v= model(x_{t},y,t),一般 yy 为 one hot 向量。
  • 如果希望同时学习 unconditional 的模型,可以单独取一个 yy 为 everything,即 [0,0,,0][0,0,\cdots,0]
    • 然后利用 v=vϕ+w(vyvϕ)v = v_{\phi} + w(v_{y}- v_{\phi})
  • noise schedule:sample 的时候中间步骤的东西比较难学,所以训练时经常会使用 sigmoid 采样,保证中间步骤学到概率更大;当使用时,仍然维持均匀的采样
    • 对于高清晰度的图像修复,噪声阶段会更嘈杂,为了能够在早期学习更充分,往往会采用 log normal 的 schedule

Diffusion 相比 flow matching 的区别:插值不再采用线性插值,而是使用和 tt 相关的参数;而且每一期的噪声都是新随机采样的

一般对于 diffusion model,我们会选择:

xt=αˉtx+1αˉtzx_{t}=\sqrt{\bar{\alpha}_{t}}x+\sqrt{1-\bar{\alpha}_{t}}z

此时可以近似写成随机微分方程

dx=f(x,t)dt+g(t)dwdx = f(x, t)dt + g(t)dw

另外, c,dc,d 的选择取决于你到底预测的是什么

  • x-prediction: ygt=x[c(t)=1;d(t)=0]y_{gt} = x \quad [c(t) = 1; d(t) = 0]
  • ϵ\epsilon prediction: ygt=z[c(t)=0;d(t)=1]y_{gt} = z \quad [c(t) = 0; d(t) = 1]
  • v-prediction: ygt=b(t)za(t)xy_{gt} = b (t) z - a (t) x

diffusion/flow matching 能 work 的本质原因:因为搞了很多小分布加一起,如果强行蒸馏效果可能不乐观。原则上来说,越复杂的分布,需要越大的步数

diffusion 的关键难题,积分形式下已经写不出来他的显式 p(x)p(x),这样就没办法做好 PPO 的重要性采样 diffusion 的本质:根据自己目前的时间进度和任务完成情况,继续微调。

3 Diffusion policy#

如何克服 diffusion 的随机性导致的决策的不连续性?每次预测一批序列,然后成批执行 action chunk

  • 但是这会导致小开环的结果,也就是说一批东西太多了,反应慢
  • 所以现在的改进方法之一是只执行第一个动作,后面的动作用插值的办法影响到后续决策
  • 但是 diffusion 还是太慢了,所以 VLA 现在用 flow matching 的多一点

4 LLM#

LLM 本质也是一个序列生成模型,在 GPT-3 以后,大家发现可以用 RLHF 的办法,用 RL 来解决生成的结果不满意的问题。 但是 reward 仍然是一个大问题,早期的探索是,用人类来标注,具体标注的内容是 preference,是弱 reward,然后用Bradley-Terry model 来设计 reward

p(τiτj)=exp(trψ(st(i),at(i)))exp(trψ(st(i),at(i)))+exp(trψ(st(j),at(j)))p(\tau_i \succ \tau_j) = \frac{\exp\left(\sum_t r_{\psi}(s_t^{(i)}, a_t^{(i)})\right)}{\exp\left(\sum_t r_{\psi}(s_t^{(i)}, a_t^{(i)})\right) + \exp\left(\sum_t r_{\psi}(s_t^{(j)}, a_t^{(j)})\right)} 得到 logp(τiτj)=logσ(rψ(τi)rψ(τj))\log p(\tau_i \succ \tau_j) = \log \sigma(r_{\psi}(\tau_i) - r_{\psi}(\tau_j)) 于是更新 ψargmaxi,jlogσ(rψ(τi)rψ(τj))\psi \leftarrow \arg \max_{i,j} \sum \log \sigma(r_{\psi}(\tau_i) - r_{\psi}(\tau_j))

“Better trajectories are exponentially more likely to be chosen based on their reward”

5 RL for Diffusion Policy#

diffusion model 无法用在 policy 上的一个关键障碍是:模型可以很好的预测动作,但是用一个简洁的形式算出对应动作的概率是很困难的。

pθ(x0=atst)=p(xK)k=1Kpθ(xk1xk,st)dx1:Kp_\theta(x_0=a_t \mid s_t) = \int p(x_K) \prod_{k=1}^{K} p_\theta(x_{k-1}\mid x_k,s_t) dx_{1:K}

目前的学界思路:

  • DPPO:对内层的每一个去噪过程都看成一个 RL 的过程,所以一共两次 MDP
  • FPO:

目前的观点:Diffusion policy 处理 multi modal 的问题确实效果更好一点;而且 Diffusion 在处理 imitation learning 部分的效果也更好一点,但是一旦去 RL,效果就烂了。

具身智能导论:策略
https://adreamleft.site/blog/embodiedai/%E5%85%B7%E8%BA%AB%E6%99%BA%E8%83%BD%E5%AF%BC%E8%AE%BA%E7%AD%96%E7%95%A5
Author ADL
Published at May 4, 2026
Comment seems to stuck. Try to refresh?✨