讨论 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具体方法下次再讲