強化學習算法DQN

1 DQN的引入

  因爲q_learning算法是一直更新一張q_table,在場景複雜的狀況下,q_table就會大到內存處理的極限,並且在當時深度學習的火熱,有人就會想到能不能將從深度學習中借鑑方法,將深度學習的方法應用到強化學習中。13年,谷歌的deepmind團隊就發表了關於DQN算法的論文,促進了強化學習的發展,擴展了強化學習的應用場景。算法

2 將深度學習應用到強化學習的挑戰

  將深度學習應用到強化學習上主要有兩大挑戰,下面具體說明這兩種挑戰是什麼網絡

2.1 第一個挑戰是關於樣本的分佈:

  深度學習可以收斂的一大主要緣由就是數據集要求獨立同分布,只有數據集獨立同分布,運用深度學習訓練出來的模型才能更好的擬合數據集中潛在的模型,才能獲得理想的結果。可是強化學習是從reward中學習,從一系列高度相關的狀態中學習,並且強化學習中的智能體隨着算法學習到新的行爲,數據分佈可能會發生改變,存在不能收斂的結果。想要將深度學習算法應用到強化學習中就必須解決強化學習的問題,切斷狀態的相關性,使數據集的分佈穩定。學習

2.2 第二個挑戰是關於學習的方式:

  深度學習是標準的監督式學習,在訓練以前,想要訓練獲得的理想模型的目標就已經暗中存在,深度學習經過一次次的迭代,使算法收斂,尋到理想的模型。然而強化學習是從稀疏,有噪聲,有延遲的標量的獎勵信號中學習,想要將深度學習的算法應用用強化學習中就必須爲強化學習設計每一步更新迭代的目標。設計

3 關於上述挑戰的兩個解決辦法

3.1 解決樣本分佈問題

  谷歌deepmind的這篇論文中介紹了一種解決樣本分佈問題的方法:經驗重放機制(repaly mechanism)。blog

  首先agent會被初始化一個狀態s,將狀態s輸入到評價網絡中(一個神經網絡,後文介紹),輸出每一個動做的q值,agent經過q值和探索利用(exploration and exploitation)算法來選擇在本狀態執行的行動action,最後將s,action做用與環境中,環境會反饋給agent此狀態執行action的reward和下一個狀態s'。此時就到了一個序列(s, a, r, s'),其中s 爲本次狀態,a 爲狀態s時的執行的動做,r 爲在狀態s執行動做a環境反饋給agent的獎賞,s' 是下一個狀態。一個序列(s , a, r, s')就構成了一個訓練樣本。內存

  首先規定經驗池的大小爲N,即只有N個最新的序列存在經驗池中,大於N的序列會重頭覆蓋經驗池中的樣本。在每次更新神經網絡參數時就用經驗池中數據。get

  經驗池的存在,使高度相關的一系列的狀態變成了一個個離散的數據樣本,減少了訓練的方差,同時使樣本的分佈趨於穩定,有利於算法的收斂,agent還能像人同樣,能夠從本身的歷史經驗中學習。深度學習

3.2 解決有監督問題

  爲了解決強化學習和有監督學習的深度學習之間的矛盾,這篇論文中設計了兩個神經網絡,it

  一個神經網絡爲預測網絡:輸入本次的狀態,即樣本序列中的第一個元素s,輸出每一個動做預測的q值,agent就是利用輸出的每一個動做的q值來決定本狀態要執行的動做,本網絡的參數隨時更新。  io

  另外一個網絡爲評價網絡:輸入爲下一個狀態,即樣本序列中的第四個元素s',輸出爲狀態s'是每一個動做的q值(q_next),而後利用貝爾曼方程(q_target=r+γ*max(q_next))計算出狀態s時執行動做a的目標q值。

  評價網絡的輸出通過貝爾曼方程,計算結果的目標q值可做爲預測網絡的label,這樣就解決了有監督的深度學習和沒有監督的強化學習之間的矛盾。

  爲了抑制狀態之間相關性的問題,評價網絡的參數並不會實時更新,在必定步數以後,預測網絡會將本身的參數複製爲評價網絡。

4 算法流程

4.1 算法的總體邏輯

 4.2 算法的學習邏輯

相關文章
相關標籤/搜索