機器學習排序算法:RankNet to LambdaRank to LambdaMART


使用機器學習排序算法LambdaMART有一段時間了,但一直沒有真正弄清楚算法中的所有細節。

學習過程中細讀了兩篇不錯的博文,推薦給大家:

梯度提升樹(GBDT)原理小結

徐博From RankNet to LambdaRank to LambdaMART: An Overview

但經過一番搜尋之后發現,目前網上並沒有一篇透徹講解該算法的文章,所以希望這篇文章能夠達到此目的。

本文主要參考微軟研究院2010年發表的文章From RankNet to LambdaRank to LambdaMART: An Overview$^1$,並結合自己的理解,試圖將RankNet、LambdaRank和LambdaMART這三種算法的所有算法細節講解透徹。

1. 概述

RankNet、LambdaRank和LambdaMART是三個關系非常緊密的機器學習排序算法。簡而言之,RankNet是最基礎,基於神經網絡的排序算法;而LambdaRank在RankNet的基礎上修改了梯度的計算方式,也即加入了lambda梯度;LambdaMART結合了lambda梯度和MART(另稱為GBDT,梯度提升樹)。這三種算法在工業界中應用廣泛,在BAT等國內大廠和微軟谷歌等世界互聯網巨頭內部都有大量應用,還曾經贏得“Yahoo!Learning To Rank Challenge(Track 1)"的冠軍。本人認為如果評選當今工業界中三種最重要的機器學習算法,以LambdaMART為代表的集成學習算法肯定占有一席之地,另外兩個分別是支持向量機和深度學習。

2. RankNet

2.1 算法基礎定義

RankNet解決如下搜索排序問題:給定query集合,每個query都對應着一個文檔集合,如何對每個query返回排序后的文檔集合。可以想象這樣的場景:某位高考生在得知自己的成績后,准備報考志願。聽說最近西湖大學辦得不錯,所以就想到網上搜搜關於西湖大學的資料。他打開一個搜索引擎,輸入“西湖大學”四個字,然后點擊“搜索”,頁面從上到下顯示了10條搜索結果,他認為排在上面的肯定比下面的相關,所以就開始從上往下一個個地瀏覽。所以RankNet的目標就是對所有query,都能將其返回的文檔按照相關性進行排序。

RankNet網絡將輸入query的特征向量$x\in \mathbb{R}^n$映射為一個實數$f(x) \in \mathbb{R}$。RankNet采用pairwise的方法進行模型訓練。具體地,給定特定query下的兩個文檔$U_i$和$U_j$,其特征向量分別為$x_i$和$x_j$,經過RankNet進行前向計算得到對應的分數為$s_i=f(x_i)$和$s_j=f(x_j)$。用$U_i \rhd U_j$表示$U_i$比$U_j$排序更靠前(如對某個query來說,$U_i$被標記為“good”,$U_j$被標記為“bad”)。繼而可以用下面的公式來表示$U_i$應該比$U_j$排序更靠前的概率:$$P_{ij} \equiv P(U_i \rhd U_j) \equiv \frac{1}{1+e^{-\sigma(s_i-s_j)}}$$這個概率實際上就是深度學習中經常使用的sigmoid函數,參數$\sigma$決定sigmoid函數的形狀。對於特定的query,定義$S_{ij} \in \{0,\pm1\}$為文檔$i$和文檔$j$被標記的標簽之間的關聯,即

