【強化學習1.0】導論 & 多臂賭博機問題(multi-armed bandit)

首發於知乎:【強化學習1.0】導論 & 多臂賭博機問題(multi-armed bandit)

歡迎關注

導論:何爲強化學習?

強化學習(Reinforcement Learning,下面簡稱RL)研究的是在交互中學習的方式。通俗來說,就是“做什麼能讓我們最終的收益最大化”。最常舉例的一個場景就是遊戲,比如下棋。對於每一步都沒有標準答案可供學習,但是最終的收益是固定的,比如勝一場1分、平0分、負一場-1分。因此,一個訓練有素的智能體(agent)應該能夠總結經驗,從而在每一步驟都向着最終取勝而行動。這就是強化學習的基本目標。

強化學習和我們所瞭解的有監督(Supervised)和無監督(Unsupervised)學習方法都不同。有監督的方法有標準答案(標註),而強化學習則沒有一個確切的標註,只能通過環境的反饋和不斷的試錯來學習。

比如說,對於一個object detection來說,每個object class都有很多已經被框好的圖像,因此經過訓練後,model就可以識別出這個class。但是對於RL來說,我們無法對每個情境下給出一個最優的和代表性的動作予以學習。比如說,仍以下棋爲例,我們並不會告訴agent在某個棋局情況下,某一步是最好的。雖然沒有這種標註,但是有最終的收益(勝負)可以供agent進行總結和學習。

但是,又不能說RL是一種無監督學習,爲什麼?因爲所謂的無監督學習,實際上是找到數據的某種隱含結構。比如,k-means試圖找到所有的數據中有哪幾種具有特徵相似性的類別(cluster)。而對於RL來說,我們的目的並非如此,RL的目的不是對數據進行分析,找出代表性的結構,而是找到一種方式,最大化某個收益。因此,RL是有監督和無監督之外的一種新型的領域。

強化學習的重要特點有兩個:1. 與不確定環境交互。2. 目標導向。這兩點在RL中被作爲一個整體進行考慮,即在於環境交互的過程中,達到最終的目標。

RL之所以被很多人看好,一個很直接的原因就是,這種方式像極了我們人類的智力發展以及日常做決策的過程。強化學習擅長處理的問題是各類“遊戲”,其實,我們日常生活中遇到的很多問題都可以視爲某種“遊戲”。比如,股票投資,在何時買入、何時拋出、買入多少?這個任務可以看做是一種遊戲,即我們需要對當前股票情況做判斷,給出行動(action),然後環境變化,重新進行決策,再繼續行動……最終衡量我們遊戲的成功或者失敗的,就是最終的盈虧。如果大賺一筆,自然需要總結經驗,如果被割了韭菜,則需要總結教訓。推而廣之,生活中的各類事情,莫不如此,因此強化學習自然具有很廣泛的應用價值。

強化學習的要素有:

  1. 策略(Policy)

  2. 收益信號(Reward Signal)

  3. 價值函數(Value Function)

  4. 模型(Model) (這個可以沒有)

下面對上面這幾個依次解釋。

首先,所謂策略policy,指的是在某個場景下,agent要採取什麼樣的對策或行爲。所以,policy決定了智能體的實際的動作,因此是RL的核心。策略比較優秀的agent能夠獲得更好的結果,而策略不夠好的,則最終結果也不好。

policy類似於心理學中的“刺激-反應”的規則,因此,它本質上是從環境這個變量到動作這個變量的一個映射。即 s → a,s是state,即當前狀態,a是action,即採取的行動。

還是拿一個真正的智能體舉例。如果我們的agent是一隻兔子,環境變量如果是 {有蘿蔔} ,那麼兔子的行爲就是 {停下來喫},而如果環境變量變成了 {有獵槍},那麼兔子的行爲相應的應該爲 {逃跑}。這是一個最簡單的映射,即一個lookup table就可以表示。基於這樣的策略,兔子可以獲得最終的比較好的收益,就是活命和成長。反之,如果策略不對,當遇到蘿蔔逃跑,遇到獵槍停下來,那麼就會得到不好的收益,即被打死或者被餓死。因此,policy是一個agent的核心,決定了agent的性能。

接下來是收益信號 reward。收益信號指的是,在狀態s下,採取了某個action後,agent獲得的一個激勵信號。收益信號表示的是在短時間內什麼是更好的,什麼是不好的。注意,這裏說的是短時間內。雖然短時間的收益可以輔助我們判斷action好不好,但是,我們最終的目的不是當前的收益最好,而是長遠來看的總收益最高。

繼續舉例:我們都聽說過一個實驗,即延遲滿足實驗。對於一個小孩,發給他一顆糖,如果他喫掉,就只有這一顆,而如果等15分鐘再喫,就可以再得到一顆。這裏,當得到一顆糖後就喫掉,當前的收益(即快樂的感覺)增加了,但是這樣也就使得最終總體的收益變少(只有+1),而如果action爲不喫,那麼最終的收益就是+2。通過這個例子,我們可以看出短期收益和長期收益的區別。因此,我們不能只看reward,而是還要有一種方法來評估最終的長遠收益。這個評估指標就是 價值函數 value function。

價值函數 value function 在強化學習中只一個重要的概念。它表示的是對某個狀態s的長遠收益的評估。比如前面的例子。對於 {喫糖果} 這個action後的狀態 {不再有新糖果},其value就是 0,而對於{不喫糖果} 後轉移到的狀態 {20min後還有糖果},其value就是+2(不考慮時間折扣的話)。價值函數是狀態的函數,記做 V(s) 。它是從當前狀態開始,往後繼續進行下去,將來積累的所有reward的一個期望。因此,value function和reward是有聯繫的。所謂長遠收益,其實也就是對在該狀態所有可能的未來(採取不同action,轉移到不同state)的reward的總和的期望。

 

