1.強化學習基礎
1.1 強化學習概念
強化學習通常用馬爾科夫決策過程(Markov Desicision Process)來描述:機器(agent)在環境(environment)中,狀態空間為S,其中每個狀態s∈S是機器所處于的環境的描述;機器所能采取動作(Action),其空間為A;若機器采取動作a∈A作用于當前狀態s,潛在的轉移概率p會使得環境當前狀態s按某種概率轉移到另一狀態s',同時環境會根據潛在的獎賞函數(Reward)給機器反饋一個獎賞。因而,強化學習可以用四元組E=<S,A,P,R> 來表達。其圖示如下:
以下舉例說明:
不同的state采取不同的action,會有一定概率發生狀態轉移,最后得到不同的reward。
機器要做的是在環境中不斷嘗試學習到一個最優的策略π,根據該策略,能知道狀態s下需要執行的動作a=π(x)。策略優劣取決于長期執行該策略的累計獎賞,它有多種計算方法,包括T步累計獎賞、γ折扣累計獎賞等。其中γ累計折扣獎賞公式如下:
可以看到強化學習與監督學習不同的是,最終獎賞一般會體現在 多步 動作之后,從某種意義上來說,可以看作具有“延遲標記信息”的監督學習問題。而強化學習的最簡單形態,最大化單步獎賞,對應的正是多臂老虎機理論。
1.2 多臂老虎機(MAB)
一個賭徒,要去搖老虎機,走進賭場一看,一排老虎機,外表一模一樣,但是每個老虎機吐錢的概率可不一樣,他不知道每個老虎機吐錢的概率分布是什么,那么想最大化收益該怎么整?這就是多臂賭博機問題(Multi-armed bandit problem, K-armed bandit problem, MAB)。
拉加維加斯老虎機
如果賭徒知道每個搖臂的期望獎賞,那么他只需要“僅利用(exploitation-only),即只要一直按下最大獎賞的搖臂。如果僅為獲知每個搖臂的期望獎賞,則采用“僅探索(exploration-only)”,即輪流按下每個搖臂。事實上,“僅利用”和“僅探索”都難以實現累計獎賞最大化。事實上,“探索”和“利用”是矛盾的,欲使累計獎賞最大化,那就需要折中兩者。
1.3 Bandit算法
Bandit算法有非常多種,我們采用累積遺憾(regret)來評估一個算法好壞。
MAB的每個臂的收益非0即1,也就是伯努利收益。算法每次選擇后,計算和最佳的選擇差了多少,然后把差距累加起來就是總的遺憾。
ε-Greedy
選一個(0,1)之間較小的數ε,每次決策以概率ε去勘探Exploration,1-ε的概率來開發Exploitation,基于選擇的item及回報,更新item的回報期望,不斷循環下去。
SoftMax
SoftMax利用softmax函數來確定各item的回報的期望概率排序,進而在選擇item時考慮該信息,減少exploration過程中低回報率item的選擇機會,同時收斂速度也會較ε-Greedy更快。
UCB
Upper Confidence Bound,步驟如下: 初始化:先對每一個臂都試一遍; 按照如下公式計算每個臂的分數,然后選擇分數最大的臂作為選擇:
其中,x_j是item_j的平均回報,n_j是item_j截至當前被選擇的次數,n為當前選擇所有item的次數。上式反映了,均值越大,標準差越小,被選中的概率會越來越大,起到了exploit的作用;同時哪些被選次數較少的item也會得到試驗機會,起到了explore的作用。
LinUCB
UCB沒用充分利用上下文信息Contextual,而LinUCB的基本思想是對每個item的回報估計及其置信區間同時建模,然后每次選擇回報的估計值與其標準差的和最大的那個item,因此LinUCB在推薦系統中,能夠較好地平衡顯示用戶已經喜歡的某類文章和對其他沒怎么看過的類別的文章,從而引導用戶對未知類別的探索。
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。
以上各種算法在不同的性能:
2. 多臂老虎機的推薦應用
2.1 冷啟動
計算機廣告和推薦系統中,有很多問題可以抽象為E&E問題:
- user冷啟動:假設一個用戶對不同類別的內容感興趣程度不同,那么我們的推薦系統初次見到這個用戶時,怎么快速地知道他對每類內容的感興趣程度?
- item冷啟動:假設資源池有若干新item,怎么知道該給每個用戶展示哪個,從而獲得最大的點擊,同時還能保證每個item得到一定的曝光?
這些都是糖豆在實際線上業務遇到的問題,我們采用 Thompson sampling算法來解決推薦過程遇到的E&E問題。
public class BandItTask {
public void editorLiteVideo(){
// 獲得beta 分布
Random r = new Random();
Map<String, Double> map = new TreeMap<String, Double>();
for (Iterator<String> iterator = videos.keySet().iterator(); iterator.hasNext();) {
String vid = iterator.next();
Map<String,String> mab = null;
try{
mab = predis.hgetAll("mab_"+vid);
}catch(Exception e){
mab = new HashMap<>();
logger.error("",e);
}
double win=1.00, lose = 1.00;
if (null == mab || mab.isEmpty()){// 如果還沒有lose,win
if (null == items || !items.contains(vid)){ //并且沒有給過初始化的sample值,給個初始化值
win = Convert.toDouble(mab.get("win"),(double)r.nextInt(100));
lose = Convert.toDouble(mab.get("lose"),(double)r.nextInt(100));
}
}else{
win = Convert.toDouble(mab.get("win"),win);
lose = Convert.toDouble(mab.get("lose"),lose);
}
BetaDistribution beta = new BetaDistribution(win, lose);
double p = beta.sample();
map.put(vid, p);
logger.debug("editorLiteVideo - for sample, vid :"+vid+", mab :"+mab+", win :"+win+", lose :"+lose+", p :"+p);
}
Logger logger = Logger.getLogger(BandItTask.class);
}
2.2 效果評估
MAB的應用在糖豆不同的推薦數據集和不同用戶群體上多次AB測試結果顯示,相較僅探索、加權平均分配、階梯分配等方法,MAB算法的CTR提升了20%~50%。尤其是item和user都是冷啟動的場景,能夠帶來非常顯著的提升。
3. 不足與改進
不足:
- 目前我們實現的MAB是batch形式,會帶來不必要的累積regret。
- 另外bandit實驗數據未能和內容分類結合,形成推薦知識累積閉環。
改進:
- 研究MAB的收斂界,增量更新分布,減少regret
- 研究對比其他contextual bandit