强化学习算法的简单总结,主要包括基于值函数/策略函数的学习方法、Actor-Critic算法。

强化学习笔记: 强化学习基础基于值函数的学习方法基于值函数的学习方法

强化学习的目标

强化学习的目标是学习到一个策略\(\pi_{\theta}(a\mid s)\),来最大化这个策略的期望回报希望智能体能够获得更多的回报。本质上是策略搜索。 \[ J(\theta) = E_{\tau \sim p_{\theta}(\tau)} [\sum_{t=0}^{T-1}\gamma ^tr_{t+1}] \]

\[ J(\theta) = \int p_{\theta}(\tau) \cdot G(\tau) \, {\rm d}\tau \]

基于值函数的学习方法

策略迭代

已知模型。利用贝尔曼方程算均值)迭代计算出\(V(s)\),再算出\(Q(s,a)\)。选择最好的动作\(a\)去优化策略\(\pi(s)\)\[ \forall s, \quad V^\pi(s) = E_{a \sim \pi(a \mid s)}E_{s\prime \sim p(s\prime \mid s, a)}[ r(s, a, s\prime) + \gamma V^\pi(s\prime)] \]

\[ Q^\pi(s, a) = E_{s\prime \sim p(s\prime \mid s, a)} [r(s, a, s\prime) + \gamma V^\pi(s\prime)] \]

\[ \forall s, \qquad \pi(s) = \arg \max_\limits{a} Q(s, a) \]

值迭代

已知模型。利用贝尔曼最优方程迭代算出\(V(s)\),再算出\(Q(s,a)\)。选择最好的动作\(a\)去优化策略\(\pi(s)\)\[ \forall s \in S, \quad V^*(s) = \max_\limits{a} E_{s^\prime \sim p(s^\prime \mid s, a)}[r(s, a, s^\prime) + \gamma V^*(s^\prime)] \]

\[ Q^\pi(s, a) = E_{s\prime \sim p(s\prime \mid s, a)} [r(s, a, s\prime) + \gamma V^\pi(s\prime)] \]

\[ \forall s, \quad \pi(s) = \arg \max_\limits{a} Q(s, a) \]

蒙特卡罗

未知模型。从\((s,a)\)随机游走,采集N个样本。使用所有轨迹回报平均值近似估计\(Q(s,a)\) ,再去改进策略。重复,直至收敛。 \[ Q^\pi(s, a) \approx \hat Q^\pi(s, a) = \frac{1}{N} \sum_{n=1}^NG(\tau^{(n)}) \]

时序差分算法

无需知道完整轨迹就能对策略进行评估。

时序差分学习=动态规划-贝尔曼估计\(G(\tau)\) + 蒙特卡罗采样-增量计算\(Q(s,a)\)

贝尔曼估计轨迹总回报\(G(\tau)\) \[ G(\tau) \leftarrow r(s, a, s^\prime) + \gamma \cdot Q(s^\prime, a^\prime) \] 增量计算\(Q(s,a)\) \[ Q(s, a) \leftarrow Q(s, a) + \alpha \cdot (\underbrace{ r+ \gamma \cdot Q(s^\prime, a^\prime)}_{\color{blue}{实际值}} - \underbrace{Q(s, a)}_{\color{blue}{预期值}}) \]

SARSA

同策略的时序差分算法,是Q学习的改进。

1、当前状态\(s\),当前动作\(a\) (初始时选择\(a=\pi^\epsilon(s)\),后续是更新得到的)

2、执行动作\(a\),得到新状态\(s^\prime\),得到奖励\(r(s,a,s^\prime)\)

4、依概率选择新动作\(a = \pi^\epsilon(s^\prime)\)新状态新动作的值函数\(Q(s^\prime, a^\prime)\)

5、更新Q函数 \[ Q(s, a) \leftarrow Q(s, a) + \alpha\cdot \left( r + \gamma \cdot Q(s^\prime, a^\prime) - Q(s, a) \right) \] 6、更新状态和动作:\(s = s^\prime, a = a^\prime\)

Q学习

1、当前状态\(s\),选择当前动作\(a = \pi^\epsilon(s)\)

2、执行动作\(a\)、得到新状态\(s^\prime\)和奖励 \(r(s,a,s^\prime)\)

3、不依概率选择新动作,而是直接选择最大的值函数\(\max_\limits{a^\prime}Q(s^\prime, a^\prime)\)

