1. 程式人生 > >強化學習(RLAI)讀書筆記第十六章Applications and Case Studies(不含alphago)

強化學習(RLAI)讀書筆記第十六章Applications and Case Studies(不含alphago)

強化學習(RLAI)讀書筆記第十六章Applications and Case Studies(不含alphago)


本章描述了強化學習的幾個案例研究。主要想表現在實際應用問題中的一些權衡與問題。比如我們很看重專業知識移植到問題的構建和解決方法中的方式。同樣我們也很關注對於成功的應用都很重要的問題表達。

16.1 TD-Gammon

強化學習中最驚人的一個應用之一是Gerald Tesauro做的backgammon遊戲的演算法。他的程式,也就是TD-Gammon,不需要遊戲背景知識但是仍然能夠接近這個遊戲的世界大師級別。TD-Gammon中使用的學習演算法是TD( λ

\lambda )與非線性函式逼近的直接結合。非線性函式逼近使用的是通過反向傳播TD error來訓練的多層ANN網路。

Backgammon是世界上玩的最多的遊戲之一。遊戲有15個白子15個黑子和一個有24個位置的棋盤,每個位置叫一個點。如圖展示了一個遊戲的棋盤。棋盤中是從白方的視角,此時白方擲了一次骰子,兩個骰子分別是5和2,代表白方能夠移動兩次單個白子,分別移動5個位置和2個位置。這兩次可以選擇同一個子。比如他可以從位置12移動一個白子到17,移動另一個到14。白方的目標是把所有的白子都移動到19-24上然後把棋子拿下棋盤。第一個拿掉自己所有棋子的人獲勝。還有一些複雜的規則,比如如果黑棋子從24移動到22,那麼這個白子會被hit,然後放到中間的長條裡,長條裡現在有個黑子。但是如果一個點上有兩個及以上白子,那麼黑子不能移動到這個點。比如白方就不能用5和2這兩個數字移動位置1上的白子,因為3和6上都有2個以上黑子。連續製造這種阻礙對方移動的棋子是這個遊戲的主要策略。


backgammon還有一些更深的設定這裡不提。有30個棋子以及24個位置(考慮棋盤外和長條,有26個),可能的移動方式是非常大的數量,遠超物理可實現的計算機可以儲存的範圍。每一次投骰子都有大約20個合法移動,考慮到未來的移動,那麼這個遊戲的搜尋樹可能有超過400個有效分支引數,這是不可能使用傳統啟發式搜尋來實現的。

另一方面,這個遊戲和TD演算法又很好的匹配。儘管遊戲高度隨機,但是這個遊戲的狀態還是可以描述的。每次遊戲的最後結果可以看作是一次移動序列的最終反饋。另一方面,目前描述的理論結果不能有效地應用到這個問題。因為遊戲的狀態太多了不可能建立狀態的查詢表。另外對手的移動也是一個不確定和時變數的來源。

TD-Gammon使用的是非線性TD( λ \lambda )。評估值 v ^ ( s , w ) \widehat{v}(s,w) 來表示每個狀態s下獲勝的概率。為了得到這個概率,獎勵值設定為每一步都為0,除了最後獲勝的那步。TD-Gammon使用了一個標準的多層ANN來實現這個值函式,就像是下圖顯示的那樣(實際使用的網路最後一層網路有兩個額外的單元表示每個玩家的獲勝率)。

在這裡插入圖片描述
網路有一個輸入層一個隱藏層和一個輸出層單元組成。輸入時backgammon位置狀態的表示,輸出是那個位置狀態的評估值。

TD-Gammon的第一個版本TD-Gammon 0.0中,位置狀態的表示比較直接,沒有用到什麼遊戲背景知識。下面介紹一下輸入的特徵向量。網路一個有198個特徵維度。每個點使用了4個單位來表示白子的數量。對於只有一個白子的點用1000表示,有兩個用0100表示,有三個的話用0110表示,多於三個那麼用0101表示。

對24個位置每個用4位表示白子,4為表示黑子,就有了192個。剩下的6個有兩個表示的是中間的白條有幾個黑子和白子。兩外兩個表示成功從棋盤中拿下來的黑子和白子的個數。最後兩個表示本方是執黑子還是白子。他使用了非常直接的方式表示棋盤的狀態但只是用了較少的變數。還對每個概念上相關的可能性都提供了一位特徵,而且把它們都放進了0或1的範圍。

