再理解RankNet演算法

bigface1234fdfg發表於2015-02-09

再理解RankNet演算法

     

    前面的一篇博文介紹了學習排序演算法(Learning to Rank)中的RankNet演算法。如下:

http://blog.csdn.net/puqutogether/article/details/42124491


    那次的入門對其中的演算法流程和基本原理沒有深入瞭解,這次看自動摘要提取演算法的時候,裡面有一個排序單元,使用到的就是學習排序演算法中的RankNet,這個時候才理解了。這就說明,有的時候回過頭來看某些演算法,你的認識會加深的。


   好了,這次主要說一下RankNet這個演算法的基本流程和原理。


    RankNet演算法是從概率的角度解決排序問題。


    首先,我們需要求得的是一個排序函式,就是當我們輸入樣本的特徵向量的時候,可以輸出該樣本的順序“得分”,實現排序。在RankNet中,排序函式定義為一個三層的神經網路模型。輸入層和樣本特徵維數有關,輸出層是一個節點(得分),排序函式定義為:


其中權值引數w和偏置引數b的上標表示節點所在的層,下標表示同一層中節點的編號;x_n_k表示特徵向量x_n的第k個分量,這是是輸入到輸入層的。f_x_n的輸出就是一個得分。


    然後,由於RankNet是一個pairwise的排序學習演算法,把樣本兩兩組成一個pair,對於一個pair,有兩個概率需要定義,一個是預測概率:


其物理意義就是第i個樣本排在第j個樣本前面的概率,其中的s_i和s_ j的都是前面排序函式的輸出得分。

還有一個概率是真實概率,定義如下:

其中For a given query, let S_i_ j∈ {0, ±1} be defined to be 1 if document i has been labeled to be more relevant than document j, −1 if document i has been labeled to be less relevant than document j, and 0 if they have the same label. 

    然後,基於交叉熵函式建立RankNet演算法的損失函式,並用梯度下降法解決。如下:


上式我們可以化簡,如下:


(好吧,天氣寒冷,手抖……)

也就是下面這個式子:


    最後,我們讓損失函式C對排序函式中的w求導,可以得到:


=》


=》



代入可得損失函式C關於w的偏導了,這樣就可以使用梯度下降法了。


最終求得排序函式f_x_n。

    

     可以看書,RankNet演算法在學習過程中,用到了一對樣本之間的關係,主要在預測概率部分,所以它是一個pairwise的方法。




參考:

http://blog.csdn.net/puqutogether/article/details/42124491

From RankNet to LambdaRank to LambdaMART: An Overview        Christopher J.C. Burges

http://blog.csdn.net/huagong_adu/article/details/40710305












相關文章