Learning to rank總結

一、Ranknet

在使用搜索引擎的過程中,對於某一Query(或關鍵字),搜索引擎會找出許多與Query相關的URL,然後根據每個URL的特徵向量對該URL與主題的相關性進行打分並決定最終URL的排序,其流程如下:
這裏寫圖片描述
排序的好壞完全取決於模型的輸出,而模型又由其參數決定,因而問題轉換成了如何利用帶label的訓練數據獲得最優的模型參數w。Ranknet提供了一種基於Pairwise的訓練方法。

1、Cost function

預測相關性概率

對於任意一個URL對(Ui,Uj),模型輸出的score分別爲si和sj,那麼根據模型的預測,Ui比Uj與Query更相關的概率爲 P i j = P ( U i > U j ) = 1 1 + e σ ( s i s j ) ,其中 σ 是個參數。

真實相關性概率

定義真實相關性概率爲 P i j ¯ = 1 2 ( 1 + S i j ) ,對於訓練數據中的Ui和Uj,它們都包含有一個與Query相關性的真實label,如果Ui比Uj更相關,那麼Sij=1;如果Ui不如Uj相關,那麼Sij=−1;如果Ui、Uj與Query的相關程度相同,那麼Sij=0。

代價函數定義

C ( P i j ¯ , P i j )

= U i > U j , U i < U j , U i = U j P i j ¯ l o g P i j

= P i j ¯ l o g P i j ( 1 P i j ¯ ) l o g ( 1 P i j ) 1 2 l o g 1 2

= P i j ¯ l o g P i j ( 1 P i j ¯ ) l o g ( 1 P i j )
化簡如下:


下圖展示了 C i j P i j ¯ P i j 的變化情況:

圖中t表示 s i s j ,可以看到當 S i j = 1 時,模型預測的 s i s j 越大,其代價越小; S i j = 1 時, s i s j 越小,代價越小; S i j = 0 時,代價的最小值在 s i s j 相等處取得。該代價函數有以下特點:
1)當兩個相關性不同的文檔算出來的模型分數相同時,損失函數的值大於0,仍會對這對pair做懲罰,使他們的排序位置區分開
2)損失函數是一個類線性函數,可以有效減少異常樣本數據對模型的影響,因此具有魯棒性

總代價

C = ( i , j ) I C i j ,I表示所有URL pair的集合,對於 ( i , j ) I 的pair,i>j,即 S i j = 1

2、梯度下降更新模型參數W

w k := w k α d C d w k

d C d w k = ( i , j ) I ( d c i j d s i d s i d w k + d c i j d s j d s j d w k )

d C i j d s i = σ ( 1 2 ( 1 s i j ) 1 1 + e σ ( s i s j ) ) = d C i j d s j = λ i j

d C d w k = ( i , j ) I ( λ i j d s i d w k λ i j d s j d w k ) = ( i , j ) I λ i j ( d s i d w k d s j d w k )

λ i = j : ( i , j ) I λ i j j : ( j , i ) I λ i j

d C d w k = i λ i d s j d w k

綜上 w k := w k α i λ i d s j d w k

二、LambdaRank

RankNet以錯誤pair最少爲優化目標,然而NDCG或者ERR等評價指標就只關注top k個結果的排序,所以修改cost function如下。

1、Cost function

C i j = l o g ( 1 + e σ ( s i s j ) ) | Δ N D C G |

λ i j = σ 1 + e σ ( s i s j ) | Δ N D C G |

優化方式與RankNet相似。

三、LambdaMART

以上兩個方法都是通過cost function,採用隨機梯度下降更新模型參數,使得計算URL的score值在所有URL排序中,屬於最優位置。但是lambdamart是用梯度 λ i j = d C i j d s i 建立gradient boosting CART迴歸樹,最後得到迴歸樹的加法模型作爲最終模型。下面從簡單的模型講解,一步步推導至lambdaMART。

1、AdaBoost算法

AdaBoost思想就是提高那些被前一輪弱分類器錯誤分類樣本的權值,而降低那些被正確分類樣本的權值;加大分類誤差率小的弱分類器的權值,使其在表決中起較大的作用,減小分類誤差率大的弱分類器的權值,使其在表決中起較小作用。

