1. 程式人生 > >Reinforcement Learning 的那點事——強化學習(一)

Reinforcement Learning 的那點事——強化學習(一)

引言

  最近實驗室的專案需要用到強化學習的有關內容,就開始學習起強化學習了,這裡準備將學習的一些內容記錄下來,作為筆記,方便日後忘記了好再方便熟悉,也可供大家參考。該篇為強化學習開篇文章,主要概括一些有關強化學習的內容,以幫助瞭解什麼是強化學習,以及學習方向,部分涉及到的內容將會在後面的篇章中展開詳細的敘述。推薦課程(Utubu上的,需翻牆),B站上也有。

基礎概念和實際運用

 定義

  首先先看一段定義:Reinforcement learning is learning what to do—how to map situations to actions—so as to maximize a numerical reward signal。感覺看英文的定義很容易可以瞭解什麼叫強化學習。

 應用領域

  再來看看強化學習在整個科學領域的應用範圍。

    

   從圖中可以看出,眾多學科都與強化學習有關,增強學習本質上是一門決策學科,通過理解最佳的方式來制定決策。決策科學在電腦科學領域,體現為機器學習,尤其是強化學習;在工程領域,最優控制的實現與強化學習有關聯;神經科學領域最主要的是研究人類大腦如何做出決策,提出多巴胺系統(前段時間谷歌開源了一個強化學習的框架就叫多巴胺),在強化學習中的運用體現為獎勵系統;在心理學領域,也存在類似於神經科學領域的東西,傳統的條件作用以及條件反射實驗探究動物面對事物是如何做出反應,以及為什麼會做出這種反應;在數學方面,可以用一個等價的公式來表示強化學習,可用於研究最優控制,也被稱為運籌學;在經濟學中,博弈論,效用理論以及有限性理的運用,也都是研究人類如何以及為什麼做出決定,並使這些決定的效用最大化。這些都涉及到上述的強化學習的本質。

 強化學習、監督學習、無監督學習

   What makes reinforcement learning different from other machine learning paradigms?

   1、There is no supervisor, only a reward signal. 一個顯而易見的地方是進行強化學習訓練的時候並不存在監督者,沒有人會告訴你,什麼行為是正確的。那麼強化學習的訓練是通過什麼方式進行的呢?強化學習的訓練類似於小孩不斷試錯的過程,會建立一個agent,沒有監督者,但是有獎勵訊號,根據獎勵訊號就可以知道什麼是對什麼是錯,但並不知道採取什麼措施才是最好。

   2、Feedback is delayed, not instantaneous. 第二個區別是強化學習的反饋並不是立刻得到的,可能會有很大的延遲,因此,在強化學習中,做出的一步決策可能需要在經歷很多步之後才能知道這個決策是正確的還是錯誤的。

   3、Time really matters. 另外,在強化學習的過程中,時間很重要,我們是一步一步的進行的,即agent通過採取相應的措施來制定決策,並計算採取措施後會得到多少獎勵,然後agent會嘗試修改決策,使得最終的結果儘可能的好。而這一過程,我們不是在討論獨立分佈的資料,不像傳統的監督學習或非監督學習環境那樣,只需將獨立分佈的資料丟給機器,讓機器自己學習就行了。在這裡,我們面對的是一個動態的系統,agent要和外部環境進行互動,它的每步舉措都會影響下一步的行動,agent會根據環境的影響來採取措施,應對環境的變化。

   4、Agent’s actions affect the subsequent data it receives.

 舉幾個栗子

   光說概念肯定會覺得沒意思,下面將通過幾個已經實現的例子來讓你對強化學習有更好的理解。

     一、直升機的飛行特技表演:通過獎勵函式,來告知直升飛機什麼是好什麼是壞,然後直升飛機去執行那些特技。

     二、backgammon遊戲

     三、處理投資組合

     四、控制發電站

     五、人形機器人行走

  不知道你會不會有個疑問,我之前就存在這個疑問,agent的每次測試是會記住之前的路線,還是重新開始?事實上每次都是重新開始。

  上述的幾個例子在訓練過程中都離不開一個東西——Rewards(獎勵)。那麼,什麼是獎勵呢?如何定義獎勵?

  所謂獎勵,它僅僅是一個數字,一個標量的反饋訊號,我們用隨機變數Rt表示,即每一步T對應一個反饋訊號Rt,表明agent每一步做的怎麼樣,然後將每一步獲得的Rewards加起來,最終獲得一個結果。agent的目標就是使這一結果達到最大。當然,我們可能不僅僅只有這一種方法來訓練agent,但是,這個方法無疑是適用於解決各種各樣問題的。強化學習都遵循這麼一種假設的模型 All goals can be described by the maximisation of expected cumulative reward. 因此可以籠統的將強化學習概括為累計求最大化的問題,我們可以通過標量反饋訊號來求出最大值。

  對於獎勵的定義,比如上面說的直升飛機的特技表演,每當飛機飛行軌跡或者轉圈半徑符合我們的期望時,就會得到一個正向的獎勵,當飛機墜毀時就會得到一個巨大的懲罰。當玩backgammon的時候,勝利了就獲得正向獎勵,這樣agent就會自己尋找獲取最大化獎勵的方式,讓agent嘗試不同的決策,以期望在最後獲取最大的獎勵。對於投資組合問題,獎勵訊號就是錢,最終利潤越大自然越好。對於發電站調控問題,每當產生一單元的電力的時候就獲得正向獎勵,發電量超過安全上限或是調控不符合預期就獲得負向獎勵。對於機器人行走,每向前移動一步,就可以獲取一個正向的獎勵單位,摔倒的時候就獲得負向的獎勵。

  上述的問題都是不同的,乍一看並不存在一個框架適用於所有的這些問題,但我們的目標就是建立統一的框架,使用機器學習的方法,或是用相同的形式應對各種各樣不同的問題,因此,解決這些問題只需要使用相同的agents,相同的想法。

  需要指出的是,我們需要提前計劃,考慮未來。因為此時的行動的影響可能是長期的,可能現在不是我們想要的結果,但經過了幾步之後就變成了想要的結果了。這也就意味著現在需要放棄一些好的獎勵,而在不久的未來則會得到更高的獎勵(更經典演算法裡的貪心有些相反)。例如金融投資問題,直升機表演時加油的問題等  

  大致的訓練過程如下圖

 

   我們在大腦中建立一個演算法即agent,然後再根據周圍的環境的影響以及agent的決策,不斷進行調整,最終達到目的。

  再來幾個概念

    History

      agent在訓練時,一系列的選項序列,觀察,行動,獎勵,稱為history,即agent目前所知道的東西。每一步agent都會採取行動,進行觀察,獲取獎勵一直到第T步,所有的這些過程組成了history,即Ht。

              Ht = O1,R1,A1,...,At−1,Ot,Rt

    後面會發生什麼,實際上都取決於history,agent實際上事從history到action的對映,因此,我們的目標就是建立一個對映,演算法就是從一個history到下一個action的對映,所以agent接下來的action完全依賴於history。

     State

    然而,history並不是很有用,因為它通常會很巨大,而我們希望agents可以活的更久,可以在很短時間內進行互動,因此,我們要研究的是state,state是對資訊的總結,state決定下一步的action,即state包含了我們需要的所有資訊,通過這些資訊,我們就可以採取下一步的action。

    那麼,什麼是state呢?每經歷一個時間步長T,我們就構建一個狀態,它是關於history的函式,

                表示為  St=f(Ht)

    因為state只是關於history的函式,所以state只有經過最後一次觀測才能使合理有效的。

    再來講講state的種類

      1.Environment State:agent所處環境中的資訊決定接下來會發生什麼,例如,機器人在和真實的環境進行互動,真實的環境可以抽象為某些數字的集合,這些數字決定了接下來會發生什麼;或者說一個Atria模擬器,模擬器內有一些內建的狀態,這些狀態決定了模擬器下一步的行動。也就是基於目前所知道的東西,由某種數字集合決定了接下來會發生什麼事情會存在某種狀態來代表此時的所有已知東西,該狀態在下一次觀測與獎勵的時候,又會被重新拆分。但是關於環境,我們需要特別注意的是,環境的狀態對於agents並非總是可見的。

      2.agent state:agent state也是數字的集合,這個集合存在於我們的演算法當中,通過演算法,我們可以使用某個數字的集合,來表示agent目前得到了什麼,接下來該採取的action。無論儲存什麼資訊,捕獲什麼資訊,我們都能用agent狀態來決定下一步的action。要做的action就是如何處理這些觀測資訊,應該記住什麼,拋棄什麼。在建立演算法時,我們經常要討論agent的狀態,通過agent的狀態來挑選下一步的行動。

      3、資訊狀態:我們有時候將資訊狀態稱之為Markov狀態,在我們使用狀態表示法的時候,這些state包含history的全部有用資訊,我們需要做的就是定義某個具有Markov性質的東西。Markov的定義:A state St is Markov if and only if P[St+1 | St] = P[St+1 | S1,...,St],即下一時刻的狀態僅由當前狀態決定,與過去的狀態並沒有太大的關係,換句話說我們只需保留當前狀態。例如之前說過的直升飛機表演的例子,我們會有一個標記,表示直升機當前的位置、速度、角速度、角位置等,而10分鐘前的標記對於下一刻的action肯定是沒有任何影響的,我們只需要關注當前直升飛機的狀態即可。

  agent 

    上面講了那麼多,但都只是講了強化學習中的問題,並沒有涉及解決這些問題的方法。現在將談談強化學習中的agent。agent大概包含三個函式(當然,並不是所有的agent都要用到):Policy、Value、Model。

    Policy:表明agent能夠採取的行動,是一個行為函式,以狀態作為輸入,下一步的決策作為輸出。

     Value:該函式用來評價agent大某種特殊狀態下的好壞,採取某種行動之後的好壞。

     Model:用來感知環境如何變化,這裡環境指的是agent眼裡的環境。

   在強化學習中,agent間最主要的不同之處就是有無Model,沒有Model,就意味著我們不會嘗試去理解環境。相反的是,使用policy和value,根據經驗找到最優策略。而對於有Model的強化學習模型,第一步是建立一個model來表示環境的工作原理,通過這個model知道接下來會發生什麼,並找到最優策略。      

幾個問題

  一、之前說過獎勵是有延時的,那麼該怎麼使用增強學習的方法呢?

    我們會定義一個目標事件,確定一個階段的開始與結束,然後為這個階段定義獎勵,事實上獎勵只會在每個階段結束的時候出現,agent的目標就是在一個階段中採取措施,在階段結束的時刻得到最大化的獎勵。

  二、如果我們的目標是基於時間的,即我們的目標是最短的時間來做某件事,我們該怎麼做?

    一般做法是每經歷一個時間步長,都會有一個值為-1的獎勵訊號,完成目標後就會停下來,總獎勵就是耗費的時間,此時我們就有兩個目標,一是最大化積累的獎勵,二是最短時間達到目標。

   三、有時候會有不同的目標,且目標相互衝突,對於衝突情況該怎麼考慮,比如你該去見你的老闆(老師)還是女朋友(當然對我來說是不存在的,沒有女朋友....)?

    這時候標量的反饋訊號足以處理所有的目標了,我們需要給不同的目標賦予不同的權重值,這樣我們的agent才能挑選措施採取行動。