强化学习常见算法总结

目录

针对离散动作的学习方法

  • 基于值

    • Q-Learning

    • DQN

    • SARSA
    • DQN with experience replay
    • DQN with Target Network
    • Double DQN
    • Deuling Network
    • Noisy Network
  • 基于策略

    • Policy Gradient
    • Reinforce
    • Actor-Critic
    • Reinforce with baseline
    • A2C

针对连续动作空间的学习方法

待定

针对多智能体的学习方法

待定

基础

  • 机器学习

  • 深度学习

  • 马尔可夫决策过程

    MDP强化学习在数学上的理想化形式,在MDP框架之下,可以进行非常精确的理论推导。

  • 贝尔曼方程

    表示动态规划问题中相邻状态关系的方程。

  • 蒙特卡洛

    模拟(或者经历)一段序列或情节,在序列或情节结束后,根据序列中各个状态的价值,来估计状态价值。

  • TD算法

    模拟(或者经历)一段序列或情节,每行动一步(或者几步),根据新状态的价值,然后估计执行前的状态价值。

    (可以认为蒙特卡洛MC方法是最大步数的TD算法)

Q-Learning

基于 TD算法理解Q-Learning,直观使用table存储(s,a)的Q值。根据状态s和动作a得到Q值。

核心思想:对当前的状态s和选择的动作a进行评分得到Q值,希望Q值越大越好。使用TD算法,用当前动作a下的奖励r + 下一状态的最大奖励近似作为当前动作的回报。

训练过程:

  • 选择一个策略,如:e-greedy策略,根据当前的状态s选择动作a
  • 执行动作a,得到奖励r,下一个状态s_
  • 更新Q table中的值:Q = 学习率 [r + 奖励衰减 s_状态下最大的Q值 - 当前的Q值]

其实就是利用Q_现实,和Q_估计之间 的差去迭代拟合Q值。

其中:Q_估计 = 当前状态s采取动作a后,得到奖励的期望 = 回报 = sum(rt + rt+1 + rt+2 + …)

后面也是用蒙特卡洛或者TD算法去对期望做估计 = 贝尔曼最优方程的推导

DQN

类似Q-Learning,只是将Q table换成神经网络模型,更适用于状态和动作空间大的情况。

核心思想:利用TD算法,使用部分估计值Q_next_state_max_value + 当前的奖励r 作为回报的期望。

训练过程:

  • 选择一个策略,如:e-greedy策略,根据当前的状态s选择动作a
  • 执行动作a,得到奖励r,下一个状态s_
  • 更新神经网络的参数:loss = 学习率 [r + 奖励衰减 s_状态下最大的Q值 - 当前的Q值]

SARSA

与DQN类似,不过是将原来用TD求出的 s_状态下最大的Q值 ,利用蒙特卡洛近似为下一次抽样的Q值。

核心思想:也是利用蒙特卡洛对st+1做随机抽样,作为回报的期望。在当前状态s下,按策略P选取动作a,得到r,再次抽样动作a1,得到r1。用r + r1近似为当前动作下的回报。

训练过程:

  • 选择一个策略,如:e-greedy策略,根据当前的状态s选择动作a
  • 执行动作a,得到奖励r,下一个状态s_
  • 再次根据策略选取动作a1,得到动作 a1的奖励r1
  • 更新神经网络的参数:loss = 学习率 [r + 奖励衰减 r1- 当前的Q值]

DQN with experience replay

离线学习的一个重要技巧,把智能体与环 境交互的记录(即经验)储存到 一个数组里,事后反复利用这些 经验训练智能体。经验回放可以很好的打破序列的相关性,并且重复利用收集到的经验。

但是,只能在异策略的情况下使用。

如果为这些经验添加权重,会比普通的更加有效,称之为:优先经验回放。

DQN with target network

争对TD算法,使用当前的状态预估下一个状态的自举现象,提出target network的概念。

即,使用DQN网络对当前的状态s和动作a求出Q值,使用另一个结构相同target network,求出下一个状态s_的Q值,以此切断自举,减少误差。

训练过程:

  • 选择一个策略,如:e-greedy策略,根据当前的状态s选择动作a (基于DQN)
  • 执行动作a,得到奖励r,下一个状态s_
  • 再次根据策略选取动作a1(基于Target network),得到动作 a1的奖励r1
  • 更新神经网络的参数:loss = 学习率 [r + 奖励衰减 r1- 当前的Q值]

