李宏毅老師 Deep Reinforcement Learning (2017 Spring)【筆記】

Ivan Lee
Change The World With Technology
15 min readJul 10, 2018

李宏毅老師PPT網址:http://speech.ee.ntu.edu.tw/~tlkagk/courses/ML_2017/Lecture/RL%20(v4).pdf

一開始老師比喻RL過程是怎麼回事,用下面的地球跟機器人比喻。

地球是環境,Agent用感測器去接收外接訊息,好比無人車在路上有六種以上裝置感知外接訊息。

外邊感知到了一杯水,它感知到訊息接著採取行動,它把水打翻了。因他的改變而外界有所改變,一攤水灑在地上。

接著外界(地球)給她了一個回饋:你剛剛的動作是不好的。

機器人得到負面回饋,一個reward。

接著,機器人感測到地上有一灘水後,便採取修動,它把地上水擦淨,感變了外界的狀態,接著地球給了個回饋:幹得好兄弟! 一個正面的rewark,接著這個資訊機器人也接收起來了:我這個動作是好的。

這裡比喻機器的學習過程就是找到一個函數,函數的input是外界(Observation),而機器學習得目標就是要把這個函數(reward)最大化。

這邊舉例阿法狗的學習過程。首先觀測棋局(左),阿法狗下了一手。外部環境接收到了訊息,reward給阿法狗。

人類下了第一手,阿法狗觀測棋盤,然後不斷循環剛剛的步驟。整個過程reward是0,直到棋局結束,才會產生1 or 0的reward。

假設是監督式方法讓機器去學習,就會變成你教授5–5後,第二手教機器下3–3,一步一步的帶下法。

但強化學習不一樣,是到棋局結束才有rewark。

阿法狗的算法則是,監督式先學習許多的棋譜,然後才用強化學習去探索更多棋譜跟走法。

假設把例子舉在語音機器人好了。一開始的監督則是從你一句我一句訓練,然後根據action reward值,機器的目標就是要最大rewark的期望值。

如果像阿法狗一樣,讓兩個機器人訓練呢?那機器人就會不斷的對話出很多的句子。

產生的句子很多,也不可能一個一個去看完,那就是監督式學習了。你可以制定一個規則,假如你希望一個機器人學習罵髒話,那就讓input的句子reward都能得到正值,反之如果不希望,則加入規則,罵髒話的時候變reward負分。

如果把語音機器人用監督和強化學習來比喻,非監督方式就是一句一句的教,則強化學習就是讓機器自己去對話,直到對方掛電話結束語音聊天。

以下是提供的兩個RL環境,有空可以上去玩看看。接下來的內容大部分會以機器人玩遊戲為主題做延伸。

這邊是一個用RL玩遊戲的例子,左上方是已獲得分數,中間是還沒打完的怪,下方則是你可操作的動作,包括向左移動、向右移動以及開火。

整個流程你可以這樣了解如何互通。首先機器看到最左邊的畫面(state s1),接著採取行動(action a1)向右走一步,得到回饋rewaad(r1 = 0),然後再接收狀態資訊(state s2),接著在選擇開火(action a2),然後環境給予他的回饋reward(r2 = 5),s1 →a1→r1→s2→a2→r2。

直到遊戲結束,整個過程episode會得一個累積的reward,遊戲的目標會以最大化整個episode的reward為目標而調整行為。

目前強化學習有兩個需要關注的特性,首先是關於學習,有著Reward delay的特性,你的機器人或許會知道開火跟得分有關係,但不能直接的了解得分跟往左往右移動有什麼關係,這樣機器最後只會不斷地開火。

再舉個圍棋的例子,在與環境對弈的過程,並不是每步都有明顯的回饋説這步下得很好,有時早期的犧牲些區塊、誘敵等戰術都能讓你在後面獲得更好的期望利益,學習的對象是一連串的行為(trajectory),機器才能了解,有些沒有及時reward值也是很重要,目標是最大化整個episode的reward

另一個特性是,機器不是一開始便擁有標注好的資料,機器要跟環境持續做互動,改變環境獲得反饋,玩許多次才會更新算法,整個過程是持續的

強化學習模型主要有兩個,第一個是Model-base,舉例圍棋,你下一步後,機器便可以預想後面所有可能的棋步,然後推出勝率最大的下一步,但這是基於對於規則與環境有充分的理解,才有可能做到。另外一個則是Model-free,你並不是對環境很有著充分理解,基於這個產生兩個方向,Policy-based和Value-based,以及混雜的Actor+Critic。阿法狗可以參考paper,它是兼這三個類型使用。

這邊就開始介紹基於Policy途徑,如何得到一個好的Actor。

