什麼是 DQN (強化學習)

今天我們會來說說強化學習中的一種強大武器,Deep Q Network 簡稱為 DQN. Google Deep mind團隊就是靠著這 DQN使計算機玩電動玩得比我們還厲害.

注: 本文不會涉及數學推導. 大家可以在很多其他地方找到優秀的數學推導文章.

因為本文原作是一段短視頻介紹.

所以首先放視頻鏈接: Youtube 或者 優酷.

也可以在這個網頁找到其他很多相關內容: 莫煩 Python

強化學習與神經網路

之前我們所談論到的強化學習方法都是比較傳統的方式,而如今,隨著機器學習在日常生活中的各種應用, 各種機器學習方法也在融匯,合併,升級.而我們今天所要探討的強化學習則是這麼一種融合了神經網路和 Q learning 的方法, 名字叫做 Deep Q Network.這種新型結構是為什麼被提出來呢? 原來,傳統的表格形式的強化學習有這樣一個瓶頸.

神經網路的作用

我們使用表格來存儲每一個狀態state, 和在這個 state 每個行為 action 所擁有的 Q 值. 而當今問題是在太複雜, 狀態可以多到比天上的星星還多(比如下圍棋). 如果全用表格來存儲它們,恐怕我們的計算機有再大的內存都不夠, 而且每次在這麼大的表格中搜索對應的狀態也是一件很耗時的事. 不過,在機器學習中,有一種方法對這種事情很在行, 那就是神經網路. 我們可以將狀態和動作當成神經網路的輸入,然後經過神經網路分析後得到動作的 Q 值, 這樣我們就沒必要在表格中記錄 Q 值,而是直接使用神經網路生成 Q 值. 還有一種形式的是這樣,我們也能只輸入狀態值,輸出所有的動作值, 然後按照Q learning 的原則,直接選擇擁有最大值的動作當做下一步要做的動作. 我們可以想像,神經網路接受外部的信息, 相當於眼睛鼻子耳朵收集信息, 然後通過大腦加工輸出每種動作的值,最後通過強化學習的方式選擇動作.

更新神經網路

接下來我們基於第二種神經網路來分析,我們知道,神經網路是要被訓練才能預測出準確的值. 那在強化學習中, 神經網路是如何被訓練的呢? 首先, 我們需要 a1, a2 正確的Q值, 這個 Q值我們就用之前在 Q learning 中的 Q現實來代替.同樣我們還需要一個 Q 估計 來實現神經網路的更新. 所以神經網路的的參數就是老的 NN 參數 加學習率 alpha 乘以 Q 現實 和 Q估計 的差距.我們整理一下.

我們通過 NN預測出Q(s2, a1) 和 Q(s2,a2) 的值, 這就是 Q 估計.然後我們選取 Q估計中最大值的動作來換取環境中的獎勵 reward. 而 Q 現實中也包含從神經網路分析出來的兩個 Q 估計值, 不過這個 Q 估計是針對於下一步在 s 的估計. 最後再通過剛剛所說的演算法更新神經網路中的參數. 但是這並不是 DQN會玩電動的根本原因.還有兩大因素支撐著 DQN使得它變得無比強大.這兩大因素就是 Experience replayFixed Q-targets.

DQN 兩大利器

簡單來說,DQN有一個記憶庫用於學習之前的經歷. 在之前的簡介影片中提到過,Qlearning 是一種 off-policy 離線學習法, 它能學習當前經歷著的, 也能學習過去經歷過的, 甚至是學習別人的經歷. 所以每次 DQN 更新的時候, 我們都可以隨機抽取一些之前的經歷進行學習. 隨機抽取這種做法打亂了經歷之間的相關性,也使得神經網路更新更有效率. Fixed Q-targets也是一種打亂相關性的機理, 如果使用 fixed Q-targets, 我們就會在 DQN中使用到兩個結構相同但參數不同的神經網路, 預測 Q 估計 的神經網路具備最新的參數, 而預測 Q 現實的神經網路使用的參數則是很久以前的. 有了這兩種提升手段, DQN才能在一些遊戲中超越人類.

如果你對以上內容感興趣, 也想實際動手做做看, 這還有更多使用 python 來編寫以上內容的教程: 莫煩 Python

推薦閱讀:

Learn R | 機器學習中的人工神經網路(四)
神經網路普遍性的直觀解釋
Python · NN(一) · 神經網路入門
神經網路的學習 / 訓練過程
第四周筆記:神經網路是什麼

TAG:强化学习ReinforcementLearning | 神经网络 | 深度学习DeepLearning |