how to

RL 285

Jul 1, 2024
notesjulyfun2407
4 Minutes
778 Words

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

符号

  • $J(theta)$: 策略的累积奖励的期望,需要最大化

  • 顺序: $s_1 => a_1 => s_2$

  • $tau$: 轨迹,表示所有 $s, a$

  • $pi(a | s)$:状态 $s$ 下采取 $a$ 的概率

  • $V^pi (s) eq.def EE_pi [G_t | S_t = s]$ 状态价值函数 state-value function,即还不确定 $a$

  • $Q^pi (s, a) = EE_pi [G_t | S_t = s, A_t = a]$ 动作价值函数 action-value function,即确定了 $a$

    • 有 $V^pi (s) = sum_(a in A) pi(a | s) Q^pi (s, a)$
    • 有 $Q^pi (s, a) = r(s,a) + gamma sum_(s^prime in S) P(s^prime | s, a) V^pi (s^prime)$
    • $s —>^pi a_i —>^P s^prime$

强化学习类型

  • Policy Gradient: 求 $EE[r]$ 对 $theta$ 的导数.
    • 训练:
      • Actor: 输入 [机械臂状态,观测]
      • 输出 [动作] 或者 [动作的概率分布]
    • 推理: 一样
  • Value Based (DQN): 直接训练一个 Q / V,取最大值对应的动作索引 (no explicit policy)
  • Actor-Critic: 有 A 有 Q
  • Model-based: 有模型自行估计 $s$ 经过 $a$ 如何转移 ( learn $p(s_(t + 1) | s_t, a_t)$ )

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)

Lec5 Policy Gradients

1
logits = policy(states)
2
loss_fn = torch.nn.CrossEntropyLoss()
3
loss = loss_fn(logits, actions) # 离散动作
4
loss.backward()
5
gradients = [p.grad for p in policy.parameters()]
  • 问题:奖励方差大,训练效率低下。好轨迹梯度可能为 0(累积奖励 0),有效奖励信号丢失.

例子:高斯 policy

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

  • default

两种优化

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

为什么 PG 必须是 on-policy

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

importance sampling

  • 这个公式就是 IS: $$E_(x tilde p(x)) [f(x)] = E_(x tilde q(x)) [ p(x) / q(x) f(x) ]$$
  • default
  • default
  • [ok]
    • [grep] 注意上图 $Pi$ 那个概率在下图这里已经改写为乘积完毕的形式 $pi_(theta^prime) (s_(i,t), a_(i,t ))$.
  • default
  • 最后还是改用自动求导了,因为显示计算 $log$ 那一项开销太大. 而 $log$ 那一项正好对应平方误差.

优化的梯度下降?

  • 能直接走到最好的 $theta$吗?
  • 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
  • 可以通过采样来估计 $F$.
  • default
  • WHY this formula? see:
    • default
  • default
  • 选择 $alpha$: natural gradient. 选择 $epsilon$: trust region policy optimization
  • Lec5 end!

Hw1

1.1 Given

default show: default

1.2

default

  • holy!
  • The Off-policy policy gradient: 这张图简单易懂:
  • default
Article title:RL 285
Article author:Julyfun
Release time:Jul 1, 2024
Copyright 2025
Sitemap