$$ S_{ij}=\left\{
\begin{aligned}
1&&     文檔i比文檔j更相關\\
0&&    文檔i和文檔j相關性一致\\
-1&&   文檔j比文檔i更相關
\end{aligned}
\right.
$$

定義$\overline{P}_{ij}=\frac{1}{2}(1+S_{ij})$表示$U_i$應該比$U_j$排序更靠前的已知概率,則可以用交叉熵定義優化目標的損失函數:$$C=-\overline{P}_{ij}log{P_{ij}}-(1-\overline{P}_{ij})log(1-P_{ij})$$

如果不太熟悉什么是交叉熵,可以參考宗成慶老師的《統計自然語言處理》2.2節“信息論基本概念”,里面將熵、聯合熵、互信息、相對熵、交叉熵和困惑度等概念都講得相當清楚。

結合以上多個公式,可以改寫損失函數$C$為:$$C=\frac{1}{2}(1-S_{ij})\sigma(s_i-s_j)+log(1+e^{-\sigma(s_i-s_j)})$$

對於$S_{ij}=1$,$$C=log\left(1+e^{-\sigma(s_i-s_j)}\right)$$

然而對於$S_{ij}=-1$,$$C=log\left(1+e^{-\sigma(s_j-s_i)}\right)$$

可以看出損失函數$C$具有對稱性,也即交換$i$和$j$的位置,損失函數的值不變。

分析損失函數$C$的趨勢發現,如果對文檔$U_i$和$U_j$的打分可以正確地擬合標記的標簽,則$C$趨向於0,否則$C$趨向於線性函數。具體地,假如$S_{ij}=1$,也即$U_i$應該比$U_j$排序高,如果$s_i>s_j$,則擬合的分數可以正確排序文檔$i$和文檔$j$,$$\lim \limits_{s_i-s_j\rightarrow\infty}C=\lim \limits_{s_i-s_j\rightarrow\infty}log\left(1+e^{-\sigma(s_i-s_j)}\right)=log1=0$$

如果$s_i<s_j$,則擬合的分數不能正確排序文檔$i$和文檔$j$,$$\lim \limits_{s_i-s_j\rightarrow\infty}C=\lim \limits_{s_i-s_j\rightarrow\infty}log\left(1+e^{-\sigma(s_i-s_j)}\right)=log\left(e^{-\sigma(s_i-s_j)}\right)=-\sigma(s_i-s_j)$$

利用神經網絡對模型進行訓練,目前最有效的方法就是反向傳播算法。反向傳播算法中最核心部分就是損失函數對模型參數的求導,然后可以使用下面的公式對模型參數進行迭代更新:

$$w_k\leftarrow{w_k}-\eta\frac{\partial{C}}{\partial{w_k}}={w_k}-\eta\left(\frac{\partial{C}}{\partial{s_i}}\frac{\partial{s_i}}{\partial{w_k}}+\frac{\partial{C}}{\partial{s_j}}\frac{\partial{s_j}}{\partial{w_k}}\right)$$

損失函數$C$對$s_i$和$s_j$的偏導數為:$$\frac{\partial{C}}{\partial{s_i}}=\sigma\left(\frac{1}{2}(1-S_{ij})-\frac{1}{1+e^{\sigma(s_i-s_j)}}\right)=-\frac{\partial{C}}{\partial{s_j}}$$

$s_i$和$s_j$對$w_k$的偏導數可根據神經網絡求偏導數的方式求得。求得了損失函數$C$對神經網絡模型參數$w_k$的偏導數之后,就可以使用梯度下降算法對其更新。這里的學習率$\eta$也是一個正數,因為$\eta$需要滿足下面的不等式:$$\delta C=\sum_{k}\frac{\partial{C}}{\partial{w_k}}\delta w_k=\sum_{k}\frac{\partial{C}}{\partial{w_k}}\left(-\eta\frac{\partial{C}}{\partial{w_k}}\right)=-\eta\sum_{k}\left(\frac{\partial{C}}{\partial{w_k}}\right)^2<0$$

2.2 RankNet分解形式:加速RankNet訓練過程

2.1節中定義的RankNet,對於每一個文檔對$(U_i$,$U_j)$都將計算損失函數對神經網絡的參數$w_k$的偏導數,然后更新模型參數$w_k$。這樣做的缺點在於,對模型參數更新慢,耗時長。所以本節講解如何通過分解組合的方式加快這一訓練過程。

對於給定的文檔對$U_i$和$U_j$,損失函數$C$對參數$w_k$的偏導數為:$$\frac{\partial{C}}{\partial{w_k}}=\frac{\partial{C}}{\partial{s_i}}\frac{\partial{s_i}}{\partial{w_k}}+\frac{\partial{C}}{\partial{s_j}}\frac{\partial{s_j}}{\partial{w_k}}=\sigma\left(\frac{1}{2}(1-S_{ij})-\frac{1}{1+e^{\sigma(s_i-s_j)}}\right)\left(\frac{\partial{s_i}}{\partial{w_k}}-\frac{\partial{s_j}}{\partial{w_k}}\right)=\lambda_{ij}\left(\frac{\partial{s_i}}{\partial{w_k}}-\frac{\partial{s_j}}{\partial{w_k}}\right)$$

其中:$$\lambda_{ij}=\frac{\partial{C(s_i-s_j)}}{\partial{s_i}}=\sigma\left(\frac{1}{2}(1-S_{ij})-\frac{1}{1+e^{\sigma(s_i-s_j)}}\right)$$

定義$I$為索引對$\{i,j\}$的集合,在不損失信息量的情況下,可以將集合$I$中的索引對都轉換成滿足$U_i \rhd U_j$的形式。另外集合$I$中的索引對還應該滿足最多只出現一次的條件。在此基礎上,累加權重參數$w_k$的更新量:$$\delta w_k=-\eta\sum_{(i,j) \in I}\left(\lambda_{ij}\frac{\partial{s_i}}{\partial{w_k}}-\lambda_{ij}\frac{\partial{s_j}}{\partial{w_k}}\right)=-\eta\sum_{i}\lambda_i\frac{\partial{s_i}}{\partial{w_k}}$$

其中:$$\lambda_i=\sum_{j:\{i,j\} \in I}\lambda_{ij}-\sum_{j:\{j,i\} \in I}\lambda_{ij}$$

通俗地說,$\lambda_i$就是集合$I$中所有$\{i,j\}$的$\lambda_{ij}$的和$-$集合$I$中所有$\{j,i\}$的$\lambda_{ij}$的和。如果還是不太明白,那看下面這個例子就明白了。集合$I=\{\{1,2\},\{2,3\},\{1,3\}\}$,則

$$\delta w_k=-\eta\sum_{\{i,j\}\in I}\left(\lambda_{ij}\frac{\partial{s_i}}{\partial{w_k}}-\lambda_{ij}\frac{\partial{s_j}}{\partial{w_k}}\right)=-\eta\left(\lambda_{12}\frac{\partial{s_1}}{\partial{w_k}}-\lambda_{12}\frac{\partial{s_2}}{\partial{w_k}}+\lambda_{13}\frac{\partial{s_1}}{\partial{w_k}}-\lambda_{13}\frac{\partial{s_3}}{\partial{w_k}}+\lambda_{23}\frac{\partial{s_2}}{\partial{w_k}}-\lambda_{23}\frac{\partial{s_3}}{\partial{w_k}}\right)=-\eta\left((\lambda_{12}+\lambda_{13})\frac{\partial{s_1}}{\partial{w_k}}+(\lambda_{23}-\lambda_{12})\frac{\partial{s_2}}{\partial{w_k}}+(-\lambda_{23}-\lambda_{13})\frac{\partial{s_3}}{\partial{w_k}}\right)$$

於是可以得到$\lambda_1=\lambda_{12}+\lambda_{13}$,$\lambda_2=\lambda_{23}-\lambda_{12}$,$\lambda_3=-\lambda_{23}-\lambda_{13}$

$\lambda_i$可以看成是作用在排序文檔上的力,其正負代表了方向,長度代表了力的大小。最初的實現是對每個文檔對,都計算一遍梯度並且更新神經網絡的參數值,而這里則是將同一個query下的所有文檔對進行疊加,然后更新一次網絡的權重參數。這種分解組合形式實際上就是一種小批量學習方法,不僅可以加快迭代速度,還可以為后面使用非連續的梯度模型打下基礎。

2.3 模型訓練過程示例

假設某個搜索系統中,文檔用2維的特征向量表示。給定一個query下的三個文檔向量分別為$x_1=(5,4.5)^T$,$x_2=(4,3.7)^T$和$x_3=(2,1.8)^T$,標記情況為$U_1 \rhd U_2 \rhd U_3$。為了簡化訓練過程,這里采用單層的神經網絡模型,即輸入層大小2,輸出層大小為1,輸出值為$f(x)=w_0+w_1x^{(1)}+w_2x^{(2)}$。

初始化$\mathbf{w}=[0, -1, 1]$,控制sigmoid函數形狀的$\sigma=0.1$,神經網絡學習率$\eta=0.1$。

根據以上初始值可以計算出$s_1=-0.5$,$s_2=-0.3$和$s_3=-0.2$,可見此時三個文檔輸出的分數並不滿足標記$U_1 \rhd U_2 \rhd U_3$。

計算$\lambda_1=\lambda_{12}+\lambda_{13}=-0.1012$,$\lambda_2=\lambda_{23}-\lambda_{12}=0.0002$,$\lambda_3=-\lambda_{23}-\lambda_{13}=-0.1010$。

$\delta w_0=-\eta\left(\lambda_1\frac{\partial{s_1}}{\partial{w_0}}+\lambda_2\frac{\partial{s_2}}{\partial{w_0}}+\lambda_3\frac{\partial{s_3}}{\partial{w_0}}\right)=0$

$\delta w_1=-\eta\left(\lambda_1\frac{\partial{s_1}}{\partial{w_1}}+\lambda_2\frac{\partial{s_2}}{\partial{w_1}}+\lambda_3\frac{\partial{s_3}}{\partial{w_1}}\right)=3.032$

$\delta w_2=-\eta\left(\lambda_1\frac{\partial{s_1}}{\partial{w_2}}+\lambda_2\frac{\partial{s_2}}{\partial{w_2}}+\lambda_3\frac{\partial{s_3}}{\partial{w_2}}\right)=2.7286$

更新網絡權重:

$w_0=w0+\delta w_0=0+0=0$

$w_1=w1+\delta w_1=-1+3.032=2.032$

$w_2=w2+\delta w_2=1+2.7286=3.7286$

使用更新后的權重重新計算三個文檔的分數,分別為$s_1=26.9387$,$s_2=21.92382$,$s_3=10.77548$。可見,經過一輪訓練,單層神經網絡的輸出分數已經可以很好地擬合標記的標簽。

3. 信息檢索評分

信息檢索研究者經常使用的排序質量評分指標有以下四種:

MRR(Mean Reciprocal Rank),平均倒數排名

MAP(Mean Average Precision),平均正確率均值

NDCG(Normalized Discounted Cumulative Gain),歸一化折損累積增益

ERR(Expected Reciprocal Rank),預期倒數排名

其中,MRR和MAP只能對二級的相關性(排序等級:相關和不相關)進行評分,而NDCG和ERR則可以對多級的相關性(排序等級>2)進行評分。NDCG和ERR的另一個優點是更關注排名靠前的文檔,在計算分數時會給予排名靠前的文檔更高的權重。但是這兩種評分方式的缺點是函數不連續,不能進行求導,所以也就不能簡單地將這兩種評分方式加入到模型的損失函數中去。

3.1 MRR

對於一個查詢$i$來說,$rank_i$表示第一個相關結果的排序位置,所以:$$MRR(Q)=\frac{1}{|Q|}\sum_{i=1}^{|Q|}\frac{1}{rank_i}$$

$|Q|$表示查詢的數量,$MRR$表示搜索系統在查詢集$Q$下的平均倒數排名值。$MRR$只能度量檢索結果只有一個並且相關性等級只有相關和不相關兩種的情況。

舉個簡單例子:

查詢語句 查詢結果 正確結果 排序位置 排序倒數
機器學習 快速排序,深度學習,並行計算 深度學習 2 1/2
蘋果手機 小米手機,華為手機,iphone 7 iphone 7 3 1/3
小米移動電源 小米移動電源,華為充電器,蘋果充電插頭 小米移動電源 1 1/1

所以$MRR(Q)=\frac{1/2+1/3+1}{3}=\frac{11}{18}$

 3.2 MAP

假定信息需求$q_j \in Q$對應的所有相關文檔集合為${d_{1},...,d_{mj}}$,$R_{jk}$是返回結果中直到遇到$d_k$后其所在位置前(含$d_k$)的所有文檔的集合,則定義$MAP(Q)^2$如下:

$$MAP(Q)=\frac{1}{|Q|}\sum_{j=1}^{|Q|}\frac{1}{m_j}\sum_{k=1}^{m_j}Precision(R_{jk})$$

實際上有兩種計算$MAP$的方法或者說有兩種$MAP(Q)$的定義方法。第一種方法是在每篇相關文檔所在位置上求正確率然后平均(參考上面的公式)。另一種是在每個召回率水平上計算此時的插值正確率,然后求11點平均正確率,最后在不同查詢之間計算平均。前者也稱為非插值$MAP(Q)$。一般提$MAP(Q)$都指前者,所有這里也只討論前者。

如果對定義的公式不太理解,可以結合下面的例子進行理解。

查詢1:機器學習 查詢2:蘋果手機
排序位置 是否相關 排序位置 是否相關
1 1
2 2
3 3
4 4
5 5
6 6
7 7

針對上面檢索的結果,可計算出

$AP(1)=\left(1*1+1*1+2/3*0+2/4*0+3/5*1+3/6*0+3/7*0\right)/3=\frac{13}{15}$

$AP(2)=\left(0*0+1/2*1+2/3*1+2/4*0+2/5*0+3/6*1+4/7*1\right)/4=\frac{47}{84}$

$MAP(Q)=\frac{AP(1)+AP(2)}{2}=\frac{13/15+47/84}{2}=\frac{599}{420}$

3.3 NDCG

NDCG是基於前$k$個檢索結果進行計算的。設$R(j,m)$是評價人員給出的文檔$d$對查詢$j$的相關性得分,那么有:

$$NDCG(Q,k)=\frac{1}{|Q|}\sum_{j=1}^{|Q|}Z_{j,k}\sum_{m=1}^{k}\frac{2^{R(j,m)}-1}{log(1+m)}$$

其中$$DCG_k=\sum_{m=1}^{k}\frac{2^{R(j,m)}-1}{log(1+m)}$$

$Z_{j,k}$為第$j$個查詢的DCG歸一化因子,用於保證對於查詢$j$最完美系統的$DCG_k$得分是1。$Z_{j,k}$也可以用$\frac{1}{IDCG_k}$表示。$m$是返回文檔的位置。如果某查詢返回的文檔數$k'<k$,那么上述公式只需要計算到$k'$為止。

修改上面簡單的例子進行輔助理解:

查詢1:機器學習 查詢2:蘋果手機
排序位置 相關程度 排序位置 相關程度
1 3 1 2
2 2 2 2
3 3 3 3
4 0 4 1
5 1 5 2
6 2 6 3
7 2 7 1

對於查詢1:機器學習:

$$DCG_7=\sum_{m=1}^{7}\frac{2^{R(j,m)}-1}{log(1+m)}=21.421516$$

查詢1返回結果的最佳相關程度排序為:3,3,2,2,2,1,0,所以,$IDCG_7=22.686817$,$NDCG_7=\frac{DCG_7}{IDCG_7}=0.944227$

對於查詢2:蘋果手機:

$$DCG_7=\sum_{m=1}^{7}\frac{2^{R(j,m)}-1}{log(1+m)}=18.482089$$

查詢2返回結果的最佳相關程度排序為:3,3,2,2,2,1,1,所以,$IDCG_7=23.167716$,$NDCG_7=\frac{DCG_7}{IDCG_7}=0.797752$

最后可得:$NDCG(Q,7)=(0.944227+0.797752)/2=0.870990$

3.4 ERR

$ERR^3$旨在改善NDCG計算當前結果時未考慮排在前面結果的影響的缺點,提出了一種基於級聯模型的評價指標。首先定義:

$$R(g)=\frac{2^g-1}{2^{g_{max}}}, g \in \{0,1,...,g_{max}\}$$

$g$代表文檔的得分級別,$g_{max}$代表最大的分數級別。

於是定義:

$$ERR=\sum_{r=1}^{n}\frac{1}{r}\prod_{i=1}^{r-1}(1-R_i)R_r$$

展開公式如下:

$$ERR=R_1+\frac{1}{2}(1-R_1)R_2+\frac{1}{3}(1-R_1)(1-R_2)R_3+...+\frac{1}{n}(1-R_1)(1-R_2)...(1-R_{n-1})R_n$$ 

舉例來說($g_{max}=3$):

查詢:機器學習
排序位置 相關程度
1 3
2 2
3 3
4 1

$R_1=0.875,R2=0.375,R_3=0.875,R_4=0.125$

$ERR=0.875+\frac{1}{2}*0.125*0.375+\frac{1}{3}*0.125*0.625*0.875+\frac{1}{4}*0.125*0.625*0.125*0.125=0.913391$

4. LambdaRank

4.1 為什么需要LambdaRank

先看一張論文原文中的圖,如下所示。這是一組用二元等級相關性進行排序的鏈接地址,其中淺灰色代表鏈接與query不相關,深藍色代表鏈接與query相關。 對於左邊來說,總的pairwise誤差為13,而右邊總的pairwise誤差為11。但是大多數情況下我們更期望能得到左邊的結果。這說明最基本的pairwise誤差計算方式並不能很好地模擬用戶對搜索引擎的期望。右邊黑色箭頭代表RankNet計算出的梯度大小,紅色箭頭是期望的梯度大小。NDCG和ERR在計算誤差時,排名越靠前權重越大,可以很好地解決RankNet計算誤差時的缺點。但是NDCG和ERR均是不可導的函數,如何加入到RankNet的梯度計算中去?

圖1

 

4.2  LambdaRank定義

RankNet中的$\lambda_{ij}$可以看成是$U_i$和$U_j$中間的作用力,如果$U_i \rhd U_j$,則$U_j$會給予$U_i$向上的大小為$|\lambda_{ij}|$的推動力,而對應地$U_i$會給予$U_j$向下的大小為$|\lambda_{ij}|$的推動力。如何將NDCG等類似更關注排名靠前的搜索結果的評價指標加入到排序結果之間的推動力中去呢?實驗表明,直接用$|\Delta_{NDCG}|$乘以原來的$\lambda_{ij}$就可以得到很好的效果,也即:

$$\lambda_{ij}=\frac{\partial{C(s_i-s_j)}}{\partial{s_i}}=\frac{-\sigma}{1+e^{\sigma(s_i-s_j)}}|\Delta_{NDCG}|$$

其中$|\Delta_{NDCG}|$是交換排序結果$U_i$和$U_j$得到的NDCG差值。NDCG傾向於將排名高並且相關性高的文檔更快地向上推動,而排名地而且相關性較低的文檔較慢地向上推動。

另外還可以將$|\Delta_{NDCG}|$替換成其他的評價指標。

5. LambdaMART

5.1 MART

LambdaMART是MART和LambdaRank的結合,所以要學習LambdaMART首先得了解什么是MART。MART是Multiple Additive Regression Tree的簡稱,很多時候又稱為GBDT(Gradient Boosting Decision Tree)。MART是一種集成學習算法,不同於經典的集成學習算法Adaboost利用前一輪學習器的誤差來更新下一輪學習的樣本權重,MART每次都擬合上一輪分類器產生的殘差。舉個例子便於理解,比如一個人的年齡是50歲,第一棵樹擬合的結果是35歲,第一輪的殘差為15歲;然后第二棵數擬合的結果是10歲,兩棵樹相加總的擬合結果是45歲,第二輪的殘差為5歲;第三棵數擬合的結果為2歲,三棵樹相加擬合的結果是47歲,第三輪的殘差是3歲......只要如此不斷地進行下去,擬合結果就可以達到50歲,擬合殘差的過程就是訓練數據的過程。

對於一個給定的數據集$\{x_i,y_i\}, i=1,2,...,m$,其中特征向量$x_i \in \mathbb{R}^n$,標簽$y_i \in \mathbb{R}$,可以用$x_{ij}, j=1,2,...,d來代表x_i的第j個特征值$。對於一個典型的回歸決策樹問題,需要遍歷所有特征$j$的全部閾值$t$,找到最優的$j$和$t$使下面的等式最小化:

$$S_j=\sum_{i \in L}(y_i-\mu_L)^2+\sum_{i \in R}(y_i-\mu_R)^2$$

其中$x_{ij} \leq t$的所有樣本落入左子樹$L$中,其中$x_{ij} > t$的所有樣本落入右子樹$R$中,$\mu_L(\mu_R)$表示左子樹(右子樹)所有樣例標簽值的均值。如果這就是一棵最簡單的擁有一個根節點、兩個葉子節點的二叉回歸樹,那么只需要根據最優閾值切分為左右子樹,並且分別計算左右子樹的值$\gamma_l,l=1,2$即可。如果將划分子樹的過程繼續進行$L-1$次即可得到一棵包含$L$個葉子節點的回歸樹。

上面公式使用最小二乘法計算擬合誤差,所以通過上面方法得到的模型又稱為最小二乘回歸樹。其實不管誤差的計算方式如何,我們都可以擬合出相應的回歸樹,唯一的區別是梯度的計算不同而已。

MART使用線性組合的方式將擬合的樹結合起來,作為最后的輸出:

$$F_n(x)=\sum_{i=1}^{N}\alpha_if_i(x)$$

$f_i(x)$是單棵回歸樹函數,$\alpha_i$是第$i$棵回歸樹的權重。

在這里我們需要弄清楚為什么擬合殘差就能不斷減少擬合誤差。假設擬合誤差$C$是擬合函數$F_n$的函數$C(F_n)$。那么:

$$\delta C \approx \frac{\partial{C(F_n)}}{\partial{F_n}}\delta F_n$$

如果取$\delta F_n=-\eta \frac{\partial{C}}{\partial{F_n}}$,就可以得到$\delta C<0$。其中$\eta$是學習率,為正實數。所以只要函數$F_n$擬合誤差函數的負梯度就可以不斷降低擬合誤差的值。

設標簽向量$y=[y_1,y_2,...,y_m]^T$,如果用最小二乘的方式表示擬合誤差,則:$$C=\frac{1}{2}(F_n-y)^2$$

那么$\delta F_n=-\eta \frac{\partial{C}}{\partial{F_n}}=-\eta (F_n-y)$。這其實就是上面提到的殘差,所以擬合殘差可以不斷減少擬合誤差。

5.2 邏輯回歸+MART進行二分類

了解了MART之后,下面舉一個MART實際應用的例子:使用MART和邏輯回歸進行二分類。用於分類的樣本$x_i \in \mathbb{R}^n$,標簽$y_i \in \{\pm1\}$,擬合函數$F(x)$。為了簡化表示,我們表示條件概率如下:

$$P_+ \equiv P(y=1|x)$$

$$P_- \equiv P(y=-1|x)$$

用交叉熵表示損失函數:$$L(y,F)=-ylog(P_+)-(1-y)log(P_-)$$

邏輯回歸使用對數機率(屬於正例概率/屬於負例概率)進行建模,

$$F_n(x)=\frac{1}{2}log(\frac{P_+}{P_-})$$

$$P_+=\frac{1}{1+e^{-2\sigma F_n(x)}}$$

$$P_-=1-P_+=\frac{1}{1+e^{2\sigma F_n(x)}}$$

將$P_+$和$P_-$帶入$L(y,F)$中,得到:

$$L(y,F_n)=log(1+e^{-2y\sigma F_n})$$

$R_{jm}$表示落入第$m$棵樹的第$j$個葉子節點中的樣例集合,可以通過下式對該葉子節點的值進行優化:

$$\gamma_{jm}=arg\min_{\gamma}\sum_{x_i \in R_{jm}}\log\left(1+e^{-2\sigma y_i\left(F_{m-1}\,\,\left({x_i}\right)+\gamma\right)\,}\right)$$

上式可以使用Newton-Raphson方法按照下面的公式進行迭代求解:

$$\gamma_{n+1}=\gamma_{n}-\frac{g'(\gamma_n)}{g''(\gamma_n)}$$

5.3 LambdaMART基本定義

LambdaMART基於MART,優化$\lambda$梯度。根據上面的定義,對於任意$U_i$和$U_j$,有:

$$\lambda_{ij}=\frac{\partial{C(s_i-s_j)}}{\partial{s_i}}=\frac{-\sigma |\Delta_{Z_{ij}}|}{1+e^{\sigma(s_i-s_j)}}$$

$|\Delta_{Z_{ij}}|$表示交換$U_i$和$U_j$的位置產生的評價指標差值,$Z$可以是$NDCG$或者$ERR$等。對於特定$U_i$,累加其他所有排序項的影響,得到:

$$\lambda_i=\sum_{j:\{i,j\} \in I}\lambda_{ij}-\sum_{j:\{j,i\} \in I}\lambda_{ij}$$

 為了簡化表示:

$$\sum_{\{i,j\}\rightleftharpoons I}\lambda_{ij}=\sum_{j:\{i,j\} \in I}\lambda_{ij}-\sum_{j:\{j,i\} \in I}\lambda_{ij}$$

於是我們可以更新損失函數:

$$\frac{\partial{C}}{\partial{s_i}} = \sum_{j:\{i,j\} \in I} \frac{-\sigma |\Delta_{Z_{ij}}|}{1+e^{\sigma(s_i-s_j)}} = \sum_{j:\{i,j\} \in I} -\sigma |\Delta_{Z_{ij}}| \rho_{ij}$$

其中,我們定義:

$$\rho_{ij}=\frac{1}{1+e^{\sigma(s_i-s_j)}}=\frac{-\lambda_{ij}}{\sigma |\Delta_{Z_{ij}}|}$$

然后可以得到:

$$\frac{\partial{^2C}}{\partial{s_i^2}}=\sum_{\{i,j\}\rightleftharpoons I}\sigma^2|\Delta_{Z_{ij}}|\rho{ij}(1-\rho_{ij})$$

所以我們可以用下面的公式計算第$m$棵樹的第$k$個葉子節點上的值:

$$\gamma_{km}=\frac{\sum_{x_i \in R_{km}}\frac{\partial{C}}{\partial{s_i}}}{\sum_{x_i \in R_{km}}\frac{\partial{^2C}}{\partial{s_i^2}}}=\frac{-\sum_{x_i \in R_{km}}\sum_{\{i,j\}\rightleftharpoons I}|\Delta_{Z_{ij}}|\rho_{ij}}{\sum_{x_i \in R_{km}}\sum_{\{i,j\}\rightleftharpoons I}|\Delta_{Z_{ij}}|\sigma\rho_{ij}(1-\rho_{ij})}$$

所以總結LambdaMART算法如下:

6. 參考文獻

1. Christopher J.C. Burges. From RankNet to LambdaRank to LambdaMART: An Overview. Microsoft Research Technical Report MSR-TR-010-82.

2. Chrisopher D.Manning, Prabhakar Raghavan, Hinrich Schutze著, 王斌譯. Introduction to Information Retrieval, 8.4 有序檢索結果的評價方法, 2017年10月北京第11次印刷.

3. Olivier Chapelle, Ya Zhang, Pierre Grinspan. Expected Recipocal Rank for Graded Relevance. CIKM 2009.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM