股票操作之强化学习基础(三)(Deep Q Network、Actor-critic、Policy gradients)
股票操作之强化学习基础(三)(Deep Q Network、Actor-critic、Policy gradients)
接上一篇文章继续介绍一些强化学习基础。
1 DQN(Deep Q Network)
DQN是一种融合了神经网络和Q-learning的方法。那么DQN提出来的动机是什么呢?Q-learning算法的核心是学习Q-table,然而真实世界的状态非常多,这些状态多到计算机已经无法储存了。比如在围棋中,不同的牌面布局就有很多种。因此DQN被提出来,其核心思想就是利用神经网络来近似这个Q-table。
举个例子:假设一个学习好的Q-table如下:
假设我们用一个神经网络来近似这个Q-table,输入状态(state)和动作(action),就能利用神经网络输出其对应Q-table中的Q值。或者我们输入一个状态,神经网络可以输出所有动作对应的Q值。
但是单纯的用神经网络代替Q-table又是不可行的,其原因主要如下 [2]:
1)DL(Deep learning,深度学习)是监督学习需要学习训练集,强化学习不需要训练集只通过环境进行返回奖励值reward,同时也存在着噪声和延迟的问题,所以存在很多状态state的reward值都是0也就是样本稀疏。
2)DL每个样本之间互相独立,而RL(ReinforcementLearning,强化学习)当前状态的状态值是依赖后面的状态返回值的。
3)当我们使用非线性网络来表示值函数的时候可能出现不稳定的问题。
首先我们看Q-learning的算法,为什么直接将Q-table替换成神经网络会出现以上问题。
1)Q-learning算法是单步更新,单步更新也致使每次更新都是一个样本输入更新,这种更新方式导致神经网络不好更新(神经网络都是利用mini_batch更新的)。
2)在更新的前期阶段(在获得reward之前)很多更新都是无用的,在计算loss=rt+1 +gamma * max Q(St+1, a) - Q(St, at)时,更新是比较依赖一条好的路径(即能找到正向reward的路径),但这些路径在更新早期阶段又是非常少的。
3)若单步更新Q网络可能会导致Q网络震荡厉害,网络不易收敛。
(这三点是我根据算法所提出的个人观点)
**那么DQN怎么解决上述问题呢?**DQN中的两大利器解决了以上问题
1)通过experience replay(经验池)的方法来存储过往路径
2)使用两个网络代替Q-table,一个是每个batch更新一次的Q1网络,一个是相对于Q1网络更新频率低的Q2网络。
接下来我们从伪代码的角度看,DQN怎么解决这些问题的。
1)首先初始化两个Q网络,下面我们称Q网络为Q现实网络(可获得当前状态),Q_hat为Q估计网络(获得Q估计网络)
2)初始化一开始的状态,就是令agent在起始点,
3)利用贪婪规则选下一时刻动作
4)进行状态移动,并记录状态移动情况(这是DQN的核心之一,存储过往情况)
5)进行mini_batch的更新,从记忆库中选取一些记忆计算loss并更新,下面的phi表示状态,a就是动作,r就是reward。这里更新只更新Q网络(当前网络)。(核心二,解决神经网络minibatch问题,同时解决单步更新经常没有reward的问题)
6)每C步更新一次Q_hat网络(真实网络),直接将Q网络的参数赋给Q_hat网络。(核心三,解决只用一个Q网络导致收敛不好的问题)
以上就是DQN的一些个人见解。
2 Actor-critic
Actor-critic也是强化学习中一个比较基础的算法,目前很多前沿强化学习算法都是在这个基础上修改的。在介绍Actor-critic前先了解下Policy-based算法。
Policy-based
Q-learing、Sarsa等算法都是利用Q-table得到各个动作的价值,然后根据动作的价值来选取动作(一般来说优先选择动作价值最大的动作),这类算法可以称为Value-based RL。
与value-based算法相对的算法就是Policy-based 算法。Policy-based 算法是回合更新的,在一个回合之后,根据获得的reward,会加大或缩小路径上下次选择的概率。获得reward多的那条路径所对应的节点下次选择的概率会增大,相反如果获得的reward少,相应的节点概率选择变小。policy-based算法其中一个基础算法就是Policy gradients。
我们先看Policy gradients的核心伪代码。
看伪代码可能不好理解,这里我们通俗讲下。Policy-based是回合更新的。一个回合以后会根据reward给路径上的不同动作赋一个权重(也就是伪代码中的vt),当然这个权重会根据离获得权重的位置进行一定的衰减(离获得reward距离越近衰减幅度越小)。然后一定比例放大路径上不同动作在下回合选择的概率。
Actor critic算法合并了以值为基础 (value-based RL,比如 Q learning) 和 以动作概率为基础 (policy-based, 比如 Policy Gradients) 两类强化学习算法.
Actor critic算法主要包括两个模块:actor和critic。Actor其前生就是policygradients(就是基于动作), critic的前生就是Q-learning(就是基于价值)。用一点通俗的话描述这两个模块 [3]:
-
Actor(玩家):为了玩转这个游戏得到尽量高的reward,需要一个策略:输入state,输出action。(可以用神经网络来近似这个函数。剩下的任务就是如何训练神经网络,得更高的reward。这个网络被称为actor)
-
Critic(评委):因为actor是基于策略policy的所以需要critic来计算出对应actor的value来反馈给actor,告诉他表现得好不好。所以就要使用到之前的Q值。(当然这个Q-function所以也可以用神经网络来近似。这个网络被称为critic。)
关于actor-critic的训练可以看下面这个流程图。
1)Actor根据环境(state)输出一个action的概率分布,然后以一定概率选择最终的action。
2)Environment通过选择的action和当前状态更新state,并将reward给critic,critic利用reward、当前状态的评估和上一状态的评估计算td_error。(可以理解critic是一个神经网络,输入状态,输出该状态的value)
3)利用td_error单步更新critic和actor网络。Critic网络为回合更新,actor网络为单步更新。
4)重复1 2 3.
Actor Critic 方法的优点: Actor Critic也属于policy-based算法,Policy Gradient算法是回合更新;而Actor Critic可以进行单步更新, 比传统的Policy Gradient收敛速度要快.
但是Actor critic有个缺点:Actor critic的训练取决于 Critic 的价值判断(计算td_error), 但是 Critic 难收敛, 再加上 Actor 的单步更新, 就更难收敛 [1].为了解决收敛问题, Google Deepmind 提出了Actor Critic 升级版 Deep Deterministic Policy Gradient. 后者融合了 DQN 的优势, 解决了收敛难的问题.
结语
一些基本的强化学习算法就介绍到这,我现在理解的还比较浅薄,只是大概知道了算法如何更新。强化学习算法更底层一些的数学原理来源于马尔可夫决策过程(Markov Decision Processes,MDPs)。目前这部分还没有仔细研究。
参考:
[1] https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/4-1-A-DQN/
[2] https://blog.csdn.net/qq_30615903/article/details/80744083
[3] https://blog.csdn.net/qq_30615903/article/details/80774384
对量化、数据挖掘、深度学习感兴趣的可以关注公众号,本人不定期分享有关这些方面的研究。
个人知乎:
https://www.zhihu.com/people/e-zhe-shi-wo/activities