入門必看 | 深度Q-learning簡介【RL系列】

2021-02-13 機器學習算法與Python學習

下載方式

方式一

公眾號後天回復「20180803」

作者 | Robbie Allen

編譯 | 專知

整理 | Sanglei, Shengsheng

添加微信:MLAPython

(姓名-單位-方向)

即可加入機器學習交流群

 今天,我們將構建一個深度Q網絡,為環境中的agent實現一個可以獲取環境狀態信息以及近似Q-value的神經網絡。

        多虧這個模型,我們才可以使用agent打Doom遊戲。

在這篇文章中,你將學到:

在Q-learning中加入「Deep」

我們基於Q-learning方法構建了一個可以玩Frozen Lake遊戲的agent。當時實現了Q-learing方法並可以更新Q-table。以此表作為「備忘錄」來幫助我們找到當給定環境狀態時,在未來獲得最佳獎勵的行為。這是一個好策略,但卻擴展性很低。

今天,我們將創建一個可以玩Doom的agent。Doom內的環境非常巨大(百萬級的狀態集)。創建Q-table並更新它們非常不易。最好的做法是,構建一個神經網絡,以近似得出各個狀態下行為的Q-values。

如何令深度Q學習工作呢?

這看起來非常複雜,但我們將一步一步完成解釋。我們的深度Q神經網絡的每次輸入是4幀圖片,輸出為各環境下的每個可選行為的Q-values向量。我們需要找到向量中最大的Q-value,以幫我們做出最好的行為決策。

開始,agent的錯誤很多,但一段時間後,就可以將每幀畫面(環境)與最好的行為關聯起來


預處理部分

預處理是非常重要的一步,我們希望減少狀態的複雜度,以幫助減少訓練過程所需的計算時間。

首先,我們將每幀圖像轉換為灰度圖,因為在我們的例子中,色彩並沒有提供很多的重要信息。之後,我們將每幀圖片切分,在例子中,屋頂的價值並不大。最後,減少幀的大小,並將每四幀分為一組。

Temporal limitation問題

關於這個問題,Arthur Juliani在他的文章中給出了詳細的解釋。他提出了一個想法,通過LSTM神經網絡解決這一問題。但是,我認為對於初學者來說,將多個幀分成一組的方法更加合適。

你也許會問,為什麼需要將每幀圖片分為一組?這是由於可以幫我們解決temporal limitation問題。具體例子如下,在Pong遊戲中,當你看到這一幀:

你能告訴我這個球會往哪去嗎?當然不行,因為只有一幀圖片是無法做出判斷的。但是如果增加幾幀信息,就可以很清晰的知道球正朝右邊運動。

對於我們的Doom agent來說,道理相同,如果一次只輸入一幀,則無法知道運動細節,也就則無法做出正確的決策了。

使用卷積神經網絡

這些幀圖片將使用三個卷積層進行處理。這些網絡層可以允許agent發現圖片之間的空間關係。

如果你對卷積方法不是很了解,那麼可以閱讀如下文章。

每個卷積層將使用ELU作為激活函數。在網絡中,我們採用一個使用激活函數為ELU的全連接層、一個輸出層(採用線性激活函數的全連接層)來為每個行為計算Q-value值。

經驗回放:給觀察經驗帶來更大的效率

經驗回放可以幫我們解決兩個問題:

我將解釋這兩種概念。這部分的靈感來自於Udacity中深度學習基礎的深度Q學習章節。

1、避免遺忘之前的經驗

這裡遇到各大問題:由於環境與行為間的高相關性,權重是可變化的。

在每一個時間步中,我們都會接受一個元祖(狀態、行為、反饋、新狀態),模型從中學習並獲得經驗。

我們的問題是在與環境的交互過程中獲得了連續樣本,並且它傾向於忘記之前的經驗。例如,如果我們完成了第一級到第二級的行為,隨著時間的推移,agent將傾向於忘記它是如何從第一級運動到第二級的。

在多個時間點使用之前的行為,將有助於學習進程變得更加高效。

