机器学习(4)强化学习のQ-Learning

来源:互联网 发布:java utf-8转gbk乱码 编辑:程序博客网 时间:2024/06/03 20:34

Q-learning属于基于价值(value)的单步更新离线学习强化学习算法;

什么是基于价值和单步更新看:

http://blog.csdn.net/ilypl/article/details/78539754


先来看一个场景:

我有一条狗,叫doge

doge一开始不知道在哪里拉粑粑,现在doge有两个选择,一个是到马桶拉,另一个就是在房子里面拉。

在S1状态,doge不知道应该是在马桶(a1)拉粑粑还是在房间(a2)里,所以doge就在房间(a2)里拉粑粑,S1结束;

到了S2状态,doge 又要拉粑粑,然后它还是有两个选择a1,a2,因为没有奖惩,所以doge还是在房间(a2)里拉粑粑;

最后我回家,看到满房间的粑粑,我揍了doge一顿,然后doge知道,房间拉粑粑为负面行为。


Q-learning决策:

假设doge已经知道了行为准测,现在处于S1状态,doge要拉粑粑,现在它有两个选择,a1:去厕所解决,a2:在房间拉;

根据doge的经验,在S1状态下,选择a1去厕所的潜在奖励要比a2房间要高,doge脑里有个Q表格用来装潜在奖励,Q表格有两个参数分别是状态S和行为a;在doge的记忆Q表格中,Q(S1,a1) = 奖励一根骨头(我们用 1来表示),Q(S1,a2) = 揍一顿(用-1来表示)。

doge判断出Q(S1,a1)大于Q(S1,a2),于是选择a1作为S1的选择,S1状态结束;

来到S2状态,doge又要拉粑粑,doge还是有两个选择,重复上述过程,doge在Q表中寻找Q(S2,a1)和Q(S2,a2)的值,比较它们两个的值,然后选择值大者,这就是Q-Learning决策过程;


Q-learning更新:

上图的a1,a2应该互调才适合我们doge的例子!


上述过程,根据Q表估计,S1中a1的值比较大,通过上述决策方法,doge在S1选择a1,并到达S2,更新Q,这时doge还没有做出到哪里拉粑粑的决定,它在想象自己S2做出每种行为,计算哪个结果的Q值更大,doge计算出Q(S2,a1)比Q(S2,a2)要大,因为doge没有完全确定a1是百分百正确的答案,所以在doge的想象中(每一步doge都要先想想,算算哪个划算),先把Q(S2,a1)乘于一个衰减值gamma(小于1,大于0),然后加上到达S2的奖励 r(就是结束S1获取的奖励),然后doge把r 加上想象的Q(S2,a1)作为一个真实值,doge在S1没做出决定在哪里拉粑粑时也先对Q(S1,a1)想象过,doge在S1时候的想象就称为Q(S1,a1)估计值,有了真实值和估计值,就可以对Q表进行更新,两个值的差值乘于一个学习效率alpha


Q-Learning算法:


这一张图概括了我们之前所有的内容. 这也是 Q learning 的算法, 每次更新我们都用到了 Q 现实和 Q 估计, 而且 Q learning 的迷人之处就是 在 Q(s1, a1) 现实 中, 也包含了一个 Q(s2) 的最大估计值, 将对下一步的衰减的最大估计和当前所得到的奖励当成这一步的现实, 很奇妙吧. 最后我们来说说这套算法中一些参数的意义. Epsilon greedy 是用在决策上的一种策略, 比如 epsilon = 0.9 时, 就说明有90% 的情况我会按照 Q 表的最优值选择行为, 10% 的时间使用随机选行为. alpha是学习率, 来决定这次的误差有多少是要被学习的, alpha是一个小于1 的数. gamma 是对未来 reward 的衰减值.



Q-learning DEMO:

现在我们用Q-Learning写一个迷宫寻路的demo;

python版,用莫烦大佬的代码

https://gitee.com/CCHChenChangHong/JiQiXueXisample/tree/master/Q-Learning


unity版本:

web演示:http://awjuliani.github.io/GridGL/

项目:https://github.com/Unity-Technologies/Q-GridWorld


我公众号















阅读全文
0 0