强化学习教程: 06-Model-Free Control, DQN
欢迎转载,作者:Ling,注明出处:强化学习教程: 06-Model-Free Control, DQN
本章主要介绍
- DQN
大规模强化学习:
到目前为止,我们的value function实际上都是通过建立状态和相应价值得表,通过查表得方式得到。
但是现实中,强化学习状态会非常多,例如
- 西洋双陆棋戏:10的20次方个状态
- 围棋: 10的170次方种状态
- 直升飞机控制:连续的状态空间
大规模强化学习问题:
1)我们无法建立这么大得一张表
2)表过大更新会很慢
这样如何得到状态到价值的映射呢?
解决方案:训练一个函数,或者说神经网络解决,也就是找个近似从状态到价值的转换函数
几种值函数近似的方式
- 方式一:输入s,得到对应s的v,需要训练得到w
- 方式二:输入s和a,得到对应s和a的q,需要训练w
- 方式三:输入s,得到对应s的各个action的q,需要训练w
在做model free的时候,我们没有Reward,只能用后两种,得到q的方法。
一般第二种稍好
如果我们可以学习到这样的函数,我们就解决了估算问题
训练函数参数的方法:
- 特征的线性组合
- 神经网络
- 决策树
- 近邻算法
- 傅里叶变换
- …
我们研究前两个
另外根据一次数据量的不同分为:
- 增量:一次用一个样本
- 批量:一次需要多个样本
增量方法:
目标函数:
可以理解为神经网络梯度下降算法中的最小二乘,就是真实价值与预测价值差的平方。
我们可以通过批梯度下降和随机梯度下降更新参数w
BGD(批梯度下降),找到局部最优:
SGD(随机梯度下降),从梯度采样
增量方法采用SGD
公式形式:
Update=α学习率 * 误差 * 梯度
问题:
真实价值如何得到?
你可以理解为上帝给的,因为我们并不知道,在实际计算过程中,我们用前面章节介绍的
- MC中的Gt
- TD(0)中的TD target:Rt+1 + γV (St+1)
- TD(λ)中的:
梯度如何求?
- 特征向量法
- 神经网络
特征向量法:
可以用特征向量替代,这就是特征向量法:
所谓特征向量就是用一堆特征表征这个状态
替代之后:
价值函数:关于w的函数
目标函数:
更新规则:
很好理解,就是用特征向量替代所有V梯度
MC近似价值函数:Monte-Carlo with Value Function Approximation
就是将v实际值替换成了Gt,用特征向量替换了梯度
TD近似价值函数:TD Learning with Value Function Approximation
类似上面替代即可
TD(λ)近似价值函数:TD(λ) with Value Function Approximation
之前是增量估值算法,将V替换成Q之后,然后加入策略会影响Q的更新,就是增量控制算法
Linear Action-Value Function Approximation:
如果是要做到Model-Free,我们知道不能用V,得用Q:上章知识,v需要有Reward和P,需要模型给出
用Q价值函数替代V价值函数
同理,用特征向量替代梯度,这样我们就得到了Q价值函数更新参数的公式
然后再将实际Q,替换成MC,TD,TD(λ)中的target
以上算法也叫:梯度MC, 梯度TD
预测算法收敛性:V值
可以看到梯度TD还是有很大优势的
控制算法收敛性:Q值
以上都是单步更新算法,接下来我们看看批量更新算法。
批方法:需要批量training data用于训练函数
优点:更大程度利用训练数据,sample effective
目标函数:真实值和估计值误差平方和
优化方法: SGD
需要大量样本,才能训练神经网络,所以需要Experience Replay
Experience Replay:大致就是把以前的经验数据保存下来,然后批次采样训练网络,可以更大程度利用数据
批方法估值:
基于Experience Replay的SGD:
收集样本,s和v对
利用SGD更新w
批方法控制:
DQN:Experience Replay in Deep Q-Networks (DQN)
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
形式化:
过程:
- 用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这样的东西替代
结果对比:
其他方法:
还可以用特征向量替代神经网络
补充:
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表示成:
以开车游戏为例,
V为了保证车向前开,并且会转弯,而A保证车可以避开其他车
留言