有了棋盤狀態的表示,值函式的計算就通過標準的演算法來進行。從輸入開始,每個單元都被加權求和放進隱藏層。隱藏層j的輸出h(j)是加權求和後的非線性sigmoid函式結果。sigmoid的輸出介於0-1之間,自然的解釋是表示一種概率。

TD-Gammon使用了12.2節描述的半梯度形式的TD( λ \lambda )演算法,通過誤差後向傳播演算法來進行梯度的計算。公式為:
在這裡插入圖片描述
w t w_{t} 表示的是神經網路的權值, z t z_{t} 表示資格跡向量,資格跡的更新公式為:
在這裡插入圖片描述
這裡設定 γ \gamma 為1,而且除了獲勝步驟之外的獎勵都為0.因此TDerror通常直接就是 v ^ ( S t + 1 , w ) v ^ ( S t , w ) \widehat{v}(S_{t+1},w)-\widehat{v}(S_{t},w)

為了應用學習演算法我們需要一些遊戲對局的資料。Tesauro通過讓兩個程式進行互相對戰獲取資料。每次移動TD-Gammon考慮接下來20個可能的骰子情況以及相應的局勢。結果位置狀態是6.8節講的afterstates。值函式網路是估計這個狀態對應的值。Tesauro把演算法實現為完全的增量形式,也就是說每次移動都進行更新。

網路引數初始設定為隨機數字,因此剛開始的對局是很隨機的,因此剛開始的表現很差,一局要進行上十萬次的移動才能結束。但後來效能越來越好。

通過自我對弈300000局,TD-Gammon 0.0據說大致能夠打敗以前最好的程式。這很驚人因為之前最好的程式用了人類專家的移動方式來進行訓練,而TD-Gammon 0.0基本是零背景知識。

它的成功暗示了一個簡單的調整:增加backgammon遊戲特徵來表示但是讓它們進行自我對弈。這就是TD-Gammon 1.0。之後的版本TD-Gammon 2.0和2.1又添加了two-ply的搜尋過程。最終版本的3.0和3.1使用了160個隱藏層和three-ply的搜尋。之後的工作他還加入了Trajectory Sampling的方法而非全量搜尋,這帶來了更低的錯誤率但依然保持合理的執行時間。

TD-Gammon對於最好的人類選手如何玩這個遊戲也產生很大的影響。

16.2 Samuel’s Checkers Player

在Tesauro的TD-Gammon之前一個重要的先行者是Arthur Samuel在構建學習玩checkers程式時候的研究工作。Samuel是最先使用啟發式搜尋和現在叫做TD學習法的人之一。我們很重視Samuel的方法和現代強化學習演算法之間的關係並嘗試表達一部分Samuel使用它們的動機。

Samuel最開始在1952年為IBM701寫一個玩checkers的程式。他的第一個學習演算法的程式在1955年完成並且在1956年進行電視展示。後來的版本取得了不錯的遊戲水平,雖然還沒到專家級。

Samuel的程式每次在當前位置進行預先的搜尋,使用了現在叫做啟發式搜尋的方法來決定拓展搜尋樹的方向和何時停止搜尋。最終的棋盤位置使用一個線性逼近的值函式來評估。Samuel採用了Shannon的很多建議,而且採用了它的minimax方法來找到當前最優的動作。從最後結果的評估結果開始回溯,棋盤上的每個局勢都通過參考一直採用最優動作帶來的最終結果來進行評估得分。這一點基於程式會每一步都採取最優動作的假設來決定,而且假設對方會盡可能最小化這個評估得分。當minimax演算法到達搜尋樹的根節點,也就是當前位置的時候,會產生一個在這些假設下的最優動作。當然也採用了一些其它的複雜演算法比如alpha-beta剪枝。

Samuel使用了兩種主要的學習方法,最簡單的他叫做rote learning。它很簡單,由儲存每個之前遇到過的棋盤局勢以及評估值和minimax過程組成。結果是如果之前遇到過的局勢再次被作為搜尋樹結束為止被遇到,那麼搜尋樹可以直接利用儲存的值進而極大減少搜尋樹的層數。最初的問題在於這個演算法並不是直接朝著能夠獲勝的方向前進。Samuel通過在每一次從minimax搜尋樹反饋回評估值時(一個ply)都給當前局勢對應的值減去一個小值來給了它一個“方向感”。Samuel覺得這個方法對最終勝利很重要。rote learning演算法帶來了很緩慢但是連續的進步,特別是對開局和結束的時候很有效果。它的程式後來結果是一個比普通新手要好一些的水平。