計算第m次迭代訓練數據更新的權值 D m + 1
  1. 初始化訓練數據的權值分佈 D 1 爲均值:
    D 1 = ( w 11 , . . . , w 1 i , . . . , w 1 N ) , w 1 i = 1 N , i = 1 , 2 , . . . , N
  2. 第m次迭代的弱分類器 G m ( x ) 在訓練數據集上的分類誤差率:
    e m = P ( G m ( x i ) y i ) = i = 1 N w m i I ( G m ( x i ) y i )
  3. 更新訓練數據集的權值分佈
    D m + 1 = ( w m + 1 , 1 , . . . , w m + 1 , i , . . . , w m + 1 , N )
    w m + 1 , i = w m i e α m y i G m ( x i ) Z m ,i=1,2,..,N, α m 爲當前迭代的弱分類器的權重。
    Z m 是規範化因子 Z m = i = 1 N w m i e α m y i G m ( x i ) ,規範後使得 D m + 1 成爲一個概率分佈。
    1)當 G m ( x ) = y i 時, w m + 1 , i = w m i e α m Z m ,正確分類樣本權值縮小
    2)當 G m ( x ) y i 時, w m + 1 , i = w m i e α m Z m ,錯誤分類樣本權值增大
計算第m次迭代的弱分類器 G m ( x ) 權值 α m

G m ( x ) 的權值: α m = 1 2 l o g 1 e m e m ,對數爲自然對數。
其中 1 e m e m = 1 e m 1
1)當 e m 大, 1 e m e m 小, a m 小,分類器權重變低
2)當 e m 小, 1 e m e m 大, a m 大,分類器權重變高。

算法

輸入:訓練數據集 T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) ,其中 x i χ R n y i y { 1 , + 1 } ; 弱學習算法
輸出:最終分類器G(x).

1.初始化訓練數據的權值分佈
D 1 = ( w 11 , . . . , w 1 i , . . . , w 1 N ) , w 1 i = 1 N , i = 1 , 2 , . . . , N

2.對m=1,2,…,M
(a)使用具有權值分佈 D m 的訓練數據集學習,得到基本分類器 G m ( x ) G m ( x ) : χ ->{1,-1}

(b)計算 G m ( x ) 在訓練數據集上的分類誤差率 e m = P ( G m ( x i ) y i ) = i = 1 N w m i I ( G m ( x i ) y i )

(c)計算 G m ( x ) 的係數 α m = 1 2 l o g 1 e m e m ,對數爲自然對數

(d)更新訓練數據集的權值分佈
       D m + 1 = ( w m + 1 , 1 , . . . , w m + 1 , i , . . . , w m + 1 , N )
       w m + 1 , i = w m i e α m y i G m ( x i ) Z m ,i=1,2,..,N
       Z m 是規範化因子 Z m = i = 1 N w m i e α m y i G m ( x i ) ,規範後使得 D m + 1 成爲一個概率分佈

3.構建基本分類器的線性組合 f ( x ) = m = 1 M α m G m ( x ) ,得到最終分類器 G ( x ) = s i g n ( f ( x ) ) = s i g n ( m = 1 M α m G m ( x ) )

等價算法-前向分步加法算法

當前向分步算法的損失函數是指數函數時,就是AdaBoost算法。也就是說,前項分步加法算法每次直接通過最小化指數損失函數 L ( y i , f m 1 ( x i ) + α G ( x i ) ) = e x p [ y i ( f m 1 ( x i ) + α G ( x i ) ) ] ,得到弱分類器的參數和權值 α AdaBoost算法是其具體做法,每次通過帶權的訓練數據學習弱分類器參數,根據分類誤差率計算當前迭代弱分類器的權值 α 以及訓練數據的權值,而訓練數據的權值也是爲了下一次迭代求弱分類器的參數,目標爲了最小化最終分類器的誤分率,否則每次訓練數據權重一樣,每次學出來的分類器都是一樣的,改變訓練數據權重是爲了讓不同分類器側重不同的特徵。

1)加法模型

f ( x ) = m = 1 M β m b ( x ; γ m ) ,其中 b ( x ; γ m ) 爲基函數, γ m 爲基函數的參數, β m 爲基函數的係數。

在給定訓練數據及損失函數 L ( y , f ( x ) ) ,通過最小化損失函數 m i n β , γ i = 1 N L ( y i , β m b ( x i ; γ m ) ) 學習加法模型f(x)。

2)前向分步算法

輸入:訓練數據集 T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) ;損失函數 L ( y , f ( x ) ) ;基函數集 { b ( x ; γ ) } ;
輸出:加法模型f(x)

1. 初始化 f 0 ( x ) = 0

2. 對m=1,2,…,M

(a)極小化損失函數 ( β m , γ m ) = a r g m i n β , γ i = 1 N L ( y i , f m 1 ( x i ) + β b ( x i ; γ ) ) ,得到參數 β m , γ m

