一個轉角
事情是這樣的,最近小夕在做NLP多工學習相關的一些工作嘛,然後有一天,老大甩給小夕一篇paper
NAACL2019 | AutoSeM: Automatic Task Selection and Mixing in Multi-Task Learning
誒?看起來很有意思的樣子,輔助任務不用自己選啦?mix ratio不用手調了?上圖上圖!!
不過小夕最近大半年的時間裡煉丹煉多了(都怪BERT,又讓我的數學退化了(。 ́︿ ̀。)),論文裡各種熟悉的名詞如Beta分佈,Gamma函式等竟然都一時沒想起來是什麼,LDA白學了啊喂。
雖然可以透過上面這張圖感性的理解Multi-arm Bandit(MAB,多臂老虎機)的原理,但是理性的數學公式這個小夕曾經覺得最直觀的表達方式如今卻變得如此陌生!!!天,我也太墮落了叭!於是最近藉著這篇paper把相關的數學概念和MAB相關的一些理論啃一啃,真的不能變成一個無腦煉丹的攻城師啊喂(╯°□°)╯︵ ┻━┻
RL核心問題
要了解MAB (multi-arm bandit),首先我們要知道它是強化學習 (reinforcement learning) 框架下的一個特例。
先來重新回顧一下什麼是強化學習,以及RL的核心問題是什麼。
我們知道,現在市面上各種“學習”到處都是。比如現在大家都特別熟悉機器學習(machine learning),或者許多年以前其實統計學習(statistical learning)可能是更容易聽到的一個詞。那麼強化學習的“學習”跟其它這些“學習”有什麼區別呢?
這裡自然沒有什麼標準答案,有這樣一個解釋(也可見Sutton & Barto第二章引言):在傳統的機器學習中,主流的學習方法都是所謂的“有監督學習”(supervised learning),不管是模式識別,神經網路訓練等等,你的分類器並不會去主動評價(evaluate)你透過每個樣本所得到的訓練結果(反饋),也不存在主動選擇動作(action)的選項(比如,可以選擇在採集了一些樣本之後去採集哪些特定的樣本)。
意思就是,在這些傳統的機器學習方法中(實際上也包括其它無監督學習或者半監督學習的很多方法),你並不會動態的去根據收集到的已有的樣本去調整你的訓練模型,你的訓練模型只是單純被動地獲得樣本並被教育(instruct,作為對比,active learning主要就是來解決這一問題的)。
而強化學習主要針對的是在一個可能不斷演化的環境中,訓練一個能主動選擇自己的動作,並根據動作所返回的不同型別的反饋(feedback),動態調整自己接下來的動作,以達到在一個比較長期的時間段內平均獲得的反饋質量。因此,在這個問題中,如何evaluate每次獲得的反饋,並進行調整,就是RL的核心問題。
這麼講可能還比較抽象,但如果大家熟悉下圍棋的AlphaGo,它的訓練過程便是如此。我們認為每一局棋是一個episode。整個的訓練週期就是很多很多個epsiode。那麼每個episode又由很多步(step)構成。
動作——指的就是阿法狗每步下棋的位置(根據對手的落子而定)
反饋——每一次epsiode結束,勝負子的數目。
顯然,我們希望能找到一個RL演算法,使得我們的阿法狗能夠在比較短的epsisode數目中透過調整落子的策略,就達到一個平均比較好的反饋。當然,對這個問題來說,我們的動作空間(action space,即可以選擇的動作)和狀態空間(state space,即棋盤的落子狀態)的可能性都是極其大的。因此,AlphaGo的RL演算法也是非常複雜的(相比於MAB的演算法來說)。
Bandit老虎機
多臂老虎機簡稱MAB,我們先考慮最基本的MAB問題。
如上圖所示,你進了一家賭場,假設面前有 K 臺老虎機(arms)。我們知道,老虎機本質上就是個運氣遊戲,我們假設每臺老虎機 i 都有一定機率 p_i 吐出一塊錢,或者不吐錢( 機率 1-p_i )。假設你手上只有 T 枚代幣(tokens),而每搖一次老虎機都需要花費一枚代幣,也就是說你一共只能搖 T 次,那麼如何做才能使得期望回報(expected reward)最大呢?
這就是最經典的MAB場景。
那麼問題的核心是什麼呢?自然,我們應該要假設 p_i 們是不太一樣的(不然怎麼搖都一樣了),即有一些老虎機比較“好”(更容易吐錢),有一些則比較“差”(不太容易吐錢)。回到RL的框架,我們的動作是什麼?即每次搖哪臺老虎機。我們的反饋呢?即我們搖了某臺特定的老虎機當回合可以觀察它吐了錢沒有。
這裡當然還有個重要的統計學/哲學問題:即我們是貝葉斯人(Bayesian)還是頻率學家(frequentist)。
對貝葉斯人來說,我們在一進入賭場就對每臺老虎機扔錢的機率 p_i 就有一個先驗分佈(prior distribution)的假設了,比如一個很常見的我們可以用Beta分佈。如果我們認為大機率 p_i 都應該是0.5,即對半開,而不太可能出現一些很極端的情況,我們就可以選擇Beta(1,1)分佈作為我們的先驗分佈。然後在我們真正搖了老虎機之後,根據相應的反饋,我們就可以調整 p_i 們相應的後驗分佈(posterior distribution)。
比如如果某臺機器搖了四五次一直吐不出錢,我們就應該將這臺機器的吐錢機率的分佈往左推,因為它的 p_i 大機率應該是小於0.5的。那麼,你的任務便是要在有限的時間內找出 p_i後驗分佈比較靠右的那些機器(因為他們更容易吐錢),並且儘可能多的去搖這些比較賺錢的機器。
而如果你是頻率學家,就沒什麼先驗或者後驗分佈了,你假設你一開始對這些機器的吐錢機率一無所知。你認為每個機器的p_i 是個確定的值。那麼,你的任務就是要在有限的時間內找到那些高 p_i 的機器,並儘可能多的去搖它們,以獲得更多的回報。
那麼這裡我們注意到這類問題的一大特點,即我們只有 T 次搖機器的機會,如何去平衡這 T 次中exploration(探索)和exploitation(挖掘)的次數。探索意味著廣度,比如如果你是頻率學家,你一開始什麼都不知道,你至少每個機器都需要稍微搖幾次(假設 T>K ) ,不然問題就無法搞定了)才能對每個機器吐錢機率有個大概感覺。然後,你可能會縮小你的搜尋範圍,再幾臺機器裡重點實驗,最後可能就專門搖一臺你覺得最容易吐錢的機器了。當然,我們之後會看到這種辦法也未必是最好的。
一些MAB變種
最後說下MAB問題可能的一些(更復雜的)變種。首當其衝的在於,我們前面的討論預設了環境是不會變化的。而一些MAB問題,這個假設可能不成立,這就好比如果一位玩家發現某個機器的 p_i 很高,一直搖之後賭場可能人為降低這臺機器吐錢的機率。在這種情況下,MAB問題的環境就是隨著時間/玩家的行為會發生變化。
這類問題,在合理的假設下,也是有不少研究和相應的演算法的。目前做的最多的假設,也就是所謂的adversarial bandit(就不是stochastic bandit了),就是說這些 p_i 會被一個“對手”(也可以看成上帝)設定好。如果這是事先設定好,並且在玩家開始有動作之後也無法更改,我們叫做oblivious adversary setting; 如果這個對手在玩家有動作之後還能隨時更改自己的設定,那就叫做adaptive adversary setting, 一般要做成zero-sum game了。此外,最近也有一些隨機但nonstationary的假設下的工作。
另外MAB有一類很重要的變種,叫做contextual MAB(cMAB)。幾乎所有線上廣告推送(dynamic ad display)都可以看成是cMAB問題。在這類問題中,每個arm的回報會和當前時段出現的顧客的特徵(也就是這裡說的context)有關。
另外,如果每臺老虎機每天搖的次數有上限,那我們就得到了一個Bandit with Knapsack問題,這類問題以傳統組合最佳化裡的揹包問題命名,它的研究也和最近不少研究線上揹包問題的文章有關,之後我們也會專門討論。還有很多變種,如Lipshitz bandit, 我們不再有有限臺機器,而有無限臺(它們的reward function滿足利普西茨連續性)等。
最後,雖然轉角遇到的不是愛,而是老虎機,但是看起來也蠻好玩的嘛!