Q-Learning

2018/03/26 15:58
阅读数 31

一、Q-Learning:

例子:https://www.zhihu.com/question/26408259/answer/123230350

http://ml.cs.tsinghua.edu.cn:5000/demos/flappybird/

以上为Q-Learning的伪代码

 

Q(S,A)可以是一个查找表,也可以是一个神经网络。

其中最重要的公式是:

其中1-alpha是保留多少以前的经验,gamma是对最长期reward进行discount

 (这个公式有四个好处:1、不需要知道状态之间的transition probaility(model free) 2、不需要等到episode结束后才更新Q值(相比于MCTS) 3、收敛到最优解 4、off-policy)

 

二、神经网络的加入:

当输入状态比较大的时候,Q值表就非常的大,所以就只能使用神经网络了。

这时候,就设计Q值网络训练的问题。为了对神经网络进行训练,可以把Q值网络的损失函数设为一个回归问题。

回归问题和神经网络的优势有两点:

1、可以进行神经网络训练,使得庞大的state空间进行压缩。

2、对原始经验的保存变成了网络参数的保存。

 

三、探索:

一般情况下,Q-Learning对自己经常经历的一段路径估计比较准,对于没经常经历的估计不那么准。所以,会出现一种情况就是:在前期Q值估计不准的情况下,对某一本质上很好的决策进行了错误估计,认为这段路径会很差,导致以后选择了一个错误的决策,然后就会一直在这个错误的方向下一直走下去,不会回过头来探索本质上很好的那个决策。

 

所以,一般在前期的时候,我们会进行随机的探索不同的路径,获得一个比较好的初始Q值。

 

四、利用

但是由于状态空间过大,完全随机探索可能出现一个问题:状态空间大,采样不够,Q值估计不准。

而且,其实我们最终关心的只是表现好好的状态及其周边状态的Q值。所以,在随机探索初始化Q值后,我们通过Q值来选取我们关心的状态,加大对我们关心状态的训练。

 

五、replay-memory

我们如果在线训练,可能模拟器非常慢,RL训练需要等待模拟器准备数据。所以我们可以把数据存到replay-memory里面,然后用来训练。

另一个好处就是,在线训练的数据和当前神经网络的参数有很大的联系,导致数据自产自销,数据不够客观,可能最终处于某种恶性循环。

 

六、一个变态的RL任务

 有这样一种RL任务:

1、你只要随机探索,基本上就到不了你最终关心的状态,采样出来的数据对最终关心状态无关。

2、当你不随机探索,由于神经网络没见过好的状态,对好的状态的估值并不好,也不会进入好的状态。

3、很难或者没法进行仿真模拟、回溯等,也就是出现好状态时,很难加大对好状态的采样。

所以,agent会一直无法进入最终关心的状态,也就不会进行相应的数据采样,导致agent收敛到局部最优解,当然这种局部最优解可能是我们完全没法忍受的。我们对于这种任务,我们应该怎么解决?

有人提出了对状态进行reconstruction,就是当状态没怎么见过时,给个较大的reward,这样去帮助agent去进入没见过的状态。

但是,个人觉得这种方法有两个问题:一个是reconstruction的loss是否可靠,能否代表对未见过状态的表示,这个是没办法很好回答的。二个是我们本质上只是想加大进入好状态的概率,而不是进入未知状态的概率,所以这种方法可能最终对实际任务没有太大帮助。

 

那么有什么解决办法呢?主要有一下几点:

1、人为先验知识:对于一个封闭系统来说,如果内部因素全都考虑到了,还是存在问题,就只能依靠外部力量进行解决。

  a、人为选择好的action。对于在某些状态下,如果人类很明确知道某个action会更好,那么我们可以帮助agent进行选择action,以便更多地进入关心的状态。这里不是简单的帮助agent进行人为选择action,真正目的是为了加大好数据的采样量。

  b、监督训练获得更好的feature表示。对于状态空间大的情况,我们通过神经网络对状态进行压缩,希望对坏状态有个相似的feature表示,但是,rl任务并没有很明确的监督信息,feature的表示能力和泛化能力可能很弱,加入监督信号,对feature学习进行一个很好的表示,以便对于好坏状态有更好的表示,同时提高泛化能力。

2、期望于内部pattern:作为机器学习的人员,我们希望找到所有内部系统的自身pattern,所有我们寄希望于这个rl系统还隐藏着未被发现的pattern。

  a、rewards:一个rl任务可能有多种reward,特别是对于复杂的任务,一般都有很多的评价指标,这些评价指标可能隐藏着某种pattern,如何利用其中的pattern?

 

七、RL工作方向

1、并行化,加速采(A3C)

2、multi-reward,处理隐藏的rewards pattern

3、训练方式变化,解决神经网络欠拟合,过拟合,不稳定等问题。(进化策略)

4、连续action?

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部