强化学习 - Q-learning Sarsa 和 DQN 的理解

Posted 张 永 一个梦想自由的程序员

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了强化学习 - Q-learning Sarsa 和 DQN 的理解相关的知识,希望对你有一定的参考价值。

本文用于基本入门理解。

 

强化学习的基本理论 : R, S, A 这些就不说了。 
先设想两个场景: 

一。 1个 5x5 的 格子图, 里面有一个目标点,  2个死亡点
二。 一个迷宫,   一个出发点,  3处 分叉点, 5个死角, 1条活路

Q-learning 的概念 其实就是一个算法, 数学的,或者软件程序的算法而已。   
对于这种 死的(固定的游戏), 我个人觉得其实就是个穷举算法而已。 

 Q-learning  步骤:
场景一:
假设前提: 
成功的路  A1, A2, ..... An   ,   A-succ
失败的路 A1, B2, ..... Bn   ,   A-Fail
失败的路 A1, C3, ..... Cn   ,   B-Fail
最后成功后, 给个好处 R  = 1, 失败,给个R = -1  

1. 先随机走, 走出三条路来, A1 -- >  A-succ    , A1 -- >  A-Fail,  A1 -- >  B-Fail
2. 走对的路, 最后一个点 An  = 1,  Bn = -1, Cn = -1 ;   实际上是 x 参数(0.90   自定义)
3. 接下,继续走, 走出 An-1   Bn-1,     
3. 接下,继续走, 走出 An-2   Bn-2,     
3. 接下,继续走, 走出 An-3   Bn-3,     
3. 接下,继续走, 走出 An-4  Bn-4,     

4.最后回到 A1,  发现, A1, 向上走 是 0.99, 向右走势 0.10, 向下走势 - 0.50

这样就得到了一个完整的表格, 叫 Q-table,   占在哪个位置,往哪个方向走。 更容达到目标。

总结:  Q-learning  其实是个很 low 的算法, 用谚语说就是:一回生,二回熟。

场景二其实是一样的问题: 
拐角处才有选择, 非拐角处过滤掉。 
个人觉得,用Q-learning 做迷宫, 还不如用 右手法则走迷宫;  反正电脑是傻的, 能达到目标就好。

更新公式:

q_target = r + self.gamma * self.q_table.ix[s_, :].max()   
self.q_table.ix[s, a] += self.lr * (q_target - q_predict)  
  
Sarsa   与Q-learning  的区别仅仅在于,  更新Q-table 表里的某一项的时候, 是先走, 还是先计算更新而已。 没有大的区别。

再说 DQN :
DQN   在原先的Q-learning 上做了几个处理:
1. 在选择Action 的时候, 不是用    values.max;  而是用  predict().max
2. 在更新的时候, 不是更新 Q-learning 里的值, 而是通过训练 定量的数据minbatch , 来更新网络的 weights 。 
更新了 weights , 其实就是变相更新 values.max 的计算方式; 也就确定了  Action 的选择。


个人总结:
对于走宫格这类问题,  强化的概念反应在, 随机走路后, 成功的路多走走。   逐步稳定固化。
迷宫 虽小, 可以用程序暴力解决(穷举), 但是里面包含的思维方式,值得重视。 这样可以拓展
到规模很大的计算上来, 可以加速成效。   但是用一维  4 dim 的(小数据)数据,去训练神经网络
感觉是大炮打蚊子。 




 

以上是关于强化学习 - Q-learning Sarsa 和 DQN 的理解的主要内容,如果未能解决你的问题,请参考以下文章

强化学习笔记:Sarsa 与 Sarsa(lambda)

强化学习中,Q-Learning与Sarsa的差别有多大?

强化学习中,Q-Learning与Sarsa的差别有多大?

强化学习中,Q-Learning与Sarsa的差别有多大?

强化学习 - Q-learning Sarsa 和 DQN 的理解

强化学习 5 —— SARSA 和 Q-Learning算法代码实现