多臂賭博機問題(multi-armed bandit)

多臂賭博機是一個經典的問題。通常用來作爲RL的入門級demo。所謂的k-armed bandit指的是這樣一個任務:在你面前有一個類似老虎機的k個手柄的遊戲機,每次選擇並拉一個手柄,就會得到一個數值(可能是獎金金額),這個金額是一個隨機數,它的分佈對於每個手柄都是不同的,而你的任務就是在某段時間內獲得儘可能多的獎金。

一開始,我們對這個機器那個arm上的錢更多是沒有任何瞭解的。但是,我們仍然有辦法處理這個問題。那就是有策略的去試探,收集一些實驗結果,並用已經有的結果推測哪個更好,然後繼續實驗。這個很容易理解,通過一定次數的實驗,我們可以獲得一定的樣本,從而對每個arm的分值分佈有一個推測,然後,利用這些已知的經驗,去改變我們的選擇arm的策略,以求最終達到最優。

下面我們用數學的方法來說明這個問題。

首先,我們要明確這個任務的目標是神馬。先看下面這個公式:

這裏,a代表action,即選擇一個bandit,q star (a) 這個函數,一看帶了star,就知道這是一個optimal最優值。那麼這個最優值是怎麼定義的呢?這個值表示在給定了t step時的動作a時,Rt,即t時刻的reward的數學期望。雖然裏面有數學期望E,有At有Rt這些亂七八糟的符號,但其實本質上,這個公式告訴我們,我們要找到action,就是能在t時刻給我們帶來最多的獎金的那個bandit。

如果每個動作的value我們都知道,那麼自然可以直接選擇value最高的。但是我們前面說了,首先,value是不知道的,其次,value不是一個固定的數值,而是一個分佈(假如是固定數值,那我們將k個bandit都試一遍,然後一直拉那個獎金最多的杆子就行了,也沒有這麼複雜的問題)。這時候要怎麼辦呢?

這種情況就要求我們通過一定的trial來得到一組數據,以此作爲經驗,來估計每個動作的價值。一種最簡單的方法就是,在t step之前,我們統計執行某個動作a的次數,以及執行動作a所獲得的reward R 的總和,然後一平均,就知道每個動作的收益的均值了。這個也很樸素和直觀,寫成公式的形式,就是這樣的:

根據統計學的原理,只要次數多,這麼做肯定就能收斂到上面的最優的q star。這個方法被稱爲 採樣平均方法(sample-average)。這是一種動作-價值估計方法,action-value。因爲這個問題還不涉及state,即當前狀態的影響。每個步驟都是獨立的,這一次拉第i個bandit得到的獎勵不會因爲之前的動作有所變化,仍然是從第i個分佈裏隨機取值。

現在我們有了value的估值,下一步就是利用每個bandit的value來選擇如何操作。

最簡單的就是所謂的貪心法(greedy),即我們每次都選那個價值最高的。也就是:

但是這種情況有個問題,因爲我們說了,a只是在當前統計意義上,或者說在期望層面上是回報最大的,但是有沒有可能在某個情況下,其他的action會有更好的效果呢?這個是有可能的。因此,我們採用一種叫做 epsilon-greedy的方法,來進行動作選擇。

在epsilon-greedy中,我們在每個action的時候,都以epsilon(epsilon<1)的概率隨機選擇一個action,而1-epsilon的概率仍然是用greedy的方法,選擇最高value的那個action。我們看下面這個情況,就能明白了。

這裏是一個10-armed bandit,可以看出每個bandit上的取值都是一個標準正態分佈。由於我們對於期望的計算是通過已經發生的action-value數據來計算的,因此在剛開始的時候,由於樣本量少,肯定有不準確的情況,也就是說,當前的value最大的,不一定就是真正value最大的那個,有可能是個次優的。而通過epsilon的概率去隨機選擇, 可以緩和這一情況。這裏,我們將利用最優解的greedy的做法叫做exploitation,而隨機選擇的方法叫做exploitation。

這裏就有一個問題了,那麼什麼情況下我們需要更多的exploitation,而什麼情況下需要更多exploitation?我們設想,如果reward的方差比較大,或者有噪聲、非平穩等等情況下,由於要找到最優解更加困難,所以需要多次exploration,即探索。反之,如果reward分佈比較穩定,且方差較小,就更應該偏重exploitation。舉個極端的例子,如果方差爲0,那麼一次遍歷就搞定了,然後不停取最大的reward即可。這是上面說到過的。

還有一個重要的點,叫做增量式實現。如下:

這裏,R代表每次的reward,由於Q就是一個均值,所以,n+1時刻的Qn+1,可以用Qn和新進來的Rn進行計算。這個推導其實很簡單。爲啥要這樣做呢?因爲,我們需要一個可以時序第更新的方法,新來一次reward,就能將Q更新一次,而且不用把之前所有的都進行保存,只保存上一個時刻的平均值即可。這個小trick在很多地方是挺常用的,比如圖像均值濾波中的一種優化算法就是這樣的,可以減少運算量。

這個增量式方法還可以寫成一個更通用的形式:

 

reference:

  1. Reinforcement Learning: An Introduction, by Sutton, R.S. and Barto

  2. https://github.com/zhoubolei/introRL

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章