4、更新Q函数 \[ Q(s, a) \leftarrow Q(s, a) + \alpha\cdot \left( r + \gamma \cdot \max_{a^\prime} Q(s^\prime, a^\prime) - Q(s, a) \right) \] 5、更新状态:\(s = s^\prime\)

Q网络

使用神经网络\(Q_{\phi}(\mathbf{s,a})\)去近似值函数\(Q(s,a)\)。两个问题:实际目标值不稳定;样本之间具有强相关性。 \[ L(s, a, s^\prime; \phi) = \left( \underbrace{r + \gamma \cdot \max_{a^\prime} Q_\phi(\mathbf s^\prime, \mathbf a^\prime)}_{\color{blue}{实际目标值}} - \underbrace{Q_\phi(\mathbf s, \mathbf a)}_{\color{blue}{\text{网络值}}} \right)^2 \]

DQN

深度Q网络:

  • 目标网络冻结-稳定目标值\(Q_{\phi}(\mathbf{s,a})\)训练网络,\(Q_{\hat \phi}(\mathbf{s,a})\)目标值网络。定期更新参数\(\hat \phi \leftarrow \phi\)
  • 经验池的经验回放-去除样本相关性- 每次采集一条数据放入经验池,再从经验池取数据进行训练。

生成新数据加入经验池

1、状态\(s\), 选择动作\(a = \pi^\epsilon(s)\)

2、执行动作\(a\), 得到\(r\)\(s^\prime\)

3、\((s,a, r, s^\prime)\) 加入经验池\(\cal D\)

采经验池中采样一条数据计算