(b)更新 f m ( x ) = f m 1 ( x ) + β m b ( x ; γ m )

3. 得到加法模型 f ( x ) = f M ( x ) = m = 1 M β m b ( x ; γ m )

3)由指數損失的前向分步算法推導至AadBoost

假設經過m-1輪迭代,前向分步算法已經得到 f m 1 ( x ) ,第m輪迭代目標是得到 α m G m ( x ) ,然後得到 f m ( x ) = f m 1 ( x ) + α m G m ( x ) ,使得 f m ( x ) 在訓練數據集上的指數損失最小,損失函數爲: L ( y i , f m ( x ) ) = i = 1 N e x p [ y i ( f m 1 ( x i ) + α G ( x i ) ) ]

( α m , G m ( x ) ) = a r g m i n α , G i = 1 N e x p [ y i ( f m 1 ( x i ) + α G ( x i ) ) ]

化簡,令 w ¯ m i = e x p [ y i f m 1 ( x i ) ]

得到 ( α m , G m ( x ) ) = a r g m i n α , G i = 1 N w ¯ m i e x p [ y i α G ( x i ) ]

(1)求 G m ( x )

對任意 α 0 G m ( x ) = a r g m i n G i = 1 N w ¯ m i I ( y i G ( x i ) ) ,即AdaBoost的基本分類器。

(2)求 α

L = i = 1 N w ¯ m i e x p [ y i α G ( x i ) ]

= y i = G m ( x i ) w ¯ m i e α + y i G m ( x i ) w ¯ m i e α

= e α ( i = 1 N w ¯ m i i = 1 N w ¯ m i I ( y i G ( x i ) ) ) + e α ( i = 1 N w ¯ m i I ( y i G ( x i ) ) )

= ( e α e α ) i = 1 N w ¯ m i I ( y i G ( x i ) ) + e α i = 1 N w ¯ m i

d L d α = 0

( e α + e α ) i = 1 N w ¯ m i I ( y i G ( x i ) ) e α i = 1 N w ¯ m i = 0

( e α + e α ) i = 1 N w ¯ m i I ( y i G ( x i ) ) = e α i = 1 N w ¯ m i

( e α + e α ) e α = i = 1 N w ¯ m i i = 1 N w ¯ m i I ( y i G ( x i ) )

e 2 α = i = 1 N w ¯ m i i = 1 N w ¯ m i I ( y i G ( x i ) ) 1

α = 1 2 l o g [ i = 1 N w ¯ m i i = 1 N w ¯ m i I ( y i G ( x i ) ) 1 ]

其中 e m = i = 1 N w ¯ m i I ( y i G ( x i ) ) i = 1 N w ¯ m i ,爲分類誤差率,分錯的樣本加權求和除以總的樣本加權求和。

α = 1 2 l o g ( 1 e m 1 ) = 1 2 l o g ( 1 e m e m ) ,即AdaBoost算法的分類器權重計算方式。

(3)更新每輪樣本權值

f m ( x ) = f m 1 ( x ) + α m G m ( x ) , w ¯ m , i = e x p [ y i f m 1 ( x i ) ] ,可知

w ¯ m + 1 , i = e x p [ y i f m ( x i ) ]

= e x p [ y i ( f m 1 ( x i ) + α m G m ( x i ) ) ]

= w ¯ m , i e x p [ y i α m G m ( x i ) ) ] ,即AdaBoost算法訓練數據權值更新的計算方式,但此處權值歸一化放在了 e m 計算時。

綜上,指數損失的前向分步算法就是AdaBoost算法。

2、CART迴歸樹

CART是在給定輸入隨機變量X條件下輸出隨機變量Y的條件概率分佈的學習方法,一般爲二叉樹,遞歸的二分每個特徵。

算法

輸入:訓練數據集D;
輸出:迴歸樹f(x)
1. 遍歷所有的j和s,選擇最優切分變量j(特徵)與切分點s(特徵值),即求解 m i n j , s [ m i n c 1 x i R 1 ( j , s ) ( y i c 1 ) 2 + m i n c 2 x i R 2 ( j , s ) ( y i c 2 ) 2 ]
c 1 是所有劃分到 R 1 區域的樣本的 y i 的均值】

2. 用選定的對(j,s)劃分區域並決定相應的輸出值:
R 1 ( j , s ) = x | x ( j ) s , R 2 ( j , s ) = x | x ( j ) s

c m = 1 N m x i R m ( j , s ) y i