這邊分三個部分介紹,RL導入NN,如何定義好的函式及如何找出最好的。

左下角可以看到整個遊戲畫面,進入NN會output出三個維度的結果,分別是三個動作的值。其實過往RL就有些固定算法,例如Q-table,現在導入NN的原因是,原本的RL input的內容必須比較固化,如果針對沒看過的例子performance會較差,但NN優點就在於泛化能力好,就算畫面沒看到但仍會找到個看到且相似的畫面,具有generalization特性。

有了使用NN設計Actor的概念,接下來我們要來定義什麼是好的函式。

這是過去我們知道的分類問題,手寫數字辨識經過神經網路,給定一個值,對照label去評估loss。

函式𝝅(actor)會有一組參數𝜽,接著會先讓actor玩第一回遊戲,整個過程(trajectory)結束會得到一個total reward R。對於相同的actor來說,每次環境回饋的r並不一定相同,以及RL算法某些時刻會採取隨機的方式選擇策略,這是為了滿足探索新的可能的需求。因為這些原因,我們會求𝓡(因找不到簡報裡上標R的符號,故以此暫替)。求每次的機率與reward,得期望值。

我們知道想要的值是什麼後,這邊先來求機率的公式。

首先定義𝞽(音念濤),整個trajectory展開,求機率P(𝞽|𝜽)機率,展開來後從第一項開始:環境初始狀態p(s1),在state(s1)狀態下,基於𝜽所以採取的行動(a1),接著基於a1,stale1(s1)過渡到state(s2),中間所產生的reward(r1),接著持續下去…

切到下方公式,除了𝜽外可拿掉,因為我們所關注的僅有參數。右下角是對於求出公式的理解。state1 進入NN,a = file的機率是0.7,另外則是right = 0.2,left = 0.1的機率。

現在公式可表達每次的reward值與機率,但延伸出另外一個問題,我們不太可能窮舉所有的𝞽,找出所有可能性。所以這邊的替代方法是,讓actor玩N次遊戲,加起來後除N,作為reward的期望值。

接著我們要想方法找出最好的函式。

怎麼定義出我們想要找的函數呢?只要𝜽能使得reward最大化,便是我們想要的目標。這邊一樣需要求梯度,右下是根據參數,我們要修改的𝜽,除了權重還包含偏差,右下的經過微分的向量,便是我們要更新的梯度。

這裡如何去求梯度呢?我們現在的目標是𝛻𝓡,公式就是原本的sum of reward乘機率,但機率前面加𝛻,這樣子沒法直接求值,這裏先乘一個𝞽的機率以及除一個𝞽的機率。分子分母的部分帶微分,然後左邊的部分從sum所有trajectory替換成sample N次,藍線部分就是𝞽 n次方的機率求log與𝛻。

𝞽 的機率求log 𝛻,怎麼求?這邊一樣從trajectory展開,每一項帶機率,然後球log,一樣我們求有關參數的項就好,其他去掉,就可找出值。

這邊就是整個參數梯度更新的方法。下面的式子都可以與前面求得的帶入。可以從物理方面去理解,如果你的reward是正的,便可以改變參數,讓對這statle採取的action機率提高,負值的話則反之。

理解完公式,這邊就是整個循環,不過RL都是玩好幾次遊戲,再一次回頭train參數,比起其他AI應用,強化學習過程挺花時間。

這邊我們可以換個角度去,用平常看到的分類模型來思考,假設左邊是遊戲畫面,input到了神經網路中,輸出了分別三個維度的動作,我們希望他這個畫面產生的動作是往左邊,值便給1。

過去的分類我們會用cross entropy計算,希望它最小化,這裡的話則是希望這個機率最大化,針對state採取的動作,便可以對參數做梯度修正。

其實這個公式把reward拿掉,會發現跟分類的模型差不多,state 1 進入NN output出三維的資訊,left的值為1,state 2 進入NN,也是output出三維的資訊,fire 值為1。

有無reward的差別在哪裡?如果把reward當作常數項,它實際上就是針對這個 state action乘一個值,例如𝞽的reward為2,這 s1 至 a1 就會產生兩次,state2 的reward為1,則只會乘1。

這邊說明一個要注意的地方。理想上a、b、c三個動作皆產生reward然後修正,你看到ideal的地方,雖然幅度不一樣,但其實都有調升,但因機率值關係,三者會在加起來當作分母,加起來總合一定會是1。

現在延伸的問題是,如果b、c有更新,但a沒有呢?a值會下降,因為他們最終會除總和的關係。那這便應對的方法就是減去一個b值,這樣reward出來如果是正的,減去b值則有可能會變成正值,也可能是負值。

