最近,我受邀在北京的O’Reilly人工智能會議上分享自己在NLP領域的所學。當時我有幸參加了一場由Unity Technologies舉辦的關于深度強化學習的培訓,這場由Arthur Juliani領導的會議給了我很大啟發,下面我會分享我的收獲。
在我們與各大公司的交談中,我們發現了許多有趣的深度強化學習的應用、工具和結果。同時,深度強化學習的應用(例如AlphaGo)往往非常深奧、難以理解。在這篇文章中,我會以一種通俗易懂的方式介紹深度強化學習的核心要點。
深度強化學習的崛起
深度強化學習領域已經出現了大量研究成果,比如讓計算機學習雅達利游戲、在Dota2中戰勝人類玩家,或者打敗世界頂尖圍棋選手。與只關注認知的傳統深度學習問題不同,深度強化學習加入了可以影響環境的動作,比傳統多了一個維度。例如傳統深度學習解決的是“這幅畫中有停止標志嗎”這樣的問題,而深度強化學習還會研究“目的地在哪、應該怎樣到達”的問題。例如在對話系統中,傳統的深度學習的目的是找到對應問題的正確回答。而深度強化學習則關注如何組合出正確的句子順序才能獲得一個積極的結果,例如怎樣回答才能讓顧客開心。
這就讓深度強化學習在需要提前計劃和適應的任務中非常受歡迎,例如制造業或自動駕駛。然而行業的實際應用趕不上理論發展。其中主要原因是深度強化學習常常需要一個智能體進行數百萬次的實驗,如果想快速實現這一點,就需要一個模擬環境。這里可以參考Unity的教程創建一個模擬環境。
接下來,我將詳細講述目前深度強化學習領域的幾種主流算法。
從老虎機到電子游戲,淺談強化學習
深度強化學習可以擊敗頂尖圍棋選手,但是想搞清楚它是怎么做到的,首先要了解幾個簡單的概念。我們先從簡單的開始。
假設你面前有四個箱子,每次只能打開一個,每個里面的裝的錢(獎勵)不一樣,你的目標就是在一定的游戲次數中,最后拿到的總錢數是最大的。這個經典游戲被稱為“多臂賭博機問題(multi-armed bandit problem”)。這個問題的核心就是控制游戲次數,同時利用已知信息選擇最佳對象。
這里我們要用到一種將行為映射到預計獎勵中的價值函數——Q函數。首先,我們把所有的Q值定成同樣的。然后,我們會在每次選擇箱子后更新Q值,基于箱子中的錢有多少。這樣可以讓我們學習一個好的價值函數,我們會用一個神經網絡估計Q函數在四個箱子上潛在的表現。
價值函數告訴我們預測的每次結果如何,策略是決定在哪一步停止的函數。也就是說,我們可能會選擇具有最高Q值的策略。但這在實際中表現得很糟,因為Q值的估計在剛開始時表現得非常離譜,根本不足以計入試錯經驗。這就是為什么我們需要在策略中加入一項機制鼓勵探索。其中一種方法就是利用貪婪算法,即用概率?進行隨機選擇。最初,當概率接近于1時,選擇更隨機。隨著概率的降低就會學習到更多關于箱子的知識。最終我們知道了那個更好。
在實際中,我們也許想選擇另一種更精妙的方法,不用隨機選擇或挑選最優策略。其中一種方法就是Boltzmann Exploration,它可以根據目前的情況改變概率,加入隨機因子。
不同狀態下會是怎樣
這里不同的背景顏色代表不同的平均獎勵
上一個例子的背景是假設狀態相同,挑選四個完全相同的箱子。而更真實的情況卻有很大不同,其中有不同的狀態。現在箱子后面的背景在三種顏色之間不斷變化,每個箱子的價值是在變的。所以我們需要學習一個Q函數來決定箱子的選擇和背景顏色。這一問題被稱為“語境下的多臂賭博機問題”。
我們用的方法和此前相同,唯一需要加入神經網絡的是額外的密集層,將輸入向量作為目前狀態的代表。
學習行為所帶來的結果
這里我們學習如何移動藍色立方體,讓它到達綠色立方體那里,同時不碰到紅色方塊
這里還有一種可以讓我們的方法比其他方法更簡單的關鍵因素。在大多數環境中,例如迷宮,我們采取的每一步動作都會影響周圍環境。如果在網格中行進,有可能會得到獎勵(也可能什么都沒有),但是下一步我們就出在完全不同的狀態下了。這就是計劃的重要性。
首先,我們會將Q函數定義為目前狀態下立即的獎勵以及未來全部行為都結束后的部分獎勵。如果Q估計的狀態精確,那么這種方法就有用,所以我們先要學習如何做出正確估計。
我們要用一種成為Temporal Difference(TD)Learning的方法,學習一個好的Q函數。這種方法只關注最近的幾步行為,例如TD(1)只用接下來的兩步來評估獎勵。
意外的是,我們可以用表示目前狀態的TD(0)和對下一步獎勵的評估得到不錯的結果。網絡的結構不變,但是我們需要在犯錯之前進行下一步行動,然后用這個錯誤對梯度進行反向傳播,就像傳統深度學習那樣,之后再對值進行重新估計。
蒙特卡羅介紹
預測最終成功的另一種方法就是蒙特卡羅估計。該方法要將目前策略下所有可能都運行以便知道結束,然后用這一結果對每次得到的狀態進行評估。這讓我們在每次動作時都能有效傳播值而不是簡單地移動。與之而來的代價就是會在估計值中引入噪聲。
離散的環境
此前的方法使用神經網絡近似估計預測值,將一些狀態和動作映射到數值上。例如在迷宮中共有49個位置和四種動作,在這個環境下,我們試著學習如何讓球體在二維平面上保持平衡,每一步我們會決定讓平板往哪個方向傾斜。這里的狀態空間就是連續的,好消息是我們可以使用神經網絡來估計函數。
這里插播一下off-policy和on-policy的區別:之前我們用的方法是off-policy,也就是我們可以從任意策略中生成數據并從中學習。on-policy的方法智能從動作中學習。這就限制了我們學習的過程因為我們必須有一個建立在策略之上的探索策略,但是可以將結果直接綁定在推理上,同時讓我們學習得更高效。
我們這里將使用的方法稱為策略梯度,這是一種on-policy方法。之前,我們首先學習了一個價值函數Q,然后在這之上建立了策略。在Vanilla策略梯度中,我們仍然使用蒙特卡羅估計,但是我們直接從損失函數那里學習策略,這樣增加了選到有獎勵的可能性。因為我們是在策略上進行學習的,就不能用貪婪算法這樣的方法,只能用一種稱為熵正則化的方法,它估計的概率更加廣泛,也鼓勵我們做出更多大膽的選擇。
直接從屏幕中學習
模型中輸入的是像素
這是用深度學習的另一個好處因為深度神經網絡擅長處理視覺問題。當人類玩游戲時,我們接收到的信息不是一串狀態,而是一張圖片。
基于圖像的學習結合了卷積神經網絡和強化學習。在這一環境中,我們關注的是原始圖像而不是特征,同時在網絡中加入了一個2層的CNN。我們甚至可以看看網絡在生成值時會做什么動作。在下面的例子中,我們可以看到網絡利用目前的分數和遠處的障礙預測目前的價值,用近處的障礙決定做出怎樣的動作。
這里我注意到,深度學習對超參數很敏感。例如稍微調整一下折扣率,就會完全阻止神經網絡的學習。這個問題已經普遍存在了,但是自己親眼看到還是很有趣的。
細微動作
目前為止,我們已經在分散和連續的狀態空間中進行了實驗,但是我們研究的每個環境都有著分散的動作空間:我們可以向四個方向移動或者將板子向左向右傾斜。理想情況下,對于類似自動駕駛的產品,我們想學習連續的動作,例如轉動方向盤。在這個3D環境下,我們可以選擇傾斜板子到任意值,這也讓我們對動作有了更多控制,但是動作空間也更大了。
下一步
下面是區分各種算法的幾個概念:
并列(parallelizing):A3C是最常見的方法之一。它為actor critic添加了異步步驟,使其能并行運行。這讓它在合理時間內解決更多有趣的問題。演化方法可以進一步并行化,并且表現得很不錯。
課程學習(curriculum learning):在很多情況中,隨機運行可能不會得到任何獎勵。這使得探索過程變得非常棘手,因為我們永遠學不到任何有價值的東西。在這樣的情況下,我們可以簡化問題,先解決一個簡單版本的問題,然后用基礎模型再解決更復雜的環境。
記憶:例如,利用LSTM,我們可以記住過去發生了什么,然后用序列進行決策。
基于模型的強化學習:目前有好幾種方法可以幫助算法建立它們學習的環境模型,這樣它們可以推斷出環境是如何工作的,同時只用做簡單的動作就能得到較高獎勵。AlphaGo就結合了模型和計劃。
至此,我的總結就結束了,希望你能覺得有用!如果你想深入了解強化學習。編者按:本文作者是專注于機器學習和數據科學的專家Emmanuel Ameisen,他在自己的博客上分享了對深度學習的理解,用簡明扼要的方式為大家講述了深度學習的基本概念。
-
算法
+關注
關注
23文章
4615瀏覽量
92999 -
機器學習
+關注
關注
66文章
8422瀏覽量
132736 -
深度學習
+關注
關注
73文章
5504瀏覽量
121239
原文標題:這可能是最通俗易懂的深度學習科普文了
文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論