内容纲要

欢迎转载,作者:Ling,注明出处:强化学习教程: 06-Model-Free Control, DQN

 

本章主要介绍

  • DQN

大规模强化学习

到目前为止,我们的value function实际上都是通过建立状态和相应价值得表,通过查表得方式得到。

但是现实中,强化学习状态会非常多,例如

  • 西洋双陆棋戏:10的20次方个状态
  • 围棋: 10的170次方种状态
  • 直升飞机控制:连续的状态空间

大规模强化学习问题

1)我们无法建立这么大得一张表

2)表过大更新会很慢

这样如何得到状态到价值的映射呢?

解决方案:训练一个函数,或者说神经网络解决,也就是找个近似从状态到价值的转换函数

RL_06_001

几种值函数近似的方式

RL_06_002

  • 方式一:输入s,得到对应s的v,需要训练得到w
  • 方式二:输入s和a,得到对应s和a的q,需要训练w
  • 方式三:输入s,得到对应s的各个action的q,需要训练w

在做model free的时候,我们没有Reward,只能用后两种,得到q的方法。

一般第二种稍好

如果我们可以学习到这样的函数,我们就解决了估算问题

训练函数参数的方法

  • 特征的线性组合
  • 神经网络
  • 决策树
  • 近邻算法
  • 傅里叶变换

我们研究前两个

另外根据一次数据量的不同分为

  • 增量:一次用一个样本
  • 批量:一次需要多个样本

增量方法:

目标函数:

RL_06_003

可以理解为神经网络梯度下降算法中的最小二乘,就是真实价值与预测价值差的平方。

我们可以通过批梯度下降和随机梯度下降更新参数w

BGD(批梯度下降),找到局部最优:

RL_06_004

SGD(随机梯度下降),从梯度采样

RL_06_005

增量方法采用SGD

公式形式:

Update=α学习率 * 误差 * 梯度

问题:

真实价值如何得到?

你可以理解为上帝给的,因为我们并不知道,在实际计算过程中,我们用前面章节介绍的

  • MC中的Gt
  • TD(0)中的TD target:Rt+1 + γV (St+1)
  • TD(λ)中的:

RL_06_006

梯度如何求?

  • 特征向量法
  • 神经网络

特征向量法:

可以用特征向量替代,这就是特征向量法:

RL_06_007

所谓特征向量就是用一堆特征表征这个状态

替代之后:

价值函数关于w的函数

RL_06_008

目标函数:

RL_06_009

更新规则:

RL_06_010

很好理解,就是用特征向量替代所有V梯度

MC近似价值函数:Monte-Carlo with Value Function Approximation

RL_06_011

就是将v实际值替换成了Gt,用特征向量替换了梯度

TD近似价值函数:TD Learning with Value Function Approximation

RL_06_012

类似上面替代即可

TD(λ)近似价值函数:TD(λ) with Value Function Approximation

RL_06_013

之前是增量估值算法,将V替换成Q之后,然后加入策略会影响Q的更新,就是增量控制算法

Linear Action-Value Function Approximation

如果是要做到Model-Free,我们知道不能用V,得用Q:上章知识,v需要有Reward和P,需要模型给出

用Q价值函数替代V价值函数

RL_06_014

同理,用特征向量替代梯度,这样我们就得到了Q价值函数更新参数的公式

RL_06_015

然后再将实际Q,替换成MC,TD,TD(λ)中的target

RL_06_016

以上算法也叫:梯度MC, 梯度TD

预测算法收敛性:V值

RL_06_017

RL_06_018

可以看到梯度TD还是有很大优势的

控制算法收敛性:Q值

RL_06_019

以上都是单步更新算法,接下来我们看看批量更新算法。

批方法:需要批量training data用于训练函数

优点:更大程度利用训练数据,sample effective

目标函数:真实值和估计值误差平方和

优化方法: SGD

需要大量样本,才能训练神经网络,所以需要Experience Replay

Experience Replay:大致就是把以前的经验数据保存下来,然后批次采样训练网络,可以更大程度利用数据

批方法估值

基于Experience Replay的SGD

RL_06_020

收集样本,s和v对

利用SGD更新w

批方法控制:

DQN:Experience Replay in Deep Q-Networks (DQN)

RL_06_021

1)这里只考虑了输入s得到q

2)有两个神经网络,net1和net2,对应参数为w1和w2,并且网络结构类似

3)迭代:

  • 初始化: 初始化net1 w1,net2,w2, 初始化所有Reward都是0,到了终点才是1
  • Q估计:输入s2状态,net2给出所有action的q值,这就是q估计
  • Q现实:取action对应q值最大的做为下一个状态s',然后通过net1计算s'所有aciton的额q值,取max,通过q learning求得q现实
  • Net2参数更新:通过Q现实-Q估计误差,不断更新net2的参数
  • Net1参数更新:如此反复,等到一定程度,将net2的参数更新给net1

形式化:

RL_06_022

过程:

  • 用epsilon-greedy policy选择动作
  • (st; at; rt+1, st+1)保存起来,保存到D中,也就是experience replay,为什么要st和st+1,因为q估计要用st,q现实要用st+1
  • 从D中随机批次采样,用于训练,两个netword得到q现实和q估计
  • Q现实用老的网络参数,Q估计用新的网络参数
  • 然后优化目标函数,使得误差最小

和增量控制算法区别:

需要收集一批样本用于训练神经网络,前面方法只用一个样本

target计算法方法不一样,本方法是训练一个神经网络,得到Q值,前面方法是用MC,TD这样的东西替代

结果对比:

RL_06_023

其他方法:

还可以用特征向量替代神经网络

补充:

Double DQN:

  • 初始化: 初始化net1 w1,net2,w2, 初始化所有Reward都是0,到了终点才是1
  • Q估计:输入s2状态,net2给出所有action的q值,这就是q估计
  • Q现实:取action对应q估计值最大的做为下一个状态s',然后通过net2计算s'所有aciton的额q值,取max,通过q learning求得q现实
  • Net2参数更新:通过Q现实-Q估计误差,不断更新net2的参数
  • Net1参数更新:如此反复,等到一定程度,将net2的参数更新给net1

Prioritized Experience Replay DQN

和Double DQN比,主要在选取样本的方法上有区别,为了更快收敛,我们选择误差更大的那些样本会更佳,Prioritized Experience Replay DQN需要按选TD Error排序,选取样本,而Double DQN随机选取样本。为了更快收敛,Prioritized Experience Replay DQN引入了SumTree

Dueling DQN:

和DQN不同之处在于,Q表示成:

RL_06_024

以开车游戏为例,

V为了保证车向前开,并且会转弯,而A保证车可以避开其他车