程序化交易入门(二)强化学习DQN及其由来

本文介绍了强化学习中的DQN(Deep Q-Network)算法,包括其在寻找最佳策略的过程、神经网络作为Actor的作用、Goodness of function的概念以及策略迭代和价值迭代。文章详细探讨了DQN的目标函数、探索与利用的策略,并阐述了Nature DQN的改进,如Double DQN、优先重播和双通道Dueling Network,以解决过度估计问题和提高性能。
摘要由CSDN通过智能技术生成


众所周知,强化学习在程序化量化交易里面已经扮演者愈来愈重要的角色,那么我们可以知道,Google的Alpha Go已经是强化学习中战胜人类的一个重要的 weapon,这里我们不得不提及强化学习,强化学习有以下三种 based的方法,这三种方法分别是 policy-basedvalue-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 π,那么我们的输入输出维度是什么呢?Functioninput就是机器看到的observation,他的output就是machine要采取的action。如果我们的ActorNeural Network,那么我们这个过程就是一个Deep Reinforcement Learning,那么这个过程的observation就是一堆pixel,我们可以将其当成一个vector来进行描述或者是用一个matrix来描述,那么output就是我们的action,如果我们的input是一张image,那么我们的Actor就是CNN,那么我们到底有多少种output方式,那么我们的output就有多少种dimension。如下图打游戏图示所示:
在这里插入图片描述
但是在做Policy Gradient的时候,我们通常会假设Policystochastic,所谓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 rewardR,那么这个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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值