我們的解決辦法是,創建一個「回放緩存」,其中存儲的經驗元祖將於環境進行交互,之後我們採樣到部分樣本,輸入至神經網絡中。

 

2、減少經驗間的相關性

此處有另一個問題,我們知道每個行為都會對下一個狀態產生影響。輸出一組經驗元組序列,有可能存在很高的相關性。如果我們在序列順序上進行訓練,有可能會使agent被相關性所影響。

通過對經驗回放的隨機採樣,可以破壞這種相關性。以預防agent災難性的震蕩於消散。

可以通過例子來簡單理解一下,首先,我們使用第一個射手,對面是一個怪獸,可以從左運動到右。我們有兩把槍於兩個可選動作,向左開槍與向右開槍。

我們通過經驗學習,如果擊中怪獸,怪獸從相同方向過來的概率為70%,在這個例子中,這就是我們經驗元組的相關性。

開始訓練,agent看到怪獸在右邊,並且使用右邊的搶開槍,正確!然後,下一個怪獸也從右邊經過(70%概率),並且agent同樣朝右開槍,再一次答對了!

 

問題在於這個方法增加了朝右開槍的評估值。

 

如果agent無法看到足夠多的左邊的例子(30%概率),那麼agent將認為朝右開槍始終是對的,而不關心其他的因素。

我們有兩種平行策略去解決這一問題。

首先,必須停止從環境的交互中學習,開始嘗試不同的方法,採用些隨機發現的狀態空間。並將結果保存至回放緩存中。

之後,可以調用這些經驗,並從其中學習,返回並更新值函數。

最後,將獲得一組更好的樣例,可以從其中獲得更好的泛化模式。

這會避免agent陷於狀態空間的某個區域之中,防止某個行為的循環強化。

這個方法可以認為是一種監督學習,在未來的文章中,我們可以看到使用優先經驗回放概念的想法,這將使神經網絡更頻繁的獲得「重要」或「稀有」的動作樣本。

深度Q學習算法

首先,我們需要了解下數學公式:回憶下Q函數的更新方法(Bellman equation):

在此次例子中,我們希望更新網絡的權重以減少誤差。

誤差(TD誤差)通過計算Q_target(下一個時刻的最大可能值)與當前狀態下預測得到的Q-value間的差值來獲得。

 

在算法中,出現了兩種處理過程。

1、 對環境採樣,並且將觀察到的信息存儲於回放緩存中。

2、 隨機選取一組小batch,並使用梯度下降方法進行迭代學習。

實現深度Q學習

此處有一個作者製作的視頻【8】,基於tensorflow創建一個會玩Atari Space Invaders的agent。

現在我們知道強化學習是如何工作的了,我們將一步步實現我們自己的深度Q學習模型。每一步的代碼都可以在下文中的Jupyter上面查看。

全部文檔及代碼見連結【9】。

 

以上便是深度Q學習構建的全部內容了。在下一章中,將介紹深度Q學習的各類變體。

[1] https://medium.freecodecamp.org/diving-deeper-into-reinforcement-learning-with-q-learning-c18d0db58efe

[2] https://simoninithomas.github.io/Deep_reinforcement_learning_Course/ 

[3] https://medium.com/@awjuliani

[4] https://medium.com/emergent-future/simple-reinforcement-learning-with-tensorflow-part-8-asynchronous-actor-critic-agents-a3c-c88f72a5e9f2

[5] http://colah.github.io/posts/2015-08-Understanding-LSTMs/

[6] https://medium.com/@ageitgey/machine-learning-is-fun-part-3-deep-learning-and-convolutional-neural-networks-f40359318721

[7] https://mp.weixin.qq.com/s?__biz=MzU2OTA0NzE2NA==&mid=2247491116&idx=1&sn=74dbd582e6fd0e5a9bd54c28187195dd&chksm=fc85ff3fcbf27629bdd356e0439258ea52f0cacd8390cce24b3c5d516684e2af296b7b2ebccf#rd

[8] https://youtu.be/gCJyVX98KJ4 

