程序化交易入门(二)强化学习DQN及其衍生体
众所周知,强化学习在程序化量化交易里面已经扮演者愈来愈重要的角色,那么我们可以知道,Google的Alpha Go已经是强化学习中战胜人类的一个重要的 weapon,这里我们不得不提及强化学习,强化学习有以下三种
based
的方法,这三种方法分别是
policy-based,
value-based以及
model-based的方法,这三种方法分别代表着三种不同的模型,那么google的
Alpha Go正是基于以上这三种方法的融合:
policy-based+value-based+model-based,这三种方法仅仅较适用于围棋。
1. 引入
1.1 Machine Learning在做什么?
Machine Learning就是在寻找一个可以拟合的损失函数,
1.2 DQN在寻找什么?
下面我们以一个简单的DQN的方式来做。
1.2.1 Step1. Neural Network as Actor
Actor就是一个Function,通常我们记为 π \pi π,那么我们的输入输出维度是什么呢?Function的input就是机器看到的observation,他的output就是machine要采取的action。如果我们的Actor是Neural Network,那么我们这个过程就是一个Deep Reinforcement Learning,那么这个过程的observation就是一堆pixel,我们可以将其当成一个vector来进行描述或者是用一个matrix来描述,那么output就是我们的action,如果我们的input是一张image,那么我们的Actor就是CNN,那么我们到底有多少种output方式,那么我们的output就有多少种dimension。如下图打游戏图示所示:
但是在做Policy Gradient的时候,我们通常会假设Policy是stochastic
,所谓stochastic
就是说我们的outputs就是一个几率,如果你的分数是0.7,0.2,0.1,那么就是0.7的几率是left,0.2是right,0.1是fire。那么使用NN做一个action
的好处是什么?
传统就是使用表来进行所有动作的存储,但是ANN就很好的解决了我们这个问题。
1.2.2 Goodness of function
我们要来决定一个Neural Network
的好坏。在传统的监督学习中,我们会给定一个Neural Network一些参数,类似 θ \theta θ,如果输出NN越类似我们的方程,那么我们就说这个网络是拥有越加的表现。
那么对于强化学习来说,我们怎么说其有着更好的表现呢?一个Actor的好坏也是非常的好坏,假设我们现在有一个NN了,那么一个Actor我们就用 π \pi π来表示,这个网络的参数我们使用 θ \theta θ来表示,同样的,我们可以使用s来表示这个网络所看到的observation,定义如下 π θ ( s ) \pi_\theta(s) πθ(s),那么怎么知道我们的actor的表现好坏呢?那么我们就需要使用我们的actor来玩下游戏,假设其做了如下步骤:
- 1.Start with observation s 1 s_1 s1
- 2.Machine decides to take a 1 a_1 a1
- 3.Machine obtains reward r 1 r_1 r1
- 4.Machine sees observation s 2 s_2 s2
- 5.Machine decides to take a 2 a_2 a2
- 6.Machine obtains reward r 2 r_2 r2
- 7.Machine sees observation s 3 s_3 s3
- …
- n.Machine decides to take a T a_T aT
- n+1.Machine obtains reward r T r_T rT
这就是上面的整个过程,那么我们可以将完成整个游戏的total reward是R,那么这个R就是我们在这个episode索要最大化的对象,这个对象我们记为 R t h e t a R_theta Rtheta。但是我们即使采用了相同的对象来玩这个游戏,但是玩这个游戏的时候,也会得到不同的结果,首先Actor如果是stochastic
看到同样的场景也会采取不同的action
,每次得到的 R θ R_\theta Rθ也是不一样,同样的,我们的游戏也是会有一个随机性,那么我们希望做的时候不是去max每次的 R θ R_\theta Rθ,而是每次 R θ ‾ \overline{R_\theta} Rθ,也就是我们的 R θ R_\theta Rθ的一个期望值。我们希望这个期望值越大越好,这里衡量模型的好坏。我们假设一场游戏就是一个 τ \tau τ,那么 τ \tau τ是一个sequence
,这里面包含了observation
,以及看到这个observation
后得到的reward
、还有新的observation
、所采取的action
以及得到的reward
等等,这里组合形成一个sequence
。下面我们定义 τ \tau τ的符号:
τ = ( s 1 , a 1 , r 1 , s 2 , a 2 , r 2 , . . . , s T , a T , r T ) \tau=({s_1,a_1,r_1,s_2,a_2,r_2,...,s_T,a_T,r_T)} τ=(s1,a