Rote learning和Samuel的一些其他工作強烈顯示出temporal-difference 學習的重要想法,也就是說一個狀態的值應該和可能的以後狀態的值相等。他的方法在概念上和Tesauro在TD-Gammon中使用的方法一樣。下圖表示了Samuel演算法的更新過程。每個空心圓表示下一步可能的動作,實心的表示對手的動作。每次更新根據每一次每個人動作之後的狀態來決定評估值。更新從第二個人移動後的局勢開始向著minimax演算法的方向進行。整個過程如圖所示:
在這裡插入圖片描述

Samuel沒有加入顯示的獎勵。最重要的特徵是piece advantage特徵,也就是對於當前局勢下的每個棋子的數目對比敵方棋子的優勢特徵。他對於這個特徵中每個棋子進行了固定權值的加權求和作為評估值。他的程式目標就是促進本方棋子數目的優勢程度,這個優勢程度在checkers裡和輸贏高度相關。

但是Samuel的學習演算法可能丟掉了一個完備的TD演算法中一個重要的部分。TD學習法可以被看成是一種讓它的評估值函式與其自身一致的方式,這在Samuel的演算法裡可以看出來。但是同樣需要一個把值函式和狀態的真實值貼近的方法。通過獎勵值和discounting法以及給最終狀態一個特殊對待都能夠促進這個目標。但是Samuel的演算法裡沒有獎勵值也沒有對於結束狀態的特殊對待。Samuel說自己的值函式本來也應該可以僅僅通過對每個局勢給出固定的值來和真實值保持一致。他希望通過給每個棋子一個固定的較大的權值來抑制這種結果。但是儘管抑制了找到無用評估函式的概率,卻不能夠禁止這種結果。(這幾句不太懂)

因為Samuel的學習過程沒有被限制為只能找到有用的評估函式,因此有可能隨著更多經驗演算法變得更差。Samuel確實也遇到了這個情況。他解釋為可能是陷入了本地最優,但實際上有可能是演算法結果和一個與輸贏無關的評估函式保持了一致。

不考慮這些潛在的問題,Samuel的checkers程式得到了一個比平均更好的結果。這個程式包含了搜尋所有的特徵來找到對於構成評估函式最有用的特徵的能力。Samuel的checker-playing程式被大家看作是人工智慧和機器學習的一個重要成就。

16.3 Watson‘s Daily-Double Wagering

無聊跳過

16.4 Optimizing Memory Control

大部分電腦中使用DRAM做記憶體。Ipek等人設計了一個強化學習演算法來改進DRAM的控制器演算法,表示這個改進可以極大提高程式執行的效率。他們的想法來源於意識到當前的控制器都沒有利用過去對於動作排程的經驗以及沒有考慮長期的排程決策結果。

DRAM中每個單元陣列都有一個快取行,它被用來向陣列中傳輸資料或者從其中讀取。啟用動作叫做“opens a row”,就是把命令中對應位置的記憶體資料傳輸到快取行中。當一行開啟之後我們又可以對其進行讀寫操作。每個讀操作從快取行中傳遞一個字長的資料到外部的資料匯流排中。每個寫操作從外部匯流排中傳遞一個字長的資料到這個快取行中。之後會接到另一個啟用動作,開啟另一個地址讀寫另外的記憶體單元。讀寫當前已經開啟的行會比讀寫新的行更快,因為不需要額外的充能和開啟操作。這也叫座row locality性質。一個記憶體控制器會保有一個記憶體命令佇列,佇列裡儲存從對應的晶片上發來的讀寫記憶體的請求。控制器需要處理這個記憶體系統的指令來解決請求,而且需要很多的時間限制。

控制器的策略極大地影響記憶體系統的效能。最簡單的排程策略就是根據命令到達的先後順序進行處理。但是有時候調整執行的順序會取得更高的效能。他們把排程的過程建模為一個MDP過程,狀態是指令佇列的內容,動作是對於DRAM系統的指令:precharge,activate,read,write和noOp。讀寫的動作獎勵是1,其他動作是0。狀態轉移被看做是一個隨機過程,因為到達指令佇列的指令是隨機的。對這個系統來說每個狀態可行的動作很重要。這裡需要保證與 DRAM系統的一致性,因此對於每個狀態他們都定義了一組可行的動作。這也解釋了為什麼有noOp這個動作。

這個排程演算法選用了Sarsa演算法來進行動作值函式的學習。狀態被表示為一個六個整數表達的特徵。演算法使用了tile coding加hashing實現的線性函式逼近。tile coding有32個方格,每一個表示256個 動作值。

