經常聽身邊的人說起使用推薦系統的感受,「某寶某東就是看什麼給推什麼」,使用者對推薦系統產生厭倦;也有聽做推薦系統的同學抱怨推薦的冷啟動問題,如何去嘗試新使用者的興趣點,嘗試到什麼時候地步才算真正掌握了使用者的興趣,使用者的興趣發生改變如何靈活的調整推薦策略。這些,都與今天聊到的e&e問題有關,而bandit演算法是解決e&e問題的一種思路。本文首先描述e&e問題的及策略框架,然後介紹幾個代表的bandit演算法。
random, native, e-greedy, softmax, thompson sampling, ucb, ucb1, ucb2, linucb,cofiba,
文章目錄 [展開]
see also:多臂賭博機問題(multi-armed bandit problem, k-armed bandit problem, mab)
其他:……
(1)exploitation:基於已知最好策略,開發利用已知具有較高回報的item(貪婪、短期回報)
advantage:充分利用已知高回報item
disadvantage:陷於區域性最優,錯過潛在更高回報item的機會
(2)exploration:不考慮曾經的經驗,勘探潛在可能高回報的item(非貪婪、長期回報)
advantage:發現更好回報的item
disadvantage:充分利用已有高回報item機會減少(如已經找到最好item)
(3)目標:要找到exploitation & exploration的trade-off,以達到累計回報最大化。
極端情況下,exploitation每次選擇最高mean回報的item(太「confident」),exploration每次隨機選擇乙個item(太不「confident」),兩個極端都不能達到最終目標,因此,在選擇item時,我們不僅要考慮item的mean回報,同事也要兼顧confidence。
面對多個item選擇,我們的選擇到底有多遺憾?如何衡量解決e&e問題的好壞呢?
定義累積遺憾(regret) :
其中,這裡假定選擇每個item的回報為伯努利回報,wb(i)是第i次試驗時被選中item的期望回報, w_opt是所有item中的最佳選擇item的回報。累計遺憾為t次的選擇的遺憾累計,每次選擇的遺憾為最優選擇回報與本次選擇回報之差。
最簡單直接的,我們可以通過簡單觀察法(***** algorithm)選取item:先對每個item進行一定次數(如100次)選擇嘗試,計算item的回報率,接下來選擇回報率高的item。演算法簡單直接,但存在以下問題:
選乙個(0,1)之間較小的數ε,每次決策以概率ε去勘探exploration,1-ε的概率來開發exploitation,基於選擇的item及回報,更新item的回報期望(見「增量更新期望回報」),不斷迴圈下去。
這樣做的好處在於:
雖然ε-greedy演算法在exploration和exploitation之間做出了一定平衡,但
epsilon-greedy演算法的變體:
1)ε-first strategy:首先進行小部分次數進行隨機嘗試來確定那些item能獲得較高回報,然後接下來大部分次數選擇前面確定較高回報的item
2)ε-decreasing strategy: epsilon隨著時間的次數逐步降低,開始的時候exploration更多次數,然後逐步降低(ε_t=1/log(itemselectcnt+0.00001 )),增加exploitation比重(annealing-epsilon-greedy)
增量更新item的回報期望:
由於每次決策都是基於各item的歷史回報均值,那麼隨著決策次數的增多,儲存歷史回報的空間消耗會越來越大,計算歷史回報平均值的計算量也會越來越大,為了提高效率,對於歷史回報平均值的計算可以做一下變形:
ε-greedy在探索時採用完全隨機的策略,經常會選擇乙個看起來很差的item,此問題的解決方法之一是,基於我們目前已經知道部分item回報資訊,不進行隨機決策,而是使用softmax決策找出回報最大的item。
其中,t為溫度引數,溫度高則選擇各item的概率趨於隨機,溫度低則以更確定性的概率選擇當前平均回報最好的item(greedy)。
softmax利用softmax函式來確定各item的回報的期望概率排序,進而在選擇item時考慮該資訊,減少exploration過程中低回報率item的選擇機會,同時收斂速度也會較ε-greedy更快。
但是,softmax演算法的缺點是:
softmax變體:annealing-softmax:
隨著策略的執行,我們期望降低t溫度引數以減小exploration所佔的比例:t=1/log(itemselectcnt+0.0000001)
統計學中,我們使用置信區間來度量估計的不確定性/置信性。如我們搖骰子一次得到的點數為2,那麼得到均值的估計也是2(實際平均點數是3.5),但顯然這個估計不太靠譜,可以用置信區間量化估計的變化性:骰子點數均值為2,其95%置信區間的上限、下限分別為1.4、5.2。
ucb思想是樂觀地面對不確定性,以item回報的置信上限作為回報預估值的一類演算法,其基本思想是:我們對某個item嘗試的次數越多,對該item回報估計的置信區間越窄、估計的不確定性降低,那些均值更大的item傾向於被多次選擇,這是演算法保守的部分(exploitation);對某個item的嘗試次數越少,置信區間越寬,不確定性較高,置信區間較寬的item傾向於被多次選擇,這是演算法激進的部分(exploration)。
其計算item期望的公式:
其中,x_j是item_j的平均回報,n_j是item_j截至當前被選擇的次數,n為當前選擇所有item的次數。上式反映了,均值越大,標準差越小,被選中的概率會越來越大,起到了exploit的作用;同時哪些被選次數較少的item也會得到試驗機會,起到了explore的作用。
與ε-greedy演算法、softmax演算法相比,這種策略的好處在於:
ucb1演算法的缺點:
ucb1演算法描述
ucb2演算法描述
基於ucb1的思想進一步改進,ucb2使得累計遺憾regret界線更小
其中,linucb
上述演算法均沒用充分利用上下文資訊contextual,而linucb的基本思想是對每個item的回報估計及其置信區間同時建模,然後每次選擇回報的估計值與其標準差的和最大的那個item,因此linucb在推薦系統中,能夠較好地平衡顯示使用者已經喜歡的某類文章和對其他沒怎麼看過的類別的文章,從而引導使用者對未知類別的探索。
ucb演算法部分使用概率分布(僅置信區間上界)來量化不確定性。而thompson sampling基於貝葉斯思想,全部用概率分布來表達不確定性。
假設每個item有乙個產生回報的概率p,我們通過不斷試驗來估計乙個置信度較高的概率p的概率分布。如何估計概率p的概率分布呢? 假設概率p的概率分布符合beta(wins, lose)分布,它有兩個引數: wins, lose, 每個item都維護乙個beta分布的引數。每次試驗選中乙個item,有回報則該item的wins增加1,否則lose增加1。每次選擇item的方式是:用每個item現有的beta分布產生乙個隨機數b,選擇所有item產生的隨機數中最大的那個item。
相比於ucb演算法,thompson sampling:
推薦系統實戰(1) EE問題
主要是以多臂 為例子,講述bandit演算法。下面兩篇文章結合起來看 1 2 import numpy as np import matplotlib.pyplot as plt import math 個數 number of bandits 10 的臂數 number of arms 10 嘗試...
推薦系統中的Graph Model
推薦中對graph model的研究主要有兩個方面,乙個是如何構圖,另乙個是如何在圖上做ranking。關於構圖問題,取決於資料,首先考慮如果我們只有user item的資料,那麼最簡單的方法就是構造二分圖,兩類節點,user節點和item節點,如果user喜歡item,就在他們中間連一條邊。如果我...
Min Hash和推薦系統
min hash和推薦系統 it癮 標籤 未分類 分享到 出處 前幾年看google news recommendation的那篇 對裡面提到的minhash的演算法基本沒有注意,因為之前的習慣都是只注意 的模型那塊,至於怎麼優化模型一般都只是掃一眼。不過最近看了大量的google 發現google...