OpenAI基準DQN及三個變體:最佳實踐確保DQN正確性
選自Open AI Blog
機器之心編譯
參與:黃小天、微胖
我們開源了 OpenAI 基準(https://github.com/openai/baselines),努力再現與已發表論文成績相當的強化學習演算法。接下來幾個月,我們將發布演算法;今天發布的是 DQN 和它的三個變體。
重現強化學習結果非常複雜:性能非常嘈雜,演算法有很多活動部分,因此會有微妙漏洞,而且很多論文都沒有報告所有必要的技巧。通過發布正確的實現(Know-good)(以及創造這些的最佳實踐),我們希望確保強化學習的顯著優勢與現有演算法的錯誤或未調試版本的比較結果絕對無關。
強化學習演算法的正確實現正面臨著挑戰;好結果通常只來自對貌似不重要的漏洞的修復。本文包含一些修改強化學習演算法實現的最佳實踐方法以及 DQN 發布的一些細節內容。
查看代碼:https://github.com/openai/baselines
最佳實踐
與隨機基準比較:在下面的視頻中,在遊戲 H.E.R.O 中,智能體的行動是隨機的;如果在訓練早期看到這個,很容易以為智能體正在學習。因此,你要始終證實你的智能體的表現勝過隨機智能體。
警惕不可破解(non-breaking )的漏洞:當研究了一個包含 10 個流行強化學習演算法再實現的樣本之後,我們注意到其中 6 個含有微妙的漏洞,由社區成員發現並經作者確認。這些漏洞包括忽略了一些樣本梯度或錯誤實現因果卷積的輕微漏洞,也有嚴重漏洞,比如報告的得分比真實結果更高。
像你的智能體一樣看世界:與大多數深度學習方法一樣,對於 DQN,我們傾向於將環境的圖像轉換為灰度,以減少訓練過程中所需的計算量。這又會帶來這方面的問題:在 Seaquest 運行 DQN 演算法時,我們注意到我們的部署表現很差。檢查環境時,我們找到了原因——就像這張圖片顯示的,後處理過的(post-processed)圖像不包含魚。
把屏幕圖像轉化為灰度時,我們錯誤地校準了綠色值係數,導致了魚的消失。注意到這個錯誤後,我們調整了顏色值,演算法又能看到魚了。
為了未來調試這樣的問題,Gym 現在包含了一個 play 功能,研究人員就能像智能體一樣,很容易看到相同的觀察結果。
修復漏洞,然後是超參:修復漏洞後,開始調校超參。最終我們發現:為控制探索率(exploration rate)的超參 epsilon 設定退火程序顯著影響了性能,最後我們將這個超參在頭一百萬步後降低到 0.1,接下來的 2400 萬步後減低到 0.01。如果實踐中有漏洞,我們可能會想出不同的超參設定來解決我們還沒診斷出來的問題。
再檢查一遍論文解釋:在 DQN 的那篇《自然》論文中,作者寫道「我們也發現這有助於「從更新中剪輯誤差項至 -1 到 1 之間。」這一表述有兩種解釋方法:計算梯度時,剪輯物體,或者剪輯乘法項。前者看起來更加自然些,不過轉換(tanstitions)時,梯度會為零還帶有高度誤差,性能也是次優的,就像我們在 DQN 實現中發現的。後一個解釋是對的,也有簡單的數學解釋——Huber Loss。通過檢查符合預期的梯度,你可以找到類似這些的漏洞。在 TensorFlow 中使用 compute_gradients (https://www.tensorflow.org/api_docs/python/tf/train/GradientDescentOptimizer#compute_gradients),檢查符合預期的梯度很簡單。
多次瀏覽代碼,然後考慮每行代碼可能有什麼問題,我們找到了這篇博文中提到的大多數漏洞。雖然有點事後諸葛,但是,即使是經驗豐富的研究人員也容易低估一個實現中需要過多少次代碼才能發現所有漏洞。
Deep Q-Learning
我們用的是 Python 3 和 TensorFlow。這次發布包括:
DQN:這個強化學習演算法可以將 Q-Learning 和深度神經網路結合起來,讓強化學習在複雜、高維環境中工作,比如遊戲或者機器人技術。
Doubel Q Learning:有時,現有 DQN 演算法容易過高評估與特定行動有關的值,糾正這個問題。
Prioritized Replay (https://arxiv.org/abs/1511.05952):通過學習回放內存,將 DQN 回放函數的經驗擴展到真實回報顯著不同於預測回報的地方,讓智能體自己調整對不正確假設的響應。
Dueling DQN: 神經網路一分為二,一個學習評估每個時間步的值,另一個計算每一個步驟的潛在優勢,然後結合成一個單獨的 action-advantage Q 函數。
啟動時,運行:
pip install baselines
# Train model and save the results to cartpole_model.pkl
python -m baselines.deepq.experiments.train_cartpole
# Load the model saved in cartpole_model.pkl and visualize the learned policy
python -m baselines.deepq.experiments.enjoy_cartpole
我們也提供了訓練的智能體,運行方式如下:
python -m baselines.deepq.experiments.atari.download_model --blob model-atari-prior-duel-breakout-1 --model-dir /tmp/models
python -m baselines.deepq.experiments.atari.enjoy --model-dir /tmp/models/model-atari-prior-duel-breakout-1 --env Breakout --dueling
基準
我們還有一個 iPython notebook,用來展示 DQN 部署在遊戲 Atari 上 的表現。各位可以比較一下不同演算法的表現。帶有 Prioritized Replay( 黃色)的 Dueling Double Q learning , 帶有 Prioritized Replay(藍色)的 Double Q learning,Dueling Double Q Learning(綠色)以及 Double Q learning(紅色)。


※柯潔第二局投子認負,專訪開發者導師Martin Müller
※柯潔第二局投子認負,獨家專訪AlphaGo開發者導師Martin Müller
※PHP和Python如何選擇?或許你應該考慮一下這三個問題
※融到 3.8 億的依圖,正在人工智慧醫療領域做什麼?
TAG:機器之心 |
※17種GAN變體的Keras實現請收好
※瑜伽人魚式(Mermaid Pose)詳解及 5個 變體
※淺析用於挖掘虛擬幣的惡意軟體變體CoinMiner-FOZU!
※一文簡述ResNet及其多種變體
※硬體資訊:其實這是為了幫助AMD!Intel修復幽靈熔斷變體4性能將損失最多8%
※71大師神奇不在 NB多變體系碾壓Mineski
※針對Sofacy組織使用Go語言開發的新Zebrocy變體分析
※為什麼MobileNet及其變體如此之快?
※虛假殺毒軟體竊取設備存儲信息,竟是兩種 Android RAT 變體
※Playarts改變體版本鐳射眼新品
※如何設置Group-by產品(變體)?
※亞馬遜ASIN變體違規被關店?亞馬遜ASIN變體合規守則(附測試)
※曠視提出One-Shot模型搜索框架的新變體
※Science:我國科學家揭示人IgG1的一種常見變體增強自身免疫反應
※一文看懂.NET的各種變體
※《真人快打11》新角色Cetrion能力曝光 排位模式可用官方變體角色
※亞馬遜基礎知識:亞馬遜ASIN&重複上架&濫用變體含義及內容
※基因編輯工具SpCas9變體作用機制揭示
※微軟和谷歌發現「Specter」漏洞新變體
※微軟為Win10發布幽靈漏洞變體4補丁:Intel性能又損失