《Learning to Rank using Gradient Descent》
簡述:
ranknet就是基於pairwise思想,將NN(神經網路模型)應用於rank排序,用梯度下降的方式優化目標函數交叉熵。
pairwise:
由於rank更注重的每個point前後順序,至於每個point具體得多少分到不是太關注。,具體得多少分不太關心,只要,即就好了。doc是以特徵向量方式表示的,所以,這樣就是一個pair。我們的目標就是使盡量大,盡量小,其實不就是 盡量大么,這就是pairwise的基本思想。
我們只要構造正序pair就好了,因為從信息量的角度看,負向pair表徵的和正向pair一樣,只是方式不同。
sigmoid處理和交叉熵:
用sigmoid函數進行處理,使其取值在(0,1)之間,來表徵doci好於docj的概率。
由於
為了使Pij有一個參照標準,我們引入P』ij來表示根據真實已知的概率:i好於j時;P』ij=1,i差於j時,P』ij=0;i和j相等時,P』ij=0.5。
這裡使用交叉熵作為目標函數:
由於
我們的目的就是使損失函數ΣCij最小,我們採用梯度下降的方法。根據梯度下降更新參數的形式更新參數:,gmma為更新步長。
demo:
計算文檔score的函數f,為了簡單不妨先設其為一個線性函數,即
code
import sysnimport mathnx = [(2,0,0),(2,1,‐1),(2,2,‐2),(0,1,‐1),(0,2,‐2),(0,1,‐1)]nalpha = 0.001 # 步長nm = len(x) # 訓練數據條數nw = [0.1,0.1,0.1] #初始隨機設置權值nloop_max = 10 # 最大迭代次數ncount = 1nwhile count<=loop_max:n print (第%d輪:%count)n count += 1n # 遍歷訓練數據集,不斷更新w值n for i in range(m):n sum = w[0]*x[i][0]+w[1]*x[i][1]+w[2]*x[i][2]n w[0] = w[0]+alpha*x[i][0]*(1+2*math.exp(sum))/(1+math.exp(sum))n w[1] = w[1]+alpha*x[i][1]*(1+2*math.exp(sum))/(1+math.exp(sum))n w[2] = w[2]+alpha*x[i][2]*(1+2*math.exp(sum))/(1+math.exp(sum))n print wn
推薦閱讀:
※機器學習-異常檢測演算法(三):Principal Component Analysis
※logistic regression
※通俗講解維特比演算法
※機器學習------令人頭疼的正則化項
※27個機器學習圖表,幫你作弊一般飛速成長!