多臂老虎機問題
多臂老虎機是一個常見的強化學習問題,所以我們首先給出強化學習的一些基礎概念:
強化學習不僅需要學習做什麼,也需要學習如何根據與環境的互動採取相應的行動。強化學習的最終結果,就是要實現系統回報訊號的最大化。學習者事先並不知道要去執行什麼行為,需要自己去發現哪種行動能產生最大的回報。
在強化學習中,有兩個可以進行互動的物件:智慧體和環境。
- 智慧體(agent)可以感知外界環境的狀態(state)和反饋的獎勵(reward),並進行學習和決策。
- 智慧體的決策功能是指根據外界環境的狀態來做出不同的動作(action), 而學習功能是指根據外界環境的獎勵來調整策略。
- 環境(environment)是智慧體外部的所有事物,並受智慧體動作的影響而改變其狀態,並反饋給智慧體相應的獎勵。
Exploration-Exploitation tradeoff
Exploration:探索。這是指在強化學習過程中,探索更多的可能性所付出的代價。 Exploitation:在強化學習中,始終執行目前的最優解付出的代價。
始終執行目前最優解意味著放棄潛在的更優解的可能性,探索更多可能性則意味可能探索到很多收益極低的分支。任何一個強化學習演算法都是這兩者的平衡。
多臂老虎機問題(Multi-Arm Bandit Problem)的起源
部分內容轉載自 ofollow,noindex">從thompson-sampling到增強學習-再談多臂老虎機問題
老虎機是賭場裡最常見的一個裝置,一家賭場裡有那麼多機器,每次搖動都可能後悔或者獲得一定額度的獎勵,你通過選擇不同的老虎機臂最大化自己的利益。
在最原始的多臂老虎機問題中,每個臂可獲得的收益是一定的,不隨著使用者特徵或者上下文環境的變化而變化。即:
問題描述
(Bernoulli Bandit)假設我們有一個K臂老虎機,每一個臂(action)的回報率(reward_i)都是固定的,但是agent並不知道這個回報率是多少,agent如何在T回合內最大化自己的回報(注意,這裡的T通常是遠遠大於K的)。
在網際網路行業,多臂老虎機問題之所以非常流行,是因為這些action可以被看做不同的廣告投放,當用戶來到網站上看到廣告,對每一個廣告有固定的點選率,那麼平臺就需要尋找一種最優策略來顯示廣告,最大化自己的利益。
Problem Formulation
我們在這裡以最簡單的形式定義一個K-臂老虎機,它由K個reward概率分佈 組成,其期望為 , 方差為 。在每一輪嘗試(t = 1, 2, ...)中,玩家選擇一個臂 ,並得到一個回報 。
演算法的目標是最小化total expected regret,而它是這樣定義的:
- 在某一個固定的round T中, ,其中 代表回報最高的臂的期望回報。
- 因此,我們可以將total expected regret表示如下: .其中 是用來指示在前T輪中第k個臂被拉動的次數的隨機變數。
演算法
最簡單的做法就是貪心,模型想辦法計算每一個action的回報,然後選擇回報最大的action進行操作。這種貪心的做法問題就是沒有完全探索其它獎勵概率的可能性,很容易丟掉最優解。
演算法是原始貪心演算法的一個改善解,就是按照概率epsilon進行探索,按照uniform distribution選擇一個臂進行嘗試,按照1-epsilon的概率選擇當前情況下回報率最大的action。儘管這種做法比純貪心的情況好,但是對於下面這種情況,我們通過探索知道action 2的概率遠遠小於action 1,但還是會以一定的概率反覆測試action 2,加大了損失。
簡單地說,給定一個引數 ,演算法在第t+1輪作出的決定為k的概率為:

Thompson Sampling
Thompson Sampling的基礎思想是選擇在概率上成為最優arm最大的arm。它是一個貝葉斯演算法。 為了簡單起見,我們考慮伯努利回報即回報為0或1的MAB問題。在這種情況下, 我們能用Beta分佈來描述每一個action的回報的分佈,我們給分佈先驗概率引數alpha和beta,那麼action的回報的概率密度函式:

即是到trail t-1為止,成功和失敗的次數。 那麼對於伯努利MAB,演算法為

Beta分佈有很多與生俱來的性質,我們觀測到的結果越多,分佈的置信區間就越窄。因此隨著不斷地更新,模型會越來越接近實際情況。
以及,我們可以將伯努利分佈的結果推廣。如果任意一個arm的回報分佈在[0,1]之間,並且平均值為 ,我們在每一次獲得 的reward之後更新結果。我們完成一次成功率為 的伯努利試驗,並用隨機變數 指示試驗的結果。仍然用 記錄到當時輪數為止的成功和失敗次數,我們用下述演算法更新結果:

Upper Confidence Bounds(UCB)
UCB是一個演算法族,包括很多不同的演算法,它們的核心都是對UCB的估計。
最簡單的UCDB演算法是UCB1。對於每個臂,它記錄一個數字 ,代表前t輪第i個arm被選擇的次數。在起始的時候,每個arm都會被選擇一次。之後,在第t輪,它選擇的 可以表達為
LinUCB (Linear UCB)
本部分翻譯自“A Contextual-Bandit Approach to Personalized News Article Recommendation”
LinUCB的關鍵在於引數被定義成了一個d-維的vector。我們定義arm a的引數為 ,並且對於d維的feature vector,任意一個arm的reward為feature vector和引數vector的線性乘積。那麼對於任意一個t,在t輪時,對於d-維的feature,arm a的reward的期望為
LinUCB with disjoint Linear Models
假如各個臂之間不分享引數,我們從稱這樣的模型為LinUCB with disjoint Linear Models。
我們設計一個m*d維的矩陣 ,在第t輪, 由m個training inputs組成(比如說m個之前對於arm a的觀測)。m維的vector 代表對應的response vector。 對於特定的矩陣 ,我們能用嶺迴歸的方法來評估引數矩陣 .
在這一條件下,可以證明至少以 的置信度, ,其中 。這就是這個模型下的UCB。
故在這一模型下,在每一個 trial t,我們選擇 ,其中 。

LinUCB with Hybrid Linear Models
在很多系統中,各個臂之間會有一部分共享引數,每個臂有獨立引數。比如在推薦系統問題中,關於使用者和當前時間的feature可以共享引數,每個item的引數則互相獨立。在這個定義下,我們仍然把獨立部分的引數定義為 ,並定義共享部分的引數為 。因此 。在這種情況下,演算法為:

hLinUCB (Hidden Linear UCB)
本部分內容翻譯自“Learning Hidden Features for Contextual Bandits”。
LinUCB建立於一個假設之上:我們能觀測到所有相關feature並把它們扔進模型。但在現實中這種情況幾乎是不可能的,一定有隱藏的無法觀測的feature存在。在linUCB的基礎上,hLinUCB試圖對隱藏的feature進行建模。它仍然遵循線性模型,但它加入了一個隱藏的feature vector和對應的parameter。
定義 ,其中 。 和 分別代表觀測輸入和隱藏輸入, 則是對應的parameter。這些變數滿足約束 。這些變數中除了 都是未知的,我們設定嶺迴歸的目標為
根據這個式子,我們可以這樣估計 和 。 以及 ,其中

最終,根據UCB作出的選擇為:
