推薦系統中的EE問題——Bandit演算法

iwtbs_kevin發表於2020-11-19


Exploration and Exploitation(EE問題,探索與開發)是推薦領常見的問題,主要是為了平衡準確性和多樣性。
Exploitation是指我們要迎合使用者興趣給他推薦他想要的,Exploitation指的是怕使用者膩,所以要推一些新的東西,萬一使用者感興趣呢是吧。

多臂老虎機問題就很像推薦這個場景,我們不知道每個機器吐錢的分佈,只能根據現有的知識搖,如果一直搖所知最高的就是Exploitation,但這個吐錢最多的未必是真的,還需要通過Exploitation來探索。

先驗知識

  1. 累積遺憾
    錯誤的選擇到底有多少遺憾,累計遺憾如下
    在這裡插入圖片描述
    t表示輪數,r表示回報。左邊可以認為是最理想情況下的總收益,右邊是自己策略的總收益。

  2. Beta分佈
    beta分佈可以看作一個概率的概率分佈,當你不知道一個東西的具體概率是多少時,它可以給出了所有概率出現的可能性大小。
    在這裡插入圖片描述
    a和b分別代表在a+b次伯努利實驗中成功和失敗的次數

樸素Bandit演算法

先隨機嘗試若干次,統計每個臂的平均收益,選最多的那個一直搖

Epsilon-Greedy演算法

選0-1間較小的數epsilon,每次以epsilon的概率選一個臂,以1-epsilon的概率選目前最好的臂,根據該次回報值對回報期望進行更新。
優點是有了探索的行為,並且可以調整權重,epsilon=0相當於完全不探索。
缺點是實際上epsilon理想情況下應該是動態的,前期多探索,等後期穩定了就少探索一點。

湯普森取樣

使用了beta分佈,假設每個臂都有一個吐錢的概率p,同時每個臂都可以維護一個beta分佈。
誒次選擇臂的方式是:用每個臂現有的beta分佈產生一個隨機數b,選擇所有數中最大的那個搖

UCB演算法

解決Epsilon-Greedy的缺點,因為之前提到了Epsilon-Greedy並沒有利用到之前的資訊,包括臂吐錢的概率和探索的次數。
根據當前每個臂探索的次數和吐錢的次數,其實可以計算出每個臂吐錢的觀測概率P’,真實的概率假設是P,核心就是計算gap
我們先確定兩個事實:(1)每個臂選擇的次數越多,gap越小 (2)對於沒被選中的老虎機,gap會隨著輪數的增大而增大
ucb演算法中p=p’+gap的計算如下:
在這裡插入圖片描述
T是目前的試驗次數,n是臂被試次數

LinUCB

傳統的實現方法存在很大的缺陷,主要是缺乏用附加資訊刻畫決策過程的機制。
在推薦系統中,通常把待推薦的商品作為MAB問題的arm。UCB是context-free類的演算法,沒有充分利用推薦場景的上下文資訊,為所有使用者的選擇展現商品的策略都是相同的,忽略了使用者作為一個個活生生的個性本身的興趣點、偏好、購買力等因素,因而,同一個商品在不同的使用者、不同的情景下接受程度是不同的。故在實際的推薦系統中,context-free的MAB演算法基本都不會被採用。
在LinUCB中,每一個arm維護一組引數,使用者和每一個arm的組合可以形成一個上下文特徵(上下文特徵的特徵維度為d),那麼對於一個使用者來說,在每個arm上所能夠獲得的期望收益如下:
在這裡插入圖片描述
對於一個老虎機來說,假設收集到了m次反饋,特徵向量可以寫作Da(維度為md),假設我們收到的反饋為Ca(維度為m1),那麼通過求解下面的loss,我們可以得到當前每個老虎機的引數的最優解:
其實就是嶺迴歸,我們很容易得到最優解為:
在這裡插入圖片描述
既然是UCB方法的擴充套件,我們除了得到期望值外,我們還需要一個置信上界,但是,我們沒法繼續用Chernoff-Hoeffding Bound的定理來量化這個上界,幸運的是,這個上界已經被人找到了:
在這裡插入圖片描述
因此,我們推薦的item就能夠確定了:
在這裡插入圖片描述
可以看到,我們在計算引數及最後推薦結果的時候,用到了以下幾部分的資訊:上下文特徵x,使用者的反饋c。而這些資訊都是可以每次都儲存下來的,因此在收集到了一定的資訊之後,引數都可以動態更新,因此我們說LinUCB是一種線上學習方法。

相關文章