1、从\(\cal D\)中采样一条数据,\((ss,aa, rr, ss^\prime)\)。 (去除样本相关性

2、计算实际目标值\(Q_{\hat \psi}(\mathbf{ss, aa})\)。 (解决目标值不稳定的问题\[ Q_{\hat \psi}(\mathbf{ss, aa}) = \begin{cases} & rr, & ss^\prime 为终态 \\ & rr + \gamma \cdot \max_\limits{\mathbf a^\prime}Q_{\hat \phi}(\mathbf {ss^\prime}, \mathbf {a^\prime}), &其它 \end{cases} \] 3、损失函数如下,梯度下降法去训练Q网络 \[ J(\phi) = \left ( Q_{\phi}(\mathbf {ss}, \mathbf {aa}) - y \right)^2 =\left ( Q_{\phi}(\mathbf {ss}, \mathbf {aa}) - Q_{\hat \psi}(\mathbf{ss, aa}) \right)^2 \] 状态前进

\(s \leftarrow s^\prime\)

更新目标Q网络的参数

每隔C步更新:\(\hat \phi \leftarrow \phi\)

基于策略函数的学习方法

策略搜索本质上是一个优化问题,无需值函数可以直接优化策略。参数化的策略可以处理连续状态和动作。

策略梯度 :是一种基于梯度的强化学习方法。

策略连续可微假设:假设\(\pi_{\theta}(a \mid s)\)是一个关于\(\theta\)的连续可微函数。

最大化策略的期望回报 \[ J(\theta) = \int p_{\theta}(\tau) \cdot G(\tau) \, {\rm d}\tau \]

策略梯度

\[ \frac{\partial J(\theta)}{\partial \theta} \triangleq E_{\tau \sim p_{\theta}(\tau)} \left[ \color{blue}{\frac{\partial}{\partial \theta} \log p_{\theta}(\tau)} \cdot G(\tau)\right] \]

\[ \frac{\partial}{\partial \theta} \log p_{\theta}(\tau) = \sum_{t=0}^{T-1} \frac{\partial}{\partial \theta} \color{blue}{ \log\pi_{\theta}(a_t \mid s_t)} \]

\[ \begin{align} \frac{\partial J(\theta)}{\partial \theta} & = E_{\tau \sim p_{\theta}(\tau)}\left[ \sum_{t=0}^{T-1} \left(\frac{\partial}{\partial \theta} \log\pi_{\theta}(a_t \mid s_t) \cdot \gamma^t G(\tau_{t:T})\right) \right] \end{align} \]

REINFORCE算法

期望用采样的方式来近似,随机采样N个轨迹。 \[ \begin{align} \frac{\partial J(\theta)}{\partial \theta} & \approx \frac{1}{N}\sum_{n=1}^ N \left[ \sum_{t=0}^{T-1} \left(\frac{\partial}{\partial \theta} \log\pi_{\theta}(a^{(n)}_t \mid s^{(n)}_t) \cdot \gamma^t G(\tau^{(n)}_{t:T})\right) \right] \end{align} \] 1、根据\(\pi_\theta(a\mid s)\)生成一条完整的轨迹\(\tau = s_0, a_0, s_1,a_1, \cdots, s_{T-1}, a_{T-1}, s_{T}\)

2、在每一时刻更新参数 (0~T)

先计算当前时刻的回报\(G(\tau_{t:T})\),再更新参数: \[ \theta \leftarrow \theta + \alpha \cdot \gamma^tG(\tau_{t:T}) \cdot \frac{\partial}{\partial \theta} \log\pi_{\theta}(a_t \mid s_t) \]

缺点:

  • 需要完整的轨迹
  • 不同轨迹之间的策略梯度方差大,导致训练不稳定

带基准函数的REINFORCE算法

每个时刻\(t\)的策略梯度 \[ \frac{\partial J_t(\theta)}{\partial \theta} = E_{s_t,a_t}\left[ \alpha \cdot \gamma^tG(\tau_{t:T}) \cdot \frac{\partial}{\partial \theta} \log\pi_{\theta}(a_t \mid s_t) \right] \] 基准函数

  • 为了减小策略梯度的方差
  • 引入与\(a_t\)无关的基准函数\(b(s_t) = V(s_t)\)
  • 越相关方差越小,所以选择值函数

每一时刻的策略梯度为: \[ \frac{\partial \hat J_t(\theta)}{\partial \theta} = E_{s_t,a_t}\left[ \alpha \cdot \gamma^t \left( \color{blue} {G(\tau_{t:T}) - b(s_t)}\right)\cdot \frac{\partial}{\partial \theta} \log\pi_{\theta}(a_t \mid s_t) \right] \] 1、根据策略\(\pi_\theta(a\mid s)\)生成一条完整轨迹\(\tau = s_0, a_0, s_1,a_1, \cdots, s_{T-1}, a_{T-1}, s_{T}\)

2、在每一时刻更新参数

计算当前时刻的轨迹回报\(G(\tau_{t:T})\) ,再利用基准函数(值函数)进行修正,得到\(\delta\) \[ \delta \leftarrow G(\tau_{t:T}) - V_{\phi} (s_t) \] 更新值函数\(V_\phi(s)\)的参数\(\phi\) \[ \phi \leftarrow \phi + \beta \cdot \delta \cdot \frac{\partial}{ \partial \phi} V_{\phi}(s_t) \] 更新策略函数\(\pi_\theta(a \mid s)\)的参数\(\theta\) \[ \theta \leftarrow \theta + \alpha \cdot \gamma^t\delta \cdot \frac{\partial}{\partial \theta} \log\pi_{\theta}(a_t \mid s_t) \] 缺点: 需要根据策略采集一条完整的轨迹。

Actor-Critic算法

演员-评论家算法结合了策略梯度时序差分算法。不需要一条完整的轨迹,可以单步更新参数,无需等到回合结束才进行更新。

演员

根据\(s\)和策略\(\pi_\theta(a\mid s)\),执行动作\(a\),环境变为\(s^\prime\),得到奖励\(r\)

评论员

根据真实奖励\(r\)之前的标准打分(估计回报)\(r + \gamma V_\phi(s^\prime)\)再调整自己的打分标准\(\phi\)\(\min_{\phi} \left(\hat G(\tau_{t:T}) - V_{\phi}(s_{t}) \right)^2\)

使评分更加接近环境的真实回报。

演员

演员根据评论的打分调整自己的策略\(\pi_\theta\),争取下次做得更好。\(\theta \leftarrow \theta + \alpha \cdot \gamma^t \left( G(\tau_{t:T}) - V_{\phi} (s_t)\right) \cdot \frac{\partial}{\partial \theta} \log\pi_{\theta}(a_t \mid s_t)\)

1. 执行策略,生成样本 \[ s, a, r, s^\prime \] 2. 估计回报,生成\(\delta\) \[ G(s) = r + \gamma V_\phi(s^\prime), \quad \delta = G(s) - V_{\phi}(s) \] 3. 更新值函数和策略 \[ \phi \leftarrow \phi + \beta \cdot \delta \cdot \frac{\partial V_{\phi}(s)}{\partial \phi} \]

\[ \theta \leftarrow \theta + \alpha \cdot \lambda \delta \cdot \frac{\partial }{\partial \theta} \log \pi_\theta(a\mid s) \]

4. 更新折扣率和状态 \[ \lambda \leftarrow \lambda \cdot \gamma, \quad s \leftarrow s^\prime \]