1. 程式人生 > >深度強化學習 Deep Reinforcement Learning 學習整理

深度強化學習 Deep Reinforcement Learning 學習整理

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow

也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!

                這學期的一門機器學習課程中突發奇想,既然卷積神經網路可以識別一副圖片,解決分類問題,那如果用神經網路去控制‘自動駕駛’,在一個虛擬的環境中不停的給網路輸入車周圍環境的圖片,讓它去選擇前後左右中的一個操作,並給予適當的反饋,是否能夠把‘駕駛問題’,轉化為分類的問題,用神經網路解決呢。

和經典的強化學習 Reinforcement Learning 最大的區別是,它將直接處理畫素級的超高維度raw image state input, 而非事先人為的抽象將狀態抽象為低維度state。更加貼近現實的狀況。

趕緊趁著課程專案的機會,試試這個想法。

回去一做文獻查閱,一看發現,唉?已經有很成熟的一個領域叫做 Deep Reinforcement Learning 在用非常類似且完備的方法去這麼做了,而且創始還是由Deepmind公司的人開始做的。Deepmind最出名的就是Alpha Go了,在這之前他們用Deep Q Learning 來玩 Atari 2600遊戲,玩的比人還要好,非常有意思。 看來‘創新’失敗,不過花了一學期利用課程專案的機會好好學了學這個領域也是非常有收貨。趁著聖誕假期記錄下來,分享心得給大家,也給自己一個回顧。

Deep Reinforcement Learning 最初始的成功演算法莫屬 Deep Q Learning. 這個演算法可以通過直接觀察 Atari 2600的遊戲畫面和得分資訊,自主的學會玩遊戲,並且一個演算法對幾乎所有的遊戲通用,非常強大,論文發表在了Nature上。

  • Q Learning

在瞭解 Deep Q Learning 之前,先來了解下他的鼻祖 Q Learning。這也是一個在強化學習領域非常經典的演算法。