3. 繼續對兩個子區域調用步驟1、2,直至滿足停止條件

4. 將輸入空間劃分爲M個區域 R 1 , R 2 , . . . , R M (即M個葉子節點),生成決策樹: f ( x ) = m = 1 M c m I ( x R m ) ,判斷樣本屬於哪個葉子節點,輸出就賦值該葉子節點的均值。

3、提升樹(AdaBoost+CART)

提升樹模型就是決策樹的加法模型,對於分類問題,損失函數爲指數損失函數,故只需要將AdaBoost算法中的分類器限定爲二類分類樹即可,也就是說分類提升樹就是AdaBoost的一個特例。而對於迴歸提升樹, f M ( x ) = m = 1 M T ( x ; Θ m ) ,其中, T ( x ; Θ m ) 表示決策樹, Θ m 爲決策樹的參數;M爲樹的個數。由於是迴歸模型,此處默認所有基函數參數爲1。

若將輸入空間劃分成J個互不相交的區域 R 1 , R 2 , . . . , R J (即決策樹的葉子節點),並在每個區域上確定輸出常量 c j ,決策樹可表示爲 T ( x ; Θ m ) = j = 1 J c j I ( x R m ) Θ m = { ( R 1 , c 1 ) , ( R 2 , c 2 ) , . . . , ( R J , c J ) }

採用平方誤差損失函數
L ( y , f ( x ) ) = ( y f ( x ) ) 2 = [ y f m 1 ( x ) T ( x ; Θ m ) ] 2 ,爲了讓損失函數最小,只需要讓 T ( x ; Θ m ) 接近前一次迭代的加法模型輸出與真實輸出的殘差 r = y f m 1 ( x )

綜上,對迴歸問題的提升樹算法來說,最小化損失函數只需要簡單地擬合當前模型的殘差。

算法

輸入:訓練數據集 T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) ,其中 x i χ R n y i y R ;
輸出:提升樹 f M ( x )

1. 初始化 f 0 ( x ) = 0

2. 對m=1,2,…,M

(a)計算殘差 r m i = y i f m 1 ( x i )

(b)擬合殘差 r m i 學習一個迴歸樹,得到第m棵樹的葉節點區域 R m j ,j=1,2,…,J

(c)對j=1,2,…,J,計算葉子節點的輸出 c m j = a v e ( y i | x i R m j ) , 得到 T ( x ; Θ m ) = j = 1 J c m j I ( x R m j )

(d)更新 f m ( x ) = f m 1 ( x ) + T ( x ; Θ m )

3. 得到迴歸問題提升樹 f M ( x ) = m = 1 M T ( x ; Θ m )

4、GBDT(Gradient Boosting+CART)

當損失函數是平方損失(迴歸提升樹,採用前向加法算法)和指數損失(二分類提升樹,直接用AdaBoost算法)時,每一步優化是很簡單的。但對一般損失函數而言,並不那麼容易。
GBDT利用最速下降法的近似方法,關鍵在於利用損失函數關於 f m 1 ( x ) 的負梯度(讓損失函數沿着梯度方向的下降)近似迴歸提升樹的殘差,擬合一個迴歸樹。
【主要思想】
求f(x),使得

m i n f ( x ) x i R L ( y , f ( x ) )

將f(x)看成一個參數,用梯度下降迭代求解f(x):
f ( x ) := f ( x ) d d f ( x ) x i R L ( y , f ( x ) )

算法

輸入:訓練數據集 T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) ,其中 x i χ R n y i y R ; 損失函數 L ( y , f ( x ) )
輸出:迴歸樹f(x)

1. 初始化 f 0 ( x ) = a r g m i n c i = 1 N L ( y i , c ) ,估計使損失函數極小化的常數值,它是隻有一個根節點的樹, f 0 ( x i ) = c ,爲了方便第一次迭代計算 r 1 i

2. 對m=1,2,…,M

(a)對i=1,2,…,N,計算 r m i = [ d L ( y i , f ( x i ) ) d f ( x i ) ] f ( x ) = f m 1 ( x )

(b)對 r m i 擬合一個迴歸樹,得到第m棵樹的葉節點區域 R m j ,j=1,2,…,J,估計迴歸樹葉節點區域,以擬合殘差的近似值

(c)對j=1,2,…,J,計算葉子節點的輸出 c m j = a r g m i n c x i R m j L ( y i , f m 1 ( x i ) + c ) ,普通的迴歸樹損失函數爲平方損失,

相關文章
相關標籤/搜索