强化学习之原理详解、算法流程及Python代码
開頭先附上強化學習(reinforcement learning)的學習視頻:https://morvanzhou.github.io/tutorials/machine-learning/reinforcement-learning/,趕緊進行強化學習吧!
1.強化學習就是程序或智能體(agent)通過與環境不斷地進行交互學習一個從環境到動作的映射,學習的目標就是使累計回報最大化。
2.強化學習是一種試錯學習,因其在各種狀態(環境)下需要盡量嘗試所有可以選擇的動作,通過環境給出的反饋(即獎勵)來判斷動作的優劣,最終獲得環境和最優動作的映射關系(即策略)。
馬爾可夫決策過程(MDP)
馬爾可夫決策過程(Markov Decision Process)通常用來描述一個強化學習問題。
智能體agent根據當前對環境的觀察采取動作獲得環境的反饋,并使環境發生改變的循環過程
蒙特卡洛強化學習
1.在現實的強化學習任務中,環境的轉移概率、獎勵函數往往很難得知,甚至很難得知環境中有多少狀態。若學習算法不在依賴于環境建模,則稱為免模型學習,蒙特卡洛強化學習就是其中一種。
2.蒙特卡洛強化學習使用多次采樣,然后求取平均累計獎賞作為期望累計獎賞的近似。
蒙特卡洛強化學習:直接對狀態動作值函數Q(s,a)進行估計,每采樣一條軌跡,就根據軌跡中的所有“狀態-動作”利用下面的公式對來對值函數進行更新。
每次采樣更新完所有的“狀態-動作”對所對應的Q(s,a),就需要更新采樣策略π。但由于策略可能是確定性的,即一個狀態對應一個動作,多次采樣可能獲得相同的采樣軌跡,因此需要借助ε貪心策略:
蒙特卡洛強化學習算法需要采樣一個完整的軌跡來更新值函數,效率較低,此外該算法沒有充分利用強化學習任務的序貫決策結構。
Q-learning算法結合了動態規劃與蒙特卡洛方法的思想,使得學習更加高效。
深度強化學習(DRL)
傳統強化學習:真實環境中的狀態數目過多,求解困難。
深度強化學習:將深度學習和強化學習結合在一起,通過深度神經網絡直接學習環境(或觀察)與狀態動作值函數Q(s,a)之間的映射關系,簡化問題的求解。
Deep Q Network(DQN)
Deep Q Network(DQN):是將神經網略(neural network)和Q-learning結合,利用神經網絡近似模擬函數Q(s,a),輸入是問題的狀態(e.g.,圖形),輸出是每個動作a對應的Q值,然后依據Q值大小選擇對應狀態執行的動作,以完成控制。
自主學習Flappy Bird游戲
深度強化學習
2013年,Deep Mind團隊在NIPS上發表《Playing Atari with Deep Reinforcement Learning》一文,在該文中首次提出Deep Reinforcement Learning一詞,并且提出DQN(Deep Q-Networt)算法,實現了從純圖像輸入完全通過學習來玩Atari游戲。
Flappy Bird自主學習程序基本框架
訓練過程
訓練過程過程主要分為以下三個階段:
1.觀察期(OBSERVE):程序與模擬器進行交互,隨機給出動作,獲取模擬器中的狀態,將狀態轉移過程存放在D(Replay Memory)中;
2.探索期(EXPLORE):程序與模擬器交互的過程中,依據Replay Memory中存儲的歷史信息更新網絡參數,并隨訓練過程降低隨機探索率ε;
3.訓練器(TRAIN):ε已經很小,不再發生改變,網絡參數隨著訓練過程不斷趨于穩定。
1.打開游戲模擬器,不執行跳躍動作,獲取游戲的初始狀態
2.根據ε貪心策略獲得一個動作(由于神經網絡參數也是隨機初始化的,在本階段參數也不會進行更新,所以統稱為隨機動作),并根據迭代次數減小ε的大小
3.由模擬器執行選擇的動作,能夠返回新的狀態和反饋獎勵
4.將上一狀態s,動作a,新狀態s’,反饋r組裝成(s,a,s‘,r)放進Replay Memory中用作以后的參數更新
5.根據新的狀態s‘,根據ε貪心策略選擇下一步執行的動作,周而復始,直至迭代次數到達探索期
探索期與觀察期的唯一區別在于會根據抽樣對網絡參數進行更新。
1.迭代次數達到一定數目,進入探索期,根據當前狀態s,使用ε貪心策略選擇一個動作(可以是隨機動作或者由神經網絡選擇動作),并根據迭代次數減小ε的值
2.由模擬器執行選擇的動作,能夠返回新的狀態和反饋獎勵
3.將上一狀態s,動作a,新狀態s’,反饋r組裝成(s,a,a‘,r)放進Replay Memory中用作參數更新
4.從Replay Memory中抽取一定量的樣本,對神經網絡的參數進行更新
5.根據新的狀態s‘,根據ε貪心策略選擇下一步執行的動作,周而復始,直至迭代次數到達訓練器
相關庫的介紹和安裝
tensorflow庫
TensorFlow是谷歌2015年開源的一個人工智能學習系統。主要目的是方便研究人員開展機器學習和深度神經網絡方面的研究,目前這個系統更具有通用性,也可廣泛用于其他計算領域。
TensorFlow
支持多種前端語言,包括python(python也是tensorflow支持最好的前端語言),因此一般大家利用python實現對tensorflow的調用。
安裝:conda install tensorflow
openCV庫
OpenCV是一個開源的跨平臺的計算機視覺庫,實現了大量的圖像處理和計算機視覺方面的通用算法。
本實驗采用opencv對采集的游戲畫面進行預處理
安裝:Mac+anaconda安裝opencv3非常麻煩,如需安裝請查看我的另一篇文章。
PyGame庫
Pygame是一個跨平臺的模塊,專為電子游戲設計。
Pygame相當于是一款游戲引擎,用戶無需編寫大量的基礎模塊,而只需完成游戲邏輯本身就可以了。
本實驗游戲模擬器采用Pygame實現。
安裝:conda install pygame
tensorflow庫的基本使用
理解TensorFlow
1.使用圖(graph)來表示計算任務;
2.在被稱之為會話(Session)的上下文(context)中執行圖;
3.使用tensor(張量)表示數據;
4.通過變量(variable)維護狀態;
5.使用feed和fetch可以為任意的操作(arbitrary operation)賦值或者從其中獲取數據。
6.TensorFlow是一個編程系統,使用圖來表示計算任務。圖中的節點被稱作op(Operation),op可以獲得0個或多個tensor,產生0個或多個tensor。每個tensor是一個類型化的多維數組。例如:可以將一組圖像集表示成一個四維的浮點數組,四個維度分別是[batch,height,weight,channels]。
7.圖(graph)描述了計算的過程。為了進行計算,圖必須在會話中啟動,會話負責將圖中的op分發到cpu或gpu上進行計算,然后將產生的tensot返回。在python中,tensor就是numpy.ndarray對象。
8.TensorFlow程序通常被組織成兩個階段:構建階段和執行階段。
????????? 構建階段:op的執行順序被描述成一個圖;
?????????? 執行階段:使用會話執行圖中的op
??????????? 例如:通常在構建階段創建一個圖來表示神經網絡,在執行階段反復執行圖中的op訓練? 神經網絡。
9.交互式會話(InteractiveSession):為了方便實用Ipython之類的python交互環境,可以使用交互式會話(interactiveSession)來代替Session,使用類似Tensor.run()和Operation.eval()來代替Session.run(),避免使用一個變量來持有會話。
10.feed操作:
前面的例子中,數據均以變量或常量的形式進行存儲。Tensorflow還提供了Feed機制,該機制可以臨時替代圖中任意操作中的tensor。最常見的用例是使用tf.placeholder()創建占位符,相當于是作為圖中的輸入,然后使用Feed機制向圖中占位符提供數據進行計算,具體使用方法見接下來的樣例。
自主學習flappy bird實例程序編寫
?
轉自:https://www.jianshu.com/p/42507aa63b05
總結
以上是生活随笔為你收集整理的强化学习之原理详解、算法流程及Python代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【机器学习】梯度提升树(GBDT)的原理
- 下一篇: 忏悔书