狀態特徵包括指令佇列中的讀請求數量,寫請求數量等等。一個有趣的事情在於在MDP中使用的狀態表示和得到可行動作時使用的狀態表示不一致。因為Tile coding的輸入是從指令佇列的內容中衍生的,因此和硬體實現的很多限制有關。這樣動作限制保證了演算法的exploration不會影響整個系統的完好。

因為這個任務的目標是完成一個能夠及時處理片上指令的排程控制演算法,因此需要考慮硬體實現。具體不說了。

Ipek在模擬環境中評估了他們的演算法與其他三個控制器演算法。最終得到的結果是他們的演算法能夠極大地提高儲存器的效能。但是在片上實現一個機器學習演算法代價太大,因此這個演算法沒有被用到晶片上。儘管如此他也可以說他們的結果能夠比較簡單地提高記憶體控制器的效能而不用選擇更加複雜更加難以實現的方式來達到同樣的效果。

16.5 Human-level Video Game Play

將強化學習演算法應用到實際問題中的一個最重要的挑戰就是如何表示和儲存值函式或者策略。不過不是之前講的那些能夠建立查詢表的狀態很有限的問題,那麼必須要使用引數化的函式逼近方法。無論線性還是非線性,函式逼近都依賴於能夠表達問題狀態的特徵表示。大部分成功的強化學習應用都很大程度歸功於基於人類只是或者特定問題了解的精心設計的特徵表示。

谷歌DeepMind的一組研究者開發了一個驚人的應用例項。例子中的一個深度多層ANN能夠自動化進行特徵設計過程。多層ANN從1986年開始就被用在強化學習中用來函式逼近,也通過將反饋傳播與強化學習結合取得了一些驚人成就。比如之前講的TD-Gammon和Watson的例子。這些應用都是受益於多層ANN學習任務相關的特徵的能力。但是這些例子裡都需要將輸入表示為針對特定問題的設計好的特徵。

Mnih和他的合作者發明了一個強化學習演算法叫做deep Q-network(DQN),它結合了Q-learning演算法和一個深層卷積ANN。在他之前卷積神經網路也取得了很多驚人結果,但是沒有和強化學習廣泛結合。他們使用了DQN來表明一個強化學習智慧體不需要依賴於針對特定問題的特徵集合就能夠達到一個很高的能力級別。為了說明這一點,他們使用DQN通過一個遊戲模擬器完了49款不同的Atari 2600的遊戲。演算法對於49款遊戲每一款都學出來不同的策略,而演算法對於不同的遊戲都使用了相同的輸入和網路結構以及引數。深度卷積神經網路學習到把原始的對於每個遊戲都一樣的輸入變形為能夠針對不同遊戲的值函式需要的表達。這些值函式表達對於每個遊戲達到高水平是必須的。

DQN和TD-Gammon演算法一樣都使用了多層ANN來作為一個半梯度形式的TD演算法的函式逼近,它們的梯度通過反向傳播來計算。但是這裡使用的是半梯度形式的Q-learning演算法而不是TD( λ \lambda )演算法。TD-Gammon演算法計算每次動作後的afterstate的值,但這個狀態對於Atari遊戲很難獲得。另一個使用Q-learning的演算法的動機在於DQN使用了experience replay的方法,這需要一個off-policy的演算法。

在描述DQN演算法細節之前先看看它能夠到達的遊戲水平。Mnih他們比較了DQN和當時紙面成績最好的人類測試員和隨機選擇動作進行對比。紙面成績最好的系統是使用了線性函式逼近加上針對遊戲設計特定特徵的系統。DQN通過與遊戲模擬器進行五千萬幀圖片的互動來學習一個遊戲,這對贏了大概38天的遊戲經驗。測試的所有遊戲中,DQN在除了其中6款外的所有遊戲中都比之前最好的系統玩的更好,也在22款遊戲中玩的比人類選手好。Mnih總結認為DQN演算法學習到的遊戲水平在46個遊戲中的29箇中達到或超過了人類水平。

對於一個人工智慧系統,達到這個水平的效能已經非常驚人了,更加驚人的點在於達到這個水平的是同一個學習系統而且不依賴於任何針對遊戲的調整。