Double DQN

类似target network,不过争对DQN中最大化会造成TD目标高估的问题,做了更细致的区分。

核心思想:针对DQN中的TD目标划分为两部分,将选择部分交给DQN求解,将求值部分交给Target network求解。不同于target network直接求解将整个TD目标,对max的高估问题有所解决。

训练过程:

  • 选择一个策略,如:e-greedy策略,根据当前的状态s选择动作a (基于DQN)
  • 执行动作a,得到奖励r,下一个状态s_
  • 再次根据策略选取动作a1(基于DQN),得到动作 a1的奖励r1 (基于Target network)
  • 更新神经网络的参数:loss = 学习率 [r + 奖励衰减 r1- 当前的Q值]

Dueling Network

将最优动作价值 Q⋆ 分解成最优状态价值 V⋆ 加最优优势 D⋆,其他类同DQN。

核心思想:将最优动作价值 Q⋆ 分解成最优状态价值 V⋆ + 最优优势 D⋆

训练过程:

只是网络结构不同于DQN,其他同DQN,也建议使用DQN的相关优化策略。

Noisy Network

通过将神经网络的参数w替换为 均值 + 标准差,可以显著提高 DQN 的 表现。

核心思想:把神经网络中的参数 w 替换成 µ+σ◦ξ。此处的 µ、σ、ξ 的形状与 w 完全相同。µ、σ 分别表示均值和标准差,它们是神经网络的参数,需要从经验中学习。

训练过程:

Policy Gradient

通过神经网络去近似策略函数 π(a|s; θ) ,对其求梯度,利用策略网络的梯度直接更新网络的方法。

输入当前状态s,输出动作的概率,通过调整动作的概率,达到策略目的。

核心思想:经过一系列的推导,得到策略梯度 g(s, a; θ) ≜ Qπ(s,a) * ∇θ ln π(s, a; θ)。

也就是 = 动作价值函数Qπ + log策略函数 π的梯度。

Reinforce

Reinforce是对策略梯度的具体使用,通过对动作价值函数Qπ做蒙特卡洛近似 ,替换为回报u。

核心思想:将测量梯度中的Qπ做蒙特卡洛近似 ,替换为回报u。

训练过程:

  • 使用策略网络完成一局游戏,得到一条轨迹。

  • 计算轨迹中,每个状态的回报ut。

  • 针对每一个时刻的状态st和动作at,rt,ut,反向传播更新策略网络参数。

  • 随机梯度上升更新策略网络的参数:

Actor-Critic

不同于Reinforce使用观测值ut近似Qπ,Actor-Critic使用神经网络模型去近似Qπ。

核心思想:使用神经网络模型去近似Qπ。使用TD算法拟合价值函数,使用策略梯度拟合策略函数。价值函数为策略函数的状态s和动作a打分。

训练过程:

  • 根据当前的状态s和策略网络计算Q值,选择动作a

  • 执行动作a,得到奖励r,下一个状态s_

  • 策略网络对s_,选择动作a1(不执行)

  • 让价值网络对s和s_打分,得到qt和qt+1

  • 计算TD目标和TD误差:

  • 更新价值网络的参数:loss = 学习率 * err

  • 更新策略网络的参数:

Reinforce with baseline

对基础的策略梯度算法做一个小的改进,就能大幅提高策略梯度方法的表现。

核心思想:策略梯度 g(s, a; θ) ≜ (Qπ(s,a) - baseline) * ∇θ ln π(s, a; θ),一般假设baseline = V(s)。只是为原来策略梯度增加一个价值网络V作为baseline。

训练过程:

  • 使用策略网络完成一局游戏,得到一条轨迹。

  • 计算轨迹中,每个状态的回报ut。

  • 针对每一个时刻的状态st和动作at,rt,ut,反向传播更新策略网络参数。

  • 更新价值网络的参数:loss = [ut - V(st)]

  • 随机梯度上升更新策略网络参数:

A2C

Advantage Actor-Critic,简称A2C。

核心思想:改进策略梯度 g(s, a; θ) ≜ (Qπ(s,a) - Vπ(s)) * ∇θ ln π(s, a; θ),将(Qπ(s,a) - Vπ(s))整体称作优势函数,作为价值网络。

训练过程:

同Actor-Critic,只是将价值网络模型从单纯的Qπ(s,a),换成优势函数(Qπ(s,a) - Vπ(s))。