RankNet学习思路

来源:互联网 发布:弹弓皮筋个人多长算法 编辑:程序博客网 时间:2024/06/08 17:17

整理了一下学习ranknet需要知道的几点:

1、ranknet是从概率角度,利用pairwise解决排序问题;

2、最终我们学习的是一个为搜索结果打分的函数(Scoring Function),这个函数的作用是用来给搜索结果排序的,函数中带有未知参数,RankNet会帮你把参数训练出来,这个Scoring Function在这里并不是RankNet中特定的,因此只要提供的Scoring Function是smooth的,也就是可导的,那么就可以灌入RankNet中求解,至于Scoring Function的设计,并不是RankNet的责任,甚至可以直接选择一个线性函数f(x)=wx; 但由于RankNet是用神经网络训练的,而神经网络说到底又是用梯度下降来训练的;


3、把样本两两组成一个pair,对于一个pair,有两个概率需要定义,一个是预测概率:


s_i代表f(x_i)的预测结果。这就是一个sigmod函数,其物理意义就是第i个样本排在第j个样本前面的概率,还有一个概率是真实概率,定义如下:


S_i_j取{0,1,-1},如果i比j相关,则取1,相同取0,不相关取-1;

4、P_i_j保持一致性,即如果i比j相关,j比k相关,则i一定比k相关;通过P_i_j的定义,可能容易推出:


令P_i_j=P_j_k=p,则p和P_i_k的关系如下:


容易看出,当p>0.5时,即i>j,j>k,有P_i_k>0.5,即i>k。说明概率具有一致性;

5、使用交叉熵来作为训练损失函数:


容易推出:

损失函数C对排序函数中的w求导,可以得到:





S_i_j是训练样本目标,s_i,s_j是当前神经网络模型输入出,剩下就是神经网络对参数求导了。正常训练方法,每一对样本{i,j}都会更新一次w,如果采用BP神经网络模型,更新一次需要前向预测,然后再误差后向反馈,非常慢。因此,有了下面的加速算法;

6、ranknet加速算法:





原始更新方式是每一组pair均更新一次w,可以看出对所有排在i后面的j,i>j的i,增加delta_w,即,而对所有排在i后面的j,j<i的j,减少delta_w,即,即可以将原始每一组pair更新方式,改为每一个样本i的更新方式,所有pair集合I结合样本i分为排在i后面的pair集合{i,j}和排在i前面的pair集合{j,i}。即变成了一种min-batch的学习方式。减少了更新次数。

0 0
原创粉丝点击