深入淺出解讀"多巴胺(Dopamine)論文"、環境配置和實例分析
- 2019 年 11 月 20 日
- 筆記
多巴胺:Dopamine

論文的首頁明顯告訴我們,這是一篇Google出的論文(所以值得一讀),該文作者提出了一種新的深度強化學習研究框架: 多巴胺(Dopamine),旨在於豐富DRL的多樣性,該框架是一個開源的,基於tensorflow平台的的最先進的智慧體實現平台,並通過深入研究RL中不同研究目標的分類來補充這一產品。雖然並非詳盡無遺,但分析強調了該領域研究的異質性以及框架的價值。
Introduction
目前很多強化學習的研究主要集中在特定領域的決策,比如視覺識別後的控制(atari)等,由於複雜的相互作用的轉變,為深度RL研究編寫可重複使用的軟體也變得更具挑戰性。首先,寫一個智慧體需要一個architecure,比如用openai的baseline實現DQN,它的智慧體由6個模組組成,其次,現在有很多演算法可供選擇,因此在一個實現中全面實現通常需要犧牲簡單性。 最重要的是深度RL研究的日益多樣化使得很難預見下一個研究項目可能具備的軟體需求。
這篇文章提出的多巴胺的目的是為深度強化學習提供一個基礎研究,它強調的是緊湊,而不是全面,第一個版本由12個python文件,這些為Arcade學習環境提供了最先進的,基於價值的智慧體的測試實現。該程式碼旨在為該領域的新手容易理解,同時為所有智慧體提供互動式筆記型電腦,訓練模型和可下載的訓練數據,以及包括以前發布的學習曲線的源。
同時作者確定了不同的研究目標,並討論了支援這些目標的程式碼的期望:architecture research, comprehensive studies, visualization, algorithmic research, and instruction,並在設計Dopamine時考慮了最後兩個目標,他們的研究只在於在深層RL框架生態系統中扮演著獨特的角色。
深度強化學習的軟體研究
深度學習社區現已確定了許多對其研究目標至關重要的操作:組件模組化,自動區分和可視化等,由於強化學習是一個比較新的領域,導致在對軟體的共識一直很elusive(難懂的;難捉摸的),該文不會詳盡的去解釋,但強調了該研究自然屬性的多樣性。為了能夠對重點突出研究,作者僅從下面兩個方面研究:
- 深度強化學習的基礎研究。
- 應用於或評估模擬環境。
同時,該文的研究環境為:Arcade Learning Environment(該環境是一個為很多研究者提供實現atari遊戲智慧體的簡單的框架:Arcade Learning Environment,
case研究
所謂的架構研究涉及組件之間的交互,包括網路拓撲,以創建深度RL代理。 DQN在使用代理體系結構方面具有創新性,包括目標網路,重放記憶體和Atari特定的預處理。 從那時起,如果沒有預料到代理由多個交互組件組成就變得司空見慣了,通常情況下從以下三個方面著手:
- Algorithmic research 架構研究
- Comprehensive studies
- Visualization
不同目標的不同軟體的研究從下面四個角度開始
- Comprehensive studies
- Architecture research
- Algorithmic research
- Conclusions.
多巴胺(Dopamine)
在多巴胺的設計中,Google 設計它滿足了兩個條件:自給自足且緊湊、可靠且可重複:

自給自足且緊湊可以幫助研究者實現一個簡單的框架,並且可以集中進行演算法研究,同時可靠則保證了實驗、演算法的結果具有trust。
多巴胺的整體結構設計

其中:藍盒子是軟體組件。 黃色框表示組成軟體組件的文件名; 有向箭頭表示類繼承,而括弧中的數字表示非注釋Python行的數量。
- Runner類管理代理和ALE之間的交互(例如,採取步驟和接收觀察)以及簿記(例如,分別通過檢查指針和記錄器進行檢查點和記錄)。
- Checkpointer負責定期保存實驗狀態,使故障後能夠正常恢復,並重新學習重量。
- 記錄器負責將實驗統計(例如,累積的培訓或評估獎勵)保存到磁碟以進行可視化。
- Colab提供互動式筆記型電腦,以便於這些統計數據的可視化。
可靠且可重複:
作者為所有程式碼庫提供了一整套測試,程式碼覆蓋率超過98%。除了幫助確保程式碼的正確性之外,這些測試還提供了另一種形式的文檔,補充了隨框架提供的常規文檔和互動式筆記型電腦。
多巴胺使用gin-config 【config過程】來配置不同的模組。 Gin-config是參數注入的簡單方案,即動態更改方法的默認參數。 在多巴胺中,在單個文件中指定實驗的所有參數。 下面程式碼顯示了默認DQN代理設置的配置示例(附錄D中提供了所有代理的完整gin-config文件)

基準線對比
作者在探索的目的不是提供一組最佳的超參數,而是提供一致的集合作為基準線,同時促進超參數探索的過程。下圖是實驗的數據顯示:

同時作者也將已發布設置的結果與默認設置進行比較(下圖),平均超過5次運行。 在每個遊戲中,已發布和默認設置之間的y-scales是不同的; 這主要是因為默認設置中使用了粘滯action。

重新審視ARCADE學習環境:一個測試案例
Episode終止
當一個人正常停止遊戲時,ALE認為一個episode完成:當他們完成遊戲或者用盡生命時。 將這種終止條件稱為「遊戲結束」。 Mnih等引入了一種稱為生命損失的啟發式方法,當玩家失去生命時,它會在重放記憶中添加人工插曲邊界。 在最近的文獻中已經使用了episode終止的兩種定義。 在多巴胺中運行此實驗包括修改以下gin-config選項:

下圖顯示了兩種情況下報告的性能差異。雖然episode表明,Life Loss啟發式技術可以提高一些簡單遊戲的性能,但是Bellemare等人指出,它阻礙了其他人的表現,特別是因為智慧體無法了解失去生命的真實後果。根據Machado等人的指南,在默認設置中禁用了Life Loss啟發式。

測量訓練數據和總結學習性能
多巴胺支援兩種運行方式:train和train_and_eval。 前者僅測量訓練期間的平均分數,而後者則與評估運行相交學習。

粘性動作影響在智慧體上的性能
原始ALE具有確定性轉換,其獎勵可以記憶行動序列以獲得高分的代理。為緩解此問題,最新版本的ALE實現了粘性操作。粘性動作使用粘性參數ς,這是環境執行代理程式之前操作的概率,而不是代理程式剛剛選擇的那種 – 有效地實現了一種動作形式。 在多巴胺中運行此實驗包括修改以下gin-config選項:

下圖演示了使用或不使用粘性操作運行時性能上的差異。雖然在某些情況下(Rainbow播放SPACE INVADERS)粘性動作似乎可以提高性能,但它們通常會降低性能。同時平均分數學習曲線(rainbow超越DQN); 因此,並根據Machado等人提出的建議,多普胺默認啟用粘滯動作。

環境安裝
Ubuntu
1、設置初始化虛擬環境

這將創建一個名為dopamine-env的目錄,其中包含虛擬環境。 最後一個命令激活環境。
2、將依賴項安裝到多巴胺。如果無法訪問GPU,請在下面的行中將tensorflow-gpu替換為tensorflow(有關詳細資訊,請參閱Tensorflow說明)。

註:在安裝過程中,您可以安全地忽略以下錯誤消息:tensorflow 1.10.1要求numpy <= 1.14.5,> = 1.13.3,但是您將擁有不兼容的numpy 1.15.1。
3、下載多巴胺源文件

Mac OS
同樣的道理,和以上以上的過程一樣,程式碼為:

測試
在獲得源後便是測試初始化可以成功運行,通過以下命令:

標準Atari 2600實驗的切入點是dopamine/atari/train.py。 要運行基本DQN代理,

默認情況下,這將啟動一個持續2億幀的實驗。 命令行介面將輸出有關最新訓練集的統計資訊:

通常情況下,多巴胺通過gin配置是非常簡單的
安裝依賴包
安裝多巴胺的一種簡單的替代方法是作為Python庫:

從root目錄下,通過以下命令測試:

實例創建
在本節中,將演示如何通過繼承其中一個提供的代理來創建新代理。 此程式碼僅用於說明目的。
首先設置默認資訊

繼續開始代部分:

此程式碼段提供了一個互動式顯示,用戶可以根據訓練基準線訓練和可視化代理的性能,如下所示:

註:其中import seabore as sns 是個可視化工具
最終結果如圖:

至此,以上是對多巴胺的部分解讀,關於更多的c51等請自行閱讀和安裝。部分程式碼請學習github源碼,受能力有限,文中難免有錯誤之處,還望大家多提意見、以便做的更好!
參考文獻:
1、DOPAMINE: A RESEARCH FRAMEWORK FOR DEEP REINFORCEMENT LEARNING