在手淘的搜尋中,當使用者輸入query進行搜尋之後,一方面有适合他的商品展現出來,另一方面,如何更好地了解使用者意圖,為其推薦更合适的關鍵詞進行細分查找,進而更高效的引導使用者到他想找的商品,也是一件非常重要的事情。

在這裡,我們主要解決的問題是如何根據使用者的曆史以及實時行為,在目前query下,為他推薦更合适的錦囊類型,比如有的使用者對品牌感興趣,有的使用者對風格感興趣,那麼就會根據實時的資訊,在合适的頁面展現合适的錦囊類型。以提高使用者對錦囊的點選率,進而提升引導效率。
整個強化學習位置調控是一個線上實時訓練的過程,其架構圖如下所示:
錦囊子產品:在判斷具體出什麼類型的錦囊時,需要的資料有使用者的實時行為序列,從igraph中擷取,同時還要從dii記憶體中擷取強化學習的模型參數,然後綜合判斷目前需要出的錦囊類型。同時在目前session下,還需要實時的将已經出現過的類型寫入igraph中,當使用者再次翻頁的時候,不會出現重複的錦囊類型。
強化學習主要是通過與環境互動中的trail-and-error,來不斷找到能使得累計獎賞最大的政策一種學習方法。
在Model-Free的強化學習中,主要有兩類方法,一類是Value-Based的方法,即利用值函數估計來選擇最優的動作(比如Q(s,a)),也相應得到了更優的政策,比如Q-learning,SASAR,DQN等,另一類是Policy-Based的方法,采用直接優化政策的方法,比如TRPO,A3C等。 我們在錦囊調控的任務中主要使用過A3C,DQN兩種方法。
1. DQN
DQN是DeepMind在用DRL探索Atari遊戲時提出的,其主要架構就是在傳統的Q-learning方法中引入了DNN(CNN)來進行學習,并在此基礎上加入了Experience Replay,Targrt Network等技巧,并在很多遊戲上達到甚至超過人類玩家水準。在之後的幾個工作裡,也進行了進一步的完善和提高(Prioritised Replay, Double DQN,Duelling Network等等)。其中Nature版本的DQN僞代碼如下所示:
2. A3C
A3C算法的全稱是asynchronous advantage actor-critic,其中actor-critic是在一般的policy-based方法中,也引入了值函數估計的方法來減少方差,如下圖:
而在利用bias term技術來減小方差時,采用了Advantage function來作為bias:
算法基本邏輯如下圖:
當使用者在搜尋中發出一個query,看到頁面,把目前頁面下使用者的一些特征作為此時的狀态,我們要學習的政策就是在這種狀态下應該給出什麼類型錦囊,進而轉移到下一個頁面下,reward也應該根據目标進行設定。
1. state
我們設計State能包含使用者在目前query下的特征以及此時的實時特征,主要有:
User 特征:性别,年齡,購買力等;
User 曆史上對錦囊綜合的以及各類型錦囊的展現點選等情況;
Query的特征;
目前Query下錦囊綜合的以及各類型錦囊的展現點選等點選情況;
……
目前所在Page;
目前頁之前使用者最近100次 PV中對各類型的點選情況;
使用者最近五個動作類型(點選,浏覽,購買等);
使用者最近點選的五個商品的特征;
我們學習的目标就是在目前頁,對于特定使用者狀态,出什麼類型的錦囊,是以這裡我們直接把要出的錦囊類型作為動作。如下圖:
3. 獎賞函數
Reward Function決定了我們想要引導錦囊agent去優化的方向,也即是優化目标。當我們設定了不同的目标時,reward應該做出相應的調整: 單純最大化錦囊的CTR時,可以有類似下面的設定(其中,x表示目前query下點選的錦囊的頁碼)
再結合引導成交等需求,可以有類似如下的設定:(其中,y, z, I代表翻頁頁數,點選次數,是否購買)
1. A3C
錦囊候選類型,一開始沒有引入屬性pid類型,錦囊類型隻有有限的幾種,如相關搜尋、選購熱點、細選等,是以我們采取了A3C算法,直接把類型當做動作,用critic網絡來學習值函數,用Actor網絡來學習policy,actor網絡最後輸出的值經過softmax可以認為是采取各個動作的機率值,Actor網絡形式如下所示:
2. DQN
當我們把屬性pid引入到錦囊中後,候選的錦囊類型(即動作)一下子增加到兩萬多種。如果我們還是采用之前的A3C方法,網絡的輸出需要有兩萬多個節點,顯然是不适用的。是以,我們采取了用DQN+類型ID Embedding的形式來進行學習。也就是說,對每一個候選動作a,先進行embedding,再和s過來的節點進行concat,之後學習的就是他們的Q值,然後再每一個具體query下進行選擇的時候,計算每一個可選的ID的Q value,進而進行決策,這裡隻用到了一個網絡。如下圖:
由于我們擷取的是實時資料,這就可能導緻不同的時間段擷取到的使用者分布差異較大,進而實時學習的模型對受到資料的影響,導緻學習方差加大。
為了減弱這一影響,可以利用Stratified Sampling技術。比如,可以對使用者的年齡分布,性别分布,購買力分布進行統計,擷取一個較為穩定的比例。之後,在一般的random replay的基礎上做一些改變,每次的采樣遵循此比例進行分層的采樣方法,使得樣本更加的穩定,學習的方差也會更小。
除了使用者群體分布變化之外,每一天不同時間段的使用者總數,使用者使用習慣也會發生變化,進而導緻了非模型引發的reward變化(模型沒有變化,整體CTR發生提高,reward提高,而誤認為是模型的正向作用),這就使得學習的評價名額不穩定,可能産生波動的情況。
是以,我們加上了一個比較基準,利用kmonitor實時的統計基準桶裡面的使用者行為,CTR等資訊,利用此來修正reward,比如可以設定為: reward=原始reward-基準桶reward(強迫模型朝着比基準桶更好的方向發展,而不是受一天中不同時間段的影響)。
在采樣方法上,在傳統強化學習的方法之外,也嘗試了Thompson Sampling的方法,該方法主要是去維持每一個類型beta分布來進行學習。
在采取了上述方法後,與基準桶相比,線上的CTR和使用UV得到了一定程度的提升(10個點左右)。
這是一次RL在此類任務上的探索,應該說至少證明了RL是可以勝任這類問題的,不過由于目前每一個query下候選的錦囊類型過少,直接采用一般的監督學習方法,CTR預估等應該就可以達到比較好的結果。
另外,綜合考慮,直接決定與使用者互動的詞語,内容,可能是更好的選擇,更加能給使用者提供幫助。後續錦囊這個産品可以考慮引入更多的互動,這一塊用DL+RL也能很自然的得到一定的結果。
Sutton, Richard S., and Andrew G. Barto. Reinforcement learning: An introduction. Vol. 1. No. 1. Cambridge: MIT press, 1998.
Mnih, Volodymyr, et al. "Playing atari with deep reinforcement learning." arXiv preprint arXiv:1312.5602 (2013).
Mnih, Volodymyr, et al. "Human-level control through deep reinforcement learning." Nature 518.7540 (2015): 529-533.
Mnih, Volodymyr, et al. "Asynchronous methods for deep reinforcement learning." International Conference on Machine Learning. 2016.
Schulman, John, et al. "Trust region policy optimization." Proceedings of the 32nd International Conference on Machine Learning (ICML-15). 2015