### 强化学习训练营小记
#### 第一天
课程介绍、知识梳理和所用框架
#### 第二天
##### Sarsa
Sarsa: 学习特定state下,特定action的价值Q, 最终建立和优化一个 Q表格,以state为行,action为列,根据与环境交互得到的reward来更新Q表格,更新公示为:
```math
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)]
```
Sarsa 在训练中为了更好地探索环境,采用 $\epsilon-greedy$ 方式来训练,也就是根据一定概率随机选择动作输出
##### Q-learning
Q-learning 也是采用Q表格的方式存储Q值(状态动作价值),决策部分与Sarsa是一样的,采用 $\epsilon-greedy$ 方式添加探索
* Q-learning 与Sarsa不一样的地方是更新Q表格的方式
* Sarsa是on-policy的更新方式,先做出动作再更新
* Q-learning是off-policy的更新方式,更新learn()时无需获取下一步实际做出的动作 next_action, 并假设下一步动作是取最大Q值的动作
* Q-learning的更新公式为
```math
Q(S_t, A_t) \leftarrow Q(S_t, A_t) + \alpha [R_{t+1} + \gamma \max\limits_{a}Q(S_{t+1}, a) - Q(S_t, A_t)]
```
#### 第三天
##### DQN
当需要存储的状态很多时(如围棋、机器人),表格型方法在存储和查找效率上都受局限。DQN就是为了解决上述局限,使用神经网络来近似代替Q表格,因此也叫Q网络。
在DQN中,定义损失函数为 $Loss = (y_i - Q(s,a;\theta))^2$,
其中, $y_i = \gamma + \tau\max_{\alpha^{\prime}Q(s^{\prime}, \alpha^{\prime};\theta)}$, 且使用梯度下降方法最小化损失。
* 本质上 DQN 还是一个Q-learning算法,更新方式一致,同样也采用 $\epsilon-greedy$ 方法训练;
* 在Q-learning的基础上,DQN提出了两个技巧使得Q网络的更新迭代更稳定:
* 经验回放 Experience Replay: 主要解决样本关联性和利用效率问题。 它使用一个经验池存储多条经验 s,a,r,s', 再从中随机抽取一批数据数据送去训练
* 固定Q目标 Fiexed-Q-Target: 主要解决算法训练不稳定的问题。核心idea是复制一个和原来Q网络结构一样的Target Q网络,用于计算Q目标值。
#### 第四天
##### Policy Graient
DQN 存在如下问题:
* 只能表示固定策略,而无法表示随机策略。某些情况下DQN基于贪心的策略并不一定是最优的
* 某个动作小的改变很可能会导致策略的完全改变
* 无法表示连续动作
基于策略的学习可能会有更好的收敛性,这是因为基于策略的学习虽然每次只改善一点点,但总是朝着好的方向在改善
Policy Graient的基本思想是:
让神经网络直接输出策略函数 $\pi(s)$,即在状态s下应该执行何种动作。对于非确定性策略,输出的是这种状态下执行各个动作的概率值,即 $\pi(a|s) = p(a|s)$。 此时神经网络输出层的作用类似于多分类问题的softmax回归。
因此,Policy Gradient可以构造一个目标函数$L$, 输入是神经网络输出的策略函数$\pi(a|s)$, 通过优化此目标函数即可确定神经网络的参数$\theta$, 从而确定策略函数 $\pi(a|s;\theta)$
优化过程仍可以通过梯度上升法实现,迭代公式为:
$\theta_{t+1} = \theta_t + \alpha \nabla_\theta L(\theta_t)$
假设策略函数对参数的梯度$\nabla_\theta \pi(a|s;\theta)$ 存在,从而保障$\nabla_\theta L(\theta_t)$ 有意义
![88e4abe07c8f5c10a7f0ebc6b9e63caf.jpeg](evernotecid://1225444D-36BA-4AD3-83F9-BF0B3DCBF982/appyinxiangcom/10030285/ENResource/p19270)
一个episode的轨迹(Trajectory) $\tau = \{s_1, a_1, s_2, a_2,...,s_T, a_T\}$发生的概率:
$p_\theta(\tau) = p(s_1)\pi_{\theta}(a1|s1)p(s2|s1, a1)\pi_{\theta}(a2|s2)...$
总回报 $R(\tau) = \sum_{t=1}^{T}r_t$
$\pi_{\theta}(a|s)$的期望回报:即所有episode的平均回报
$\bar{R_{\theta}} = \sum_{\tau}R(\tau)p_\theta(\tau)$
(注意在model-free下转移概率$p_{\theta}$是未知的)
因此使用采样的方法,$\bar{R_{\theta}} = \sum_{\tau}R(\tau)p_\theta(\tau) \approx \frac{1}{N} \sum_{n=1}^N{R(\tau)}$
目标函数$J(\theta) = \bar{R_{\theta}}$
为了使回报最大,采用梯度上升的方式更新参数$\theta$
$\theta \leftarrow \theta + \alpha\nabla\bar{R_{\theta}}$
$Loss = -R(\theta)\log\pi_{\theta}(a_t|s_t)$
因为是梯度上升,所以有一个负号
(交叉熵科可以表示两个概率分布之间的距离(差值))
#### 第五天
##### DDPG
DDPG 采用 Actor-Critic结构
Ctritic 的模型假设参数为 $\omega$,使用它来表示Q Value。因此写成 $Q_\omega(\alpha|s)$
Actor 的模型预测Policy,与 REINFORCE的模型相似,记为 $\pi_\theta(\alpha|s)$. Actor使用Critic预测的Q函数来代替REINFORCE的reward-to-go来更新参数,Critic起到一个帮助的作用。但是在这里不需要经过一个完整的episode才能获取信息,而是可以在任意一个state获取Q。
DDPG的Actor是一个Policy Network,输出是一个action,而Critic是一个Q Network。
S -> Policy Network -> a
S, a -> Q Network -> Q
训练的时候通过Critic的指引来更新Actor, 而Critic是由Reward指引更新的
```math
\alpha = \mu_\theta(s)
```
其中 $\mu_\theta$ 指的是Policy Network,$\theta$是其参数
Q value使用 $Q_\omega(\alpha|s)$来表示
获取最大Q value为
$argmax_\alpha=\mu_{\theta}(s)Q_\omega^\ast(\mu_{\theta}(s)|\alpha)$
优化Policy Network时,可以把 -Q设为Loss,这样可以通过调整参数$\theta$来调整$\alpha$来最大化Q
贵在坚持,加油
收货不少啊~~
加油!共同进步!