[9] https://github.com/simoninithomas/Deep_reinforcement_learning_Course/tree/master/DQN/doom 

原文連結:

https://medium.freecodecamp.org/an-introduction-to-deep-q-learning-lets-play-doom-54d02d8017d8

相關焦點

  • 深度學習第56講:強化學習簡介與Q-Learning實例
    因為強化學習發展到現在,早已結合了神經網絡迸發出新的活力,強化學習結合深度學習已經形成了深度強化學習(Deep Reinforcement Learning)這樣的新領域,因為強化學習和深度學習之間的關係以及其本身作為人工智慧的一個重要方向,我們都是有必要在系列筆記裡體現一下的。
  • 入門必看 | 強化學習簡介 【RL系列】
    最近幾年,我們見證了了許多研究領域的巨大進展,例如包括2014年的「DeepMind and the Deep Q learning architecture」,2016年的「beating the champion of the game of Go with AlphaGo」,2017年的「OpenAI and the PPO」
  • 獨家 | 使用Python的OpenAI Gym對Deep Q-Learning的實操介紹(附學習資源)
    三、Deep Q-Learning的簡介四、與深度學習相比,深度強化學習面臨的挑戰    4.1 目標網絡    4.2 經驗回放五、使用Keras & Gym 在Python中實現Deep Q-Learning 一、Q-Learning之路
  • 增強學習之Q-Learning入門
    基於tensorflow的最簡單的強化學習入門-part0:Q-learning和神經網絡https://zhuanlan.zhihu.com/p/257103272. Simple Reinforcement Learning with Tensorflow Part 0: Q-Learning with Tables and Neural Networkshttps://medium.com/emergent-future/simple-reinforcement-learning-with-tensorflow-part-0-q-learning-with-tables-and-neural-networks-d195264329d0
  • 深度強化學習(Deep Reinforcement Learning)的資源
    一、相關文章關於DRL,這方面的工作基本應該是隨著深度學習的爆紅最近才興起的,做這方面的研究的一般都是人工智慧領域的大牛。最早(待定)的一篇可以追溯到2010年,Lange[1]做的相關工作。提出了Deep auto-encoder用於基於視覺的相關控制,和目前的架構其實已經很相似了。
  • 【AlphaGoZero核心技術】深度強化學習知識資料全集(論文/代碼/教程/視頻/文章等)
    Learning: Pong from  Pixelshttp://karpathy.github.io/2016/05/31/rl/CS 294: Deep Reinforcement Learninghttp://rll.berkeley.edu/deeprlcourse/強化學習系列之一:馬爾科夫決策過程http://www.algorithmdog.com/%E5%BC%BA%E5%8C%
  • 利用Python進行深度學習的完整入門指南(附資源)
    自上一次調查(查看調查:https://www.analyticsvidhya.com/blog/2014/06/deep-learning-attention/)以來,對於深度學習的關注又出現了大幅增加的趨勢。
  • 入門 | 通過 Q-learning 深入理解強化學習
    在這篇文章中,你將學到:(1)Q-learning 的概念解釋和算法詳解;(2)通過 Numpy 實現 Q-learning。Q-Table 簡介下面我將介紹第二種策略:創建一個表格。通過它,我們可以為每一個狀態(state)上進行的每一個動作(action)計算出最大的未來獎勵(reward)的期望。得益於這個表格,我們可以知道為每一個狀態採取的最佳動作。
  • Sarsa算法與Q learning對比分析 | 算法基礎(29)
    清晰易讀的代碼供理解:Sarsa代碼:https://github.com/pybrain/pybrain/blob/master/pybrain/rl/learners/valuebased/sarsa.pyQ learning代碼:https://github.com
  • Deep Learning with PyTorch 必看教程集(4本)
    》本書共分成16個章節,第1章是Pytorch簡介和環境搭建;第2~8章是Keras的軟體框架說明,包含了層的說明,優化器和損失函數等;第9~10章重點介紹了深度學習中的卷積和池化的概念;第11~12章是介紹用神經網絡模型搭建圖像識別系統的實戰經驗;第13~16章介紹如何使用LSTM模型來處理自然語言。
  • 強化學習——Q Learning 簡介
    如何更新Q表 Q learning的算法就是如何更新Q表的方法。還是以表下為例:相關文章強化學習與Open AI 入門End-to-End(端到端)的深度學習免費使用Google的GPU和TPU來訓練你的模型長按或掃描二維碼關注公眾號,獲取原始碼,你的支持是作者創作的動力。
  • SARSA和Q-Learning
    所以Q-learning是off-policy的方法。為什麼有些朋友在書中這裡很難區分開SARSA和Q-learning,原因在於如果SARSA和Q-learning中policy都選擇greedy貪婪策略,也就是每一步行動都選擇Q-value最大的那個行為進行,這個時候SARSA和Q-learning生成的樣本路徑和實際訓練中的政策policy路徑基本是一致的。
  • 快速入門深度學習,從 Deeplearning4j 開始
    這些都是以 Python 和 C/C++ 語言為主,而在目前企業項目中,無論是 Web 應用、Andriod 開發還是大數據應用,Java 語言都佔有很大的比例。此外,我們必須看到,越來越多的從事傳統 Java 應用開發的工程師嘗試將 AI 技術融入到項目中,或者自身在嘗試轉型 AI 領域。
  • 純新手入門機器/深度學習自學指南(附一個月速成方案)
    準備用三個月入門,和想要一個月速成,肯定是截然不同的路徑。當然我建議大家穩紮穩打,至少可以拿出五個月的時間來學好機器學習的基礎知識。基礎很重要,知其所以然很重要。畢竟工具總在進步,每個月都會出現更好的深度學習技術,但基礎知識是不變的。如何用五個月時間入門?下面分三個部分,詳細指南。
  • Java 工程師快速入門深度學習,從 Deeplearning4j 開始
    這些都是以 Python 和 C/C++ 語言為主,而在目前企業項目中,無論是 Web 應用、Andriod 開發還是大數據應用,Java 語言都佔有很大的比例。此外,我們必須看到,越來越多的從事傳統 Java 應用開發的工程師嘗試將 AI 技術融入到項目中,或者自身在嘗試轉型 AI 領域。
  • 【深度學習自學指南】微軟&頭條實習生現身說法:我是這樣進大廠的
    list=PLUl4u3cNGP63oMNUHXqIUcrkS2PivhN3k當然,因為數學嘛,畢竟是門大殺器,要是實在學不下去,可以先開始學下面的深度學習部分,看到哪兒原理不懂了,再回來翻資料理解一下。深度學習入門現在,恭喜你學會了Python,還搞懂了一部分數學理論知識,終於可以開始學正兒八經的深度學習了。
  • 機器學習(Machine Learning)&深度學習(Deep Learning)資料(之四精選411-861閱讀原文下載)
    介紹:深度學習vs.大數據——從數據到知識:版權的思考,[翻譯版](http://www.csdn.net/article/2015-05-19/2824707436.《A Primer on Predictive Models》介紹:預測模型入門.437.
  • RL兩大類算法的本質區別?(Policy Gradient 和 Q-Learning)
    (Policy Gradient 和 Q-Learning)作者:俞揚https://www.zhihu.com/question/49787932/answer/124727629Q-learning 是一種基於值函數估計的強化學習方法
  • Deeplearning4j —— 分布式深度學習庫
    DL4J)是為Java和Scala編寫的首個商業級開源分布式深度學習庫。Deeplearning4j技術先進,以即插即用為目標,通過更多預設的使用,避免太多配置,讓非研究人員也能夠進行快速的原型製作。DL4J同時可以規模化定製。DL4J遵循Apache 2.0許可協議,一切以其為基礎的衍生作品均屬於衍生作品的作者。
  • Deeplearning4j—分布式深度學習庫
    Deeplearning4j(簡稱DL4J)是為Java和Scala編寫的首個商業級開源分布式深度學習庫。