(推薦閱讀David Silver的強化學習課程 UCL Course on RL

在這兒我們以賽車遊戲為例子來說理論上如何應用Q Learning解決玩賽車遊戲的。

先解釋一些符號表示的意義,接下來會在整篇中用到:

  • State s: 在每一個時間節點,agent(車) 所處的環境的表示即為State,例如整個遊戲畫面,或者已經抽象為位置,方向,障礙物位置等的資訊。
  • Action a: 在每一個 state 中,agent 可以採取的動作即為Action. 例如前,後,左,右,剎車,油門。每採取一個 action, agent 將相應會到下一個 state (可以理解為車往前開了,環境就相應變化了)。
  • Reward r每到一個state,agent 就有可能會收到一個 reward 反饋,例如撞了牆就會收到一個負的反饋,而如果順利到達終點就會收到一個正的反饋
  • Policy P:如何選擇動作的策略,我們希望能夠學習到一個策略可以讓 agent 得到最大的累積反饋。

一輪遊戲可以被定義為一個馬爾可夫決策過程 (MDPs), 反覆在 state, action reward, state ... 之間轉換直到遊戲結束


我們的目標是學會一個好的策略,我們在這兒使用discounted future reward R,discount rate為\gamma。在一個 state 例如s_0中,總計反饋可以這樣計算:

我們希望我們的車能夠總是選擇一個能得到最大反饋R的動作。如果我們知道每個動作相對應的R,那我們只要選擇最大的那個就可以了,可事實是在每個狀態中,每個動作所對應的R並不是容易得到的。

在Q Learning中,我們定義了一個Q函式 Q(s,a)去表示在狀態 s 中 採取動作 a 能夠得到的最大R,在 Bell equation的幫助下,我們可以通過迭代的方法不停地更新Q值。

如果我們的Q函式足夠準確,並且環境是確定的,我們只需要採取選擇最大Q值動作的策略即可。

在傳統的Q Learning中,Q值被儲存在一個Q表格中,想象一個表格行為所有可能的 state 列為所有可能的 action。 這個方法可以很好的解決一些問題,尤其是 state 並不多,比如可以用幾個量來表示的時候。但是在現實中,我們經常要用一些 raw image 來作為 state 的表示,一張10 × 10 畫素 8 位的灰度影象就會有256^{100}個不同 state, 我們不可能建立如此大的一個Q table,這也導致了Q Learning 很難被應用到現實問題中去.


  • Deep Q Learning

那沒法建立這麼大的Q table 怎麼辦? 現在該是 Deep Q Learning登場的時候了。我們知道神經網路Neural Network可以很好對圖片提取特徵資訊,進行抽象,分類等。那能否用Neural Network進行 Q 函式的模擬,讓它去學習一副圖片 state 所對應的 Q 值呢?

答案當然是可以的啊,不然我就不寫了。XD

這個一個網路玩通 Atari 2600遊戲,驚動Nature的方法就用Neural network 代替了Q table.

Human-level control through deep reinforcement learning

在用模擬器不停地模擬採取各種動作,收到各種反饋,再用 Bell equation 不停的訓練 Q Network,並且得到一個能相對準確的估計Q值的網路以後。

我們只要在給定Q值的情況下選擇相應的策略即可,比如貪心策略:

或者其他的廣義上貪心策略,比如\epsilon貪心策略或者 log概率搜尋,去更好的探索整個問題,防止被困在一個區域性最優中。

  • Policy Gradient

Deep Q Learning的思維還是非常受Q Learning影響,基本的框架依然是Q Learning只是用神經網路去代替了Q Table,那還有一種更加 End to End的方法,叫做Policy Gradient。和 Deep Q Learning 用Q網路去估計Q 表然後在規定一種策略去依據Q值採取行動不同,Policy Gradient直的策略網路直接輸出的就是策略,比如採取每一種行動的概率(對於離散控制問題),或者每一個動作的值(對於連續控制問題)。

Policy Gradient 相對於 Deep Q Learning有兩個主要優點,

一來是這樣更加的 End to End,不用借用強化學習的理論框架。

二來是這樣既可以通過直接輸出動作相應的連續量處理連續的控制量(比如對於汽車來說,油門的力度,剎車力度,轉向角度),而用通過Q值選動作的方法則無法處理連續量。

在 Policy Gradient 中我們希望學會一個策略能夠達到最大的期望回饋。用\pi_\theta(s)表示策略\theta表示策略網路的weights,通過學習不斷更新。目標函式可以表示為J(\theta) = E_{\pi(\theta)}[r]。David Silver在RL課程中為我們推導它對\theta的導數:

由此導數,我們可以把每輪的折扣回饋v_t看做該state真實價值G_t的無偏估計。利用Gradient ascent的方法去, \alpha的 learning rate,不停地更新\theta訓練一個能夠達到最大期望回饋的策略網路。


  • Deep Deterministic Policy Gradient

Policy Gradient 聽起來很美好是不是,但是呢,試試就發現,它基本沒法學會任何東西啊!低配乞丐版的 Policy Gradient 理論上一切都好,但是實踐中會有很多致命的問題讓它很難收斂,例如:

1. 反饋分配,反饋在大多時候都是不存在的,比如賽車遊戲,只有遊戲結束,例如到達終點或者撞牆而亡的時候才收到反饋,那如何將反饋很好的和之前進行的一系列策略和動作聯絡到一起去是一個很大的問題。

2. 我們的演算法有一個內在的假設,假設所有的抽樣都是獨立,並且處於相同分佈的(independently and identically distributed, iid ), 但是實際上,在遊戲進行的過程中,同一時間段前後的抽樣是明顯具有相關性的,這個iid假設並不成立,也就會影響到學習的效果。

3. 在我們通過獲取反饋,折扣,然後TD來更新Q值的方法,或者直接估計策略的方法中,這些反饋訊號都有非常多的噪聲,這些噪聲可能會讓整個網路很難收斂,甚至很容易發散。

我在嘗試的過程中也確實遇到了基本所有的這些問題,經常怎麼訓練都沒法看到整個網路開始收斂,直到發現這個更加高階的方法DDPG:Continuous control with deep reinforcement learning

在這個方法中,除了有一個動作網路 Actor Network 用於直接估計動作之外,還有一個校正網路 Critic Network 用來估計Q值,其中 Actor Network 就像低配版 Policy Gradient中的 Policy Network,輸入State,給出動作值 Actions。而 Critic Network 則在輸入 State 的同時還輸入由Actor Network 產生的 Actions,給出相應的 Q 值,並不斷的用 bellman equation來進行更新。Actor Network 則是從Critic Network 對應 Actions 輸入計算出的導數來進行更新。

用上面文章中的定義,動作方程 actor function 表示為\mu (s|\theta^\mu), 校正方程 critic function 表示為Q(s,a|\theta^Q), Cost function J 對於\theta的導數為:

這個演算法將對動作的Q值估計和策略估計給分離,讓 agent 能夠在探索更多的同時保持對一個確定策略的學習,讓整個網路學習變得更容易。

除了將 Actor Network 和 Critic Network 分離以外,以下的一些小技巧也能更有利於網路的收斂(結果來看,這些小技巧才是重點……)。

Replay Buffer:這是一個近乎於無限大的快取,每次進行動作以後得到的 狀態-動作-反饋- 新狀態(s_t, a_t, r_t,  s_{t+1})都會被儲存到這個快取中去,不同於之前的方法直接拿遊戲進行過程中得到的 (s_t, a_t, r_t,  s_{t+1}) 來進行訓練,採用了Replay Buffer 以後,訓練採用的 sample 則從這個快取中隨機抽樣,通過這樣的方法,理論上可以打破抽樣直接的相關性,解決iid假設不成立的困擾

Target Network: 在訓練過程中,由於環境是相對混沌的,用於更新Q網路的反饋具有很大的噪聲,直接訓練一個網路會非常容易讓它發散而非收斂。因此,在DDPG的文章當中,有一種叫做目標網路Target Network的方法,建立Actor和Critic網路的副本\mu'(s|\theta^{\mu'})Q'(s,a|\theta^{Q'})來計算目標值,然後以\tau的比例緩慢的跟隨原網路更新\tau\theta'\leftarrow \tau\theta+(1-\tau)\theta'。如此一來,目標值就會相對變得穩定許多,非常有利於學習的效果。

  • 虛擬碼