一個人玩這49款Atari遊戲時看到的是210x160畫素點的影象幀,重新整理頻率60Hz且可能有128種顏色。原則上應該就直接輸入這些影象,但是為了節省空間,Mnih預處理了這些影象得到了84x84的色彩陣列。因為遊戲中很多狀態沒法從影象上得到,Mnih儲存了4個最近的影象幀,所以輸入為84x84x4的維度。這沒有將所有遊戲的部分不可見性去除,但是確實讓過程更加的馬爾科夫化了。一個重要的一點是,這些預處理對於46個遊戲都是相同的。由於沒有其它的遊戲知識,我們認為這個輸入向量對於DQN是原始輸入。

DQN的基礎結構和深度卷及網路相同。DQN有三個隱藏層,接了一個全連線層,之後是一個輸出層。這三個連續的隱藏卷積層製造了32個20x20的特徵對映,64個9x9的特徵對映,以及64個7x7的特徵對映。每個特徵對映的啟用函式是rectifier函式(max(0,x))。第三個隱藏層的這3136(64x7x7)個單元都連線到全連線層的512個單元,之後都連線到輸出層的18個單元。這18個單元每個都對應遊戲中的可能動作。可以看作是有18個網路每一個輸出都對應著一個動作的概率,實際上這些網路共享前面幾層,但是輸出層使用不同的方式利用這些共享網路提取出的特徵。

DQN的獎勵訊號表明每一個時間步驟到下一步的遊戲得分的變化:增加得到+1獎勵,減少-1,不變為0。DQN使用的是 ϵ \epsilon -greedy策略,隨著前一百萬幀 ϵ \epsilon 線性變小,後面不變。其他的引數,比如學習步長,discount rate和一些其它用來搜尋之類的引數都固定不變。

DQN在選擇一個動作之後,遊戲模擬器執行動作然後反饋一個獎勵值和下一幀影象。這些影象再放進四幀的棧中之前進行預處理。先不管Mnih對Q-learning演算法的改進,DQN使用了以下的半梯度法的Q-learning演算法來更新網路的權值:
在這裡插入圖片描述
公式中的梯度使用反向傳播演算法進行計算。Mnih使用了mini-batch方法在得到了一小個batch(32幀)的影象的梯度之後再更新權值。相比於每個影象都進行一次更新,這能夠帶來更平滑的樣本梯度。他們也採用了叫做RMSProp的演算法來加速學習過程。

Mnih在基礎的Q-learning演算法上進行了三種改進。第一,使用了一種叫做experience play的方法。這個方法把以前每個時間步的經驗都存起來用來之後的權值更新。每次遊戲模擬器在當前狀態執行完動作轉移到下一個狀態,它都會把 ( S t , A t , R t + 1 , S t + 1 ) (S_{t},A_{t},R_{t+1},S_{t+1}) 四元組存在replay memory裡。這個儲存空間儲存了同一個遊戲的很多次遊戲經驗。每個時間步的Q-learning更新都是通過從這個memory裡隨機採用出的四元組進行的。狀態 S t S_{t} 的下一個狀態不是採取了動作後的 S t + 1 S_{t+1} 而是隨機的一個沒有關聯的狀態。因為Q-learning演算法是off-policy演算法,因此不需要利用一個有關係的軌跡序列。

這個方法提供了很多優勢。能夠從經驗中更加高效地學習。也能夠減小每次更新的方差,因為每次更新一個batch內遇到的都是沒有關係的四元組。並且通過移除掉當前連續經驗對於當前權重的依賴性,更加減少了不穩定性的來源。

第二點改進也是提高穩定性。像其它bootstrap的演算法一樣,Q-learning演算法的更新目標依賴於當前動作值函式的估計值。如果使用了引數化函式逼近方法,那麼正在更新的引數和目標值函式估計使用的是同樣的引數。之前11章中講過這會導致抖動或者發散。

為了解決這個問題,Mnih使用了一個讓Q-learning演算法更加接近監督學習演算法的方式。每次經過一個固定數目C次權值更新,演算法都把當前權值w塞到另一個網路中並存起來,在以後C次更新w時保持不變。而這個權值不變的網路的輸出作為Q-learning演算法更新時的目標值的計算基礎。即:
在這裡插入圖片描述
最後一點對於標準Q-learning演算法的改進也是為了提高穩定性。他們把每次的TD error限制在 [ 1 , 1 ] [-1,1] 的範圍內。

Mnih在其中5個遊戲中訓練和大量的輪次來對比不同改進對於DQN演算法效能的影響。他們使用了四種組合模式,分別對應是否新增experience replay和重複的用來輸出更新目標值的網路的組合。資料表明每種改進都能極大提高演算法效能,而組合起來提高的最明顯。他們還對比了和線性函式逼近的效能,對比結果裡深度卷積網路的版本效果提高驚人。

