强化学习常见算法总结
强化学习常见算法总结
目录
针对离散动作的学习方法
基于值
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))。