https://rail.eecs.berkeley.edu/deeprlcourse-fa23/
- hw1: https://rail.eecs.berkeley.edu/deeprlcourse-fa23/deeprlcourse-fa23/static/homeworks/hw1.pdf
- hw2:
符号
-
$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: 输入
[机械臂状态,观测] - 输出
[动作]或者[动作的概率分布]
- 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
- https://rail.eecs.berkeley.edu/deeprlcourse-fa23/deeprlcourse-fa23/static/slides/lec-5.pdf
- Maximum likehood 仅仅让 $theta$ 朝着“这批动作出现概率最大”的方向演进.


1logits = policy(states)2loss_fn = torch.nn.CrossEntropyLoss()3loss = loss_fn(logits, actions) # 离散动作4loss.backward()5gradients = [p.grad for p in policy.parameters()]- 问题:奖励方差大,训练效率低下。好轨迹梯度可能为 0(累积奖励 0),有效奖励信号丢失.
例子:高斯 policy
这里距离是马氏距离,用协方差使得距离评估更准.
两种优化
- 换种形式: reward to go:
- 等等先换一个话题,我们求一个 baseline $b$ 并改写奖励为
,目的是使梯度方差最小。推导出最优的 $b$ 为:

- 其中:

- 结合以上两个优化,得到:

为什么 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) ]$$


- [ok]
- [grep] 注意上图 $Pi$ 那个概率在下图这里已经改写为乘积完毕的形式 $pi_(theta^prime) (s_(i,t), a_(i,t ))$.

- 最后还是改用自动求导了,因为显示计算 $log$ 那一项开销太大. 而 $log$ 那一项正好对应平方误差.
优化的梯度下降?
- 能直接走到最好的 $theta$吗?

- 上图第一个方法“参数距离约束”依赖于参数的具体形式,不好。
- 上图 KL 散度:
通过采样计算. 
1# states: (B, S_dim) -> logits: (B, A_dim)2logits_old = policy_old(states)3logits_new = policy_new(states)4
5# 将 logits 转换为概率分布. 连续动作用 Normal 代替 Categorical6dist_old = torch.distributions.Categorical(logits=logits_old)7dist_new = torch.distributions.Categorical(logits=logits_new)8
9# 对所有样本取平均,得到最终的 KL 散度值10kl_divergence = torch.distributions.kl.kl_divergence(dist_new, dist_old).mean()- 进一步:通过 Fisher 信息矩阵近似展开 KL 散度:

- 可以通过采样来估计 $F$.

- WHY this formula? see:

- 选择 $alpha$: natural gradient. 选择 $epsilon$: trust region policy optimization
- Lec5 end!
Hw1
1.1 Given
show: 
- see: https://blog.csdn.net/weixin_55471672/article/details/138329230
- 第一题我证半天不会证,给我整笑了.
1.2

- holy!
- The Off-policy policy gradient: 这张图简单易懂:





,目的是使梯度方差最小。推导出最优的 $b$ 为:







通过采样计算.