人工智慧裡一個永恆的目標就是能夠製造出能夠解決不同任務的智慧體。機器學習對於完成這個目標的期望被需要針對問題的特徵所打擊。而DeepMind的DQN演算法作為完成一個單個智慧體對應不同任務的目標的里程碑。這個演算法並不是學出一個能夠解決多種問題的智慧體,而是表明深度學習能夠減少甚至去掉對於針對問題的設計和調整。但是在一些需要人類額外知識的遊戲裡DQN演算法表現得很差。儘管還有一些侷限,但是DQN通過讓人印象深刻地展現出組合強化學習和現代深度學習方法的潛力,極大地提高了機器學習的最好表現。

16.6 Matering the Game of Go

單開了一個文章。

16.7 Personalized Web Services

個性化網站服務,比如新聞或者廣告的推送是提高網站的使用者滿意度的一種方式,也是提高一個市場份額的手段。強化學習系統可以通過對使用者返回的相應調整來改進推薦策略。

在市場營銷中有一個用了很久的方法叫做A/B測試法。這是一種簡化的強化學習演算法,就像是一個有兩個按鈕的老虎機,選擇A或B兩種形式哪種是使用者更喜歡的。因為它是non-Associative的,所以無法個性化內容推送。通過新增使用者的畫像可以支援個性化服務。這樣就可以構成一個contextual bandit問題來提高使用者的點選率。就像Li等人(2010)年通過使用者點選過的新聞故事作為特徵進行個性化雅虎的一個主頁內容一樣。他們的目標是最大化click-through rate(CTR)。

Theocharous等人認為通過將個性化推薦構建為MDP且以最大化使用者重複訪問下點選的數量為目標可以得到更好的結果。通過contextual bandit問題設定中得到的策略是貪心的,因為它沒有考慮動作的長期影響。這些策略對待每一次的訪問都像是這是一個隨機挑選的全新的訪問者一樣。

Theocharous等人用一個買車的例子來對比長期策略和一個貪心策略。當一個打折廣告使用貪心策略進行展示時,使用者可能立即進行點選購買。使用者可能接收廣告或者離開,但是如果他們離開之後回來,還會看到同樣的廣告。而一個長期策略可以在展示最終的打折之前為使用者提供沉浸式體驗。可能先展示一個金融政策,然後稱讚產品有很好的售後,最後在展示打折資訊。這種策略可以帶來重複使用者更多的點選。

作為Adobe公司的員工,Theocharous做了個實驗來觀察設計的策略能不能在長期視角下獲得更多點選。這個實驗的一個重要部分就是線下的評估。他們希望能夠儘量提高這個策略的可信程度來降低應用一個新策略的風險。儘管高可信的線下評估是這個工作的重要部分,我們這裡只關注演算法和結果。

他們比較了兩種演算法。第一種是叫做greedy optimization,最大化即時點選率。另一種演算法是基於MDP結構的強化學習演算法,為了提高每個使用者多次訪問網頁的點選率。後一個演算法叫做life-time-value(LTV)optimization。兩種演算法都要面臨獎勵稀疏的問題,會帶來反饋值很大的方差。

銀行系統的資料集被用來訓練和測試這些演算法。greedy optimization演算法基於使用者特徵來做一個預測點選的對映函式。這個對映通過監督學習來訓練,使用的是隨機森林演算法(RF)。這個演算法被廣泛用在工業中,因為很有效,且不易過擬合而對outlier不敏感。

LTV optimization演算法使用一個batch模式的強化學習演算法叫做fitted QIteration(FQI)。這是fitted value iteration演算法的一個q-learning演算法變體。batch模式意味著這些資料從一開始就是都可以獲得的,和本書之前講的線上形式的需要等待學習演算法執行動作生成資料的演算法不同。

為了評估策略的表現,他們使用了一個CTR指標和LTV指標來進行評估。他們分別是:
在這裡插入圖片描述
下圖表示了這兩種描述的不同點:
在這裡插入圖片描述
實心圓表示了使用者的一次點選。下圖中CTR指標是0.35而LTV是1.5。因為LTV對於個人使用者重複訪問時更大,它是表示一個策略促進使用者與網站進行更多互動的成功程度指示指標。

結果顯示greedy optimization演算法在CTR評估時表現得更好,而LTV optimization在使用LTV評估時更好。另外off-policy評估方法的高可信程度保證了LTV optimization演算法能夠得到對於實施的策略改進。