講了那麼多昏昏欲睡的廢話,現在直接貼上虛擬碼吧!

低配乞丐版 Policy Gradient

高配 Deep Deterministic Policy Gradient


  • 訓練結果

對於不同的遊戲環境,訓練結果也不盡相同,在經過一定時間的訓練以後,一般都能看到初步的收斂,但是真正的收斂到一個接近最優的位置可能會需要好幾天的訓練時間。(基於Tensorflow,辣雞GPU加速)

在尋找環境的過程中不得不提一下 OpenAI Gym.這個由 Elon Musk 贊助的非盈利性平臺,提供了上百個遊戲環境,搭建了一個訓練General AI的平臺,所有的遊戲有統一的介面使用非常方便。

CartPole: 最簡單的情況,這個控制木棍不倒下的問題應該是最經典的RL控制問題,由於相應的 State 和Action 維度很低因此也非常容易完成。我們使用了DDPG,在訓練中記錄了Q估計的最大值,代表了網路認為能夠達到的最大收貨。以及實際的 Reward,儘管非常嘈雜,但是依然可以明顯的看到正在收斂。從遊戲的視訊來看,小木棍在後期確實非常穩定不容易倒下。




CarRacing: 相比於控制小木棍,這個控制小車的遊戲相應的就困難很多,在這裡並沒有明確的抽象好了的state,需要直接接受畫面作為state。目前這個遊戲在OpenAI Gym中還沒人完成(他們定義了達成一定的反饋才算做完成),經過長時間的除錯和訓練,我們讓這個遊戲的網路開始收斂,由於時間太長並且我們自己做了很多限制(比如每局最大步數)以加快訓練速度,我們最終也沒完成OpenAI Gym的要求,但是依然可以看到DDPG正在學到一些東西。有興趣的朋友可以再研究研究。




  • 閱讀材料

這些材料包括一些網頁和部落格都對學習Deep Reinforcement Learning 非常有幫助! 祝大家RL的愉快!

[1] Andrej Karpathy. "Deep Reinforcement Learning: Pong from Pixels" http://karpathy.github.io/2016/05/31/rl/[2] Mnih, Volodymyr, et al. "Human-level control through deep reinforcement learning" Nature  518.7540 (2015)[3] Lever, Guy. "Deterministic policy gradient algorithms." (2014).[4] Patrick Emami. "Deep Deterministic Policy Gradients in TensorFlow" http://pemami4911.github.io/blog/2016/08/21/ddpg-rl.html#References[5] Tambet Matiisen: “Guest Post (Part I): Demystifying Deep Reinforcement Learning” : https://www.nervanasys.com/demystifying-deep-reinforcement-learning/[6] Lillicrap, Timothy P., et al. "Continuous control with deep reinforcement learning." arXiv preprint  arXiv:1509.02971 (2015).[7] Heess, Nicolas, et al. "Learning continuous control policies by stochastic value gradients." Advances in Neural Information Processing Systems. 2015.[8] Mnih, Volodymyr, et al. "Asynchronous methods for deep reinforcement learning." arXiv preprint arXiv:1602.01783 (2016).[9] David Silver. Reinforcement learning Course: http://www0.cs.ucl.ac.uk/staff/D.Silver/web/Teaching.html[10] OpenAI Gym blog: https://gym.openai.com/docs/rl[11] Dulac-Arnold, Gabriel, et al. "Deep Reinforcement Learning in Large Discrete Action Spaces."[12] Mnih, Volodymyr, et al. "Asynchronous methods for deep reinforcement learning." arXiv preprint arXiv:1602.01783 (2016).[13] Yu, April, Raphael Palefsky-Smith, and Rishi Bedi. "Deep Reinforcement Learning for Simulated Autonomous Vehicle Control."
深度學習(Deep Learning) 強化學習 (Reinforcement Learning)
           

給我老師的人工智慧教程打call!http://blog.csdn.net/jiangjunshow

這裡寫圖片描述