---
# System prepended metadata

title: 讨论 2023-03-30 强化学习（二）

---

讨论 2023-03-30
=
###### tags: `tutorials` `Fudan` `2023`
# 强化学习（二）
名词复习，s为状态，a为动作，R为环境给予的反馈，$\gamma$为衰减因子。
V(s)为对某一状态的评分，而Q(s,a)为对某一状态的某一动作的评分。
另外，两大主流流派是策略学说，即直接学习P(a|s)，还有价值学说，即学习V或Q估计函数，实际使用时，哪个动作能取得最高价值，就用哪个。两者各有优劣，比如策略学说可以告诉你每个动作有多大可能性有好收益，而价值学说可以告诉你采取某个动作的绝对收益是多少。
## REINFORCE算法 （policy based）
我们先来介绍最朴素的policy gradient方法，也称为REINFORCE算法。
\begin{gather}
J(\theta)=E_{s_1,a_1,\cdots,s_n,a_n \sim \pi(\theta)} \sum_t \gamma_t R(s_t,a_t) \\
= \sum_{\mathbf{s},\mathbf{a}} \prod_t P(a_t|s_t) \sum_t \gamma_t R(s_t,a_t)\\
\end{gather}
因为动作轨迹可能很长（t可以有几百步或几千步），那么对整体轨迹求导是十分困难的，REINFORCE用了一个巧妙的技巧，也就是构造ln x的导数形式，从而引入ln函数来分解概率连乘，我们只需要分别计算每一步的梯度再汇总即可。这也就是经典的把对期望的梯度转换为梯度的期望（很多变分推断方法都是在做这个事）。
\begin{gather}
\nabla_\theta J(\theta)=\sum_{\mathbf{s},\mathbf{a}} \frac{\prod_t P(a_t|s_t)}{\prod_t P(a_t|s_t)} \nabla_\theta \prod_t P(a_t|s_t) \sum_t \gamma_t R(s_t,a_t)\\
= \sum_{\mathbf{s},\mathbf{a}} \prod_t P(a_t|s_t) \nabla_\theta \log \prod_t P(a_t|s_t) \sum_t \gamma_t R(s_t,a_t) \\
= \sum_{\mathbf{s},\mathbf{a}} \prod_t P(a_t|s_t) \sum_t \nabla_\theta \log P(a_t|s_t) \sum_t \gamma_t R(s_t,a_t)
\end{gather}

## 动态规划视角与Bellman等式 （value based）

既然我们拥有reward function，那么最佳策略理论上可以通过动态优化搜索得到，实际上，我们有两种书写状态转移方程的思路（都是从T到0时刻，因为reward在后面）。
$$V(s) = \max_a \sum_{s', r} P(s', r|s, a)[r+\gamma v(s')]$$
即当前状态的最优解来自于考量当前reward和后续状态的价值。
$$Q(s,a) = \sum_{s', r} P(s', r|s, a)[r+\gamma \max_{a'} Q(s', a')]$$
Q函数则考虑是最佳状态动作对，外面不用枚举动作了，但需要考虑下一个状态的动作，因为他是从一个Q到另一个Q。

我们再继续把这个过程写成一个迭代的形式，因为除非空间很小，我们其实没办法真的跑上述的动态规划过程（其实就是有记忆的打表搜索），所以要逐步更新。
$$V(s) \leftarrow V(s)+ \alpha [R_{t+1}+\gamma V(s')-V(s)]$$

Sarsa方法
$$Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha[R_{t+1} + \gamma Q(s_{t+1}, a_{t+1}) - Q(s_t, a_t)] $$

Q-learning方法
$$Q(s_t, a_t) \leftarrow Q(s_t, a_t) + \alpha[R_{t+1} + \gamma \max_a Q(s_{t+1}, a) - Q(s_t, a_t)]$$

类似的变种很多，但我们要理解这些公式背后的思想。比如只有V，没有Q，那么动作对reward的影响有时就被概括了，比如有两个动作收益都很高，但是V函数只在意最高的收益。而Q函数就可以捕捉二者的差别。但反过来，Q函数要多学很多东西，如果有大量不重要的动作，学习了反而是干扰。
## Actor-Critic
这类方法有太多实现，我们这里只讲他的核心思想，其实很简单，用价值函数去指导策略学习。我们知道REINFORCE里面需要计算整个序列的反馈，而Actor-critic中用V函数或Q函数把这个反馈给替代了。所以Actor就是策略模型，Critic就是价值函数，剩下就可以随意搭配了。

## Online vs. Offline RL
Online就是模型可以和环境交互，获取反馈。Offline就是我们只有和环境交互的历史信息，模型不能产生新的动作轨迹和环境交互。

Offline又分为几种情况，训练数据固定，和监督学习一样，就一定数量的动作轨迹。或者是有新的动作轨迹，但是是另一个不相关的策略模型的动作轨迹，以及一些其他的不能自由与环境交互的场景。


|Offline RL|监督学习|
|-|-|
|训练数据不是最佳方案|训练数据是最佳方案|
|要找到比任何已有数据更好的答案| 拟合已有答案|
|探索训练数据所在空间之外的区域|I.I.D.告诉我们掌握训练空间就足够了|
|需要联合多条数据，合并其精华|I.I.D. 告诉我们多条数据之间没关系|

Offline具体方法下次再讲



