How to?

285-1

Dec 2, 2025
285
6 Minutes
1026 Words

https://rail.eecs.berkeley.edu/deeprlcourse-fa23/

FAQ

log 何时来的?

  • default
    • 从右往左看.

𝑟 导数怎么传递到 𝜃 上的?

  • Q-learning 是 (s, a) 𝜃 r,这里 s,a,r 都在数据集中,所以就是监督学习

符号

  • 𝐽(𝜃): 策略的累积奖励的期望,需要最大化

  • 顺序: 𝑠1𝑎1𝑠2

  • 𝜏: 轨迹,表示所有 𝑠,𝑎

  • 𝜋(𝑎|𝑠):状态 𝑠 下采取 𝑎 的概率

  • 𝑉𝜋(𝑠)𝔼𝜋[𝐺𝑡|𝑆𝑡=𝑠] 状态价值函数 state-value function,即还不确定 𝑎

  • 𝑄𝜋(𝑠,𝑎)=𝔼𝜋[𝐺𝑡|𝑆𝑡=𝑠,𝐴𝑡=𝑎] 动作价值函数 action-value function,即确定了 𝑎

    • 𝑉𝜋(𝑠)=𝑎𝐴𝜋(𝑎|𝑠)𝑄𝜋(𝑠,𝑎)
    • 𝑠𝜋𝑎𝑖𝑃𝑠

强化学习类型

  • Policy Gradient: 求 𝔼[𝑟]𝜃 的导数.
    • 𝜃𝐽(𝜃)𝔼[𝜃log𝜋𝜃(𝑎|𝑠)𝐴(𝑠,𝑎)]
    • 训练:
      • Actor: 输入 [机械臂状态,观测]
      • 输出 [动作] 或者 [动作的概率分布]
    • 推理: 一样
  • Actor-Critic: 有 A 有 Q
  • Model-based: 有模型自行估计 𝑠 经过 𝑎 如何转移 ( learn 𝑝(𝑠𝑡+1|𝑠𝑡,𝑎𝑡) )

On-off policy

  • off-policy: able to improve the policy without generating new samples from that policy
  • on-policy: any time the policy is changed (even a little bit) we need to generate new samples.
  • (and there is offline-RL, which runs on a fixed dataset and rollout is not allowed)

Lec5 Policy Gradients

  • https://rail.eecs.berkeley.edu/deeprlcourse-fa23/deeprlcourse-fa23/static/slides/lec-5.pdf
  • Maximum likehood 仅仅让 𝜃 朝着“这批动作出现概率最大”的方向演进.
  • default
  • default
  • 问题:奖励方差大,训练效率低下。好轨迹梯度可能为 0(累积奖励 0),有效奖励信号丢失.

例子:高斯 policy

这里距离是马氏距离,用协方差使得距离评估更准.

  • default

两种优化

  • 换种形式: reward to go:
    • default
  • 等等先换一个话题,我们求一个 baseline 𝑏 并改写奖励为 default ,目的是使梯度方差最小。推导出最优的 𝑏 为:
    • default
    • 其中: default
  • 结合以上两个优化,得到:
  • default

为什么 PG 必须是 on-policy

上述公式是对 𝜃 求导,𝜃 必须是最新的,求的梯度才有意义。导致训练效率很低. 当然你可以多采样几次,相当于 batch 大很多.

importance sampling

  • 这个公式就是 IS: 𝐸𝑥𝑝(𝑥)[𝑓(𝑥)]=𝐸𝑥𝑞(𝑥)[𝑝(𝑥)𝑞(𝑥)𝑓(𝑥)]
  • default
  • default
  • [ok]
    • [grep] 注意上图 Π 那个概率在下图这里已经改写为乘积完毕的形式 𝜋𝜃(𝑠𝑖,𝑡,𝑎𝑖,𝑡).
  • default
  • 最后还是改用自动求导了,因为显示计算 log 那一项开销太大. 而 log 那一项正好对应平方误差.

优化的梯度下降?

  • 能直接走到最好的 𝜃吗?
  • default
  • 上图第一个方法“参数距离约束”依赖于参数的具体形式,不好。
  • 上图 KL 散度: default 通过采样计算.
  • default
1
# states: (B, S_dim) -> logits: (B, A_dim)
2
logits_old = policy_old(states)
3
logits_new = policy_new(states)
4
5
# 将 logits 转换为概率分布. 连续动作用 Normal 代替 Categorical
6
dist_old = torch.distributions.Categorical(logits=logits_old)
7
dist_new = torch.distributions.Categorical(logits=logits_new)
8
9
# 对所有样本取平均,得到最终的 KL 散度值
10
kl_divergence = torch.distributions.kl.kl_divergence(dist_new, dist_old).mean()
  • 进一步:通过 Fisher 信息矩阵近似展开 KL 散度:
  • default
  • 可以通过采样来估计 𝐹.
  • default
  • WHY this formula? see: [ai]
    • default
  • default
  • 上图两种训练方法。选择 𝛼: natural gradient. 选择 𝜀: trust region policy optimization
  • Lec5 end!

附录:PG 的 AI 简洁讲解

1
目标是最大化:
2
3
J(θ) = 𝔼_{τ∼πθ}[R(τ)]
4
5
其中轨迹 τ 的概率依赖策略:
6
7
P(τ; θ) = ρ(s₀) ∏ₜ πθ(aₜ | sₜ) P(sₜ₊₁ | sₜ, aₜ)
8
9
环境转移 P 不依赖 θ,只有策略 πθ(a | s) 依赖 θ。
10
11
关键推导是 score function trick:
12
13
∇θ J(θ)
14
= ∇θ 𝔼_{τ∼πθ}[R(τ)] --> 这里没有梯度
15
= ∇θ ∫ P(τ; θ) R(τ) dτ --> 这里并不能用 ∑ P * R 来估计,别搞错了.
19 collapsed lines
16
= ∫ ∇θ P(τ; θ) R(τ) dτ --> 然后套入 $dif p = p dif log p$:
17
= ∫ P(τ; θ) ∇θ log P(τ; θ) R(τ) dτ --> 仔细看这里在 ∇ 左边引入了 P(τ; θ) 系数,从而可以提取出 𝔼
18
= 𝔼_{τ∼πθ}[∇θ log P(τ; θ) R(τ)]
19
20
而:
21
22
log P(τ; θ)
23
= log ρ(s₀) + ∑ₜ log πθ(aₜ | sₜ) + ∑ₜ log P(sₜ₊₁ | sₜ, aₜ)
24
25
只有中间那项依赖 θ,所以:
26
27
∇θ log P(τ; θ)
28
= ∑ₜ ∇θ log πθ(aₜ | sₜ)
29
30
因此 policy gradient 是:
31
32
∇θ J(θ) = 𝔼[∑ₜ ∇θ log πθ(aₜ | sₜ) Rₜ]
33
34
注意这个表达式的目的不是求 J(θ) 的梯度本身,而是求 J(θ) 的一个代理目标,等式右边是保留 ∇θ 符号的.
Article title:285-1
Article author:Julyfun
Release time:Dec 2, 2025
Copyright 2026
Sitemap