這邊開始介紹Value-based,怎麼去訓練一個Critic。

Critic是什麼呢?Critic並不會跟你的訓練過程有直接關係,它要做的是評估一個actor的好壞,好的actor會藉由Critic挑出,Q-learning就是這樣的方法。

Critic的value function V是怎麼評估一個值得?V評估的方法是input進你目前的state,然後給出後面會累積reward的值。可以藉由看下圖理解,如果是遊戲還沒開始多久,畫面上可得分的目標還挺多,V產出的值便會很大。如果目標已經被擊落的差不多了V值便會比較小。但這前提是你的actor夠強,如果actor在前面階段便被射中,當然V值也會較小。

用棋靈王的故事舉個例子,佐為(Critic)告訴阿光(Actor),這個大馬步飛的棋步不好,理由是比較風險高。但過了段時間阿光變強了,佐為反而告訴他是好的,因為現在阿光能力變好了,這棋步雖較有風險,但能帶來好的獲益。

關於V的評估有兩種方法,第一種是Monte-Carlo,MC就是對於你輸入的state,會把未來積累的reward output出來。

這裡是第二個方法,Temporal-difference。TD的做法是輸入兩個state,接著從這兩個state中間求出reward。TD的場景比較偏重於,如果這個訓練是較長比較少停止的,例如訓練機器人走路,終局的reward比較取得,便用這種取得兩邊 output的方法求reward。

MC跟TD的差別在於,MC的方法因為是累積的reward,reward本身因跟環境互動,與自身隨機策略因素關係,較有不確定性,間接有著高方差。但相對的會有unbiased的特性。

TD的方法因為直接求出r值,得到的方差會較小,但因為TD的V較為不確定的關係,值有可能是biased也可能是unbiased。

這邊經由推估比較兩者。這邊先忽略action,假設第一次的𝞽是state a,reward=0,接著state b,reward=0,結束。另外有七次的𝞽,都是state b,六次的reward=1,一次的reward=0。

這裡評估V(state b)可以很快地得出6/8 = 3/4的值,但V(state a)可以得出兩個值,這就基於看是哪種的評估方法。

如果是MC的話,V(state a)最直接看出來就可求得為0。但如果是TD的話,可以看到下面公式V(state b) + reward = V(state a),V(state b) = 3/4,reward是0,那V(state a)不就也等於3/4了嗎?其實這兩個都是對的,僅是方式不一樣而已,再來也有可能樣本不夠充足,或許V(state a)是等於3/4。

這邊要注意的是,或許看到第一個𝞽會懷疑V(state b)是因為前面有state a的關係,但TD的特性是前後不會受到影響的。

再來介紹另一個Critic,這就是有眾所皆知的Q function。跟前面兩的差別是,在input的部分會加一個action去計算值,右下也是一樣,只是在output改成三維的資訊去求值,左右道理其實一樣。

這邊actor指𝛑。首先讓𝛑玩n次遊戲,接著由TD或MC的方式求Q-function,然後在找從裡面找一個好的𝛑’,更新原本的𝛑。

首先我們要定義,什麼是更好的𝛑?包括所有的state,只要你V(state)大於等於原本的,就是更好的actor。

根據𝛑求得Q-function,輸入一個s,窮舉所有的action,找尋使之最大值的action求得𝛑’。實際上𝛑’就是由原本的𝛑而來,沒有額外的參數。

這邊要注意的是,更新𝛑’如果是連續不斷的action,會讓Q function非常地消耗時在計算上,所以Q會比較適合在可窮舉action的案例上。

最後這邊要介紹的是Actro-Critic的結合。

跟上一個介紹的相比,找尋𝛑’的會有Q function跟V function,𝛑’部分不再是依靠𝛑產生Q function窮舉action找出來的,而是會有個實質的數去最大化求值,因此這邊便可以對應可連續的action做應用。

這邊老師沒講,我猜是𝛑跟V function可以共享,把output出的值最大化。因為RL的文獻還沒看太多,可以暫時有這想法,細節跟原理未來繼續探究。

這邊老師也沒說明,不過有給連結是有關A3C的部分,有興趣的朋友可以看看,我時間我來看看,有什麼心得再上來寫blog跟大家分享。

太厲害了!看著像素畫面玩遊戲,雖然電腦跟我們看著理解的不一樣,不過想想應該還有很多應用XD 另外分享個也是robot玩遊戲的網站給大家。

Demo of A3C

裡面有很多讓機器玩遊戲的項目,如果自己寫好算法便可以套上去玩囉!XD

https://playground.riddles.io/

--

--