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