強化學習 - 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 的(小數據)數據,去訓練神經網絡
感覺是大炮打蚊子。 




 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM