再理解RankNet算法

再理解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

时间: 2024-12-11 06:26:24

再理解RankNet算法的相关文章

PLSA模型的再理解以及源码分析

PLSA模型的再理解以及源码分析 之前写过一篇PLSA的博文,其中的收获就是知道PLSA是LSA在概率层面的扩展,知道了PLSA是一种主题模型,知道了PLSA中的参数估计使用的是EM算法.当时我就认为,这样子经典好用的算法,我是会回头再来理解它的,这样子才会有更加深刻的心得.所以有了这篇PLSA模型的再理解. 1. 两种思路解PLSA模型 参考了很多资料,发现大体上有两种解决PLSA模型的思路.下面我们大致说一下它们的思路. 思路一:EM算法中需要更新两个概率 PLSA模型的示意图如下: 其中包

KMP算法详解 --- 彻头彻尾理解KMP算法

[经典算法]——KMP,深入讲解next数组的求解 前言 之前对kmp算法虽然了解它的原理,即求出P0···Pi的最大相同前后缀长度k:但是问题在于如何求出这个最大前后缀长度呢?我觉得网上很多帖子都说的不是很清楚,总感觉没有把那层纸戳破,后来翻看算法导论,32章 字符串匹配虽然讲到了对前后缀计算的正确性,但是大量的推理证明不大好理解,没有与程序结合起来讲.今天我在这里讲一讲我的一些理解,希望大家多多指教,如果有不清楚的或错误的请给我留言. 1.kmp算法的原理: 本部分内容转自:http://w

深入理解快速排序算法的稳定性

在初次接触排序算法稳定性这个概念时,我一直认为复杂度为O(n2)的算法是稳定的,复杂度为O(nlogn)的算法是不稳定的.当时是这样理解的,复杂度为O(n2)的算法不可能再坏,而复杂度为O(nlogn)的算法在极端情况下可能会退化为O(n2),例如快速排序.但其实这是错误的,稳定性的概念远没有这么复杂,它只表示两个值相同的元素在排序前后是否有位置变化.如果前后位置变化,则排序算法是稳定的,否则是不稳定的.稳定性的定义符合常理,两个值相同的元素无需再次交换位置,交换位置是做了一次无用功. 之前对稳

理解机器学习算法的一点心得

从Andrew ng的公开课开始,机器学习的算法我接触到的也越来越多,我觉得机器学习算法和传统算法的最大不同就是:不会要求一个问题被100%求解,也就意味着不会有完美的解法,这也是著名的"Essentially, all models are wrong, but some are useful."所表达的意思.正因为如此,机器学习算法往往不会有一个固定的算法流程,取而代之的把问题转化为最优化的问题,无论是ML(maximum likelihood),MAP(Maximum a Pos

递归方法理解快速排序算法

快速排序是对冒泡排序的一种改进.它的基本思想是:通过一躺排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要 小,然后再按次方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列.最坏情况的时间复杂度为O(n2),最好 情况时间复杂度为O(nlog2n). 另外 java没指针概念 可以认为是句柄 假设要排序的数组是A[1]……A[N],首先任意选取一个数据(通常选用第一个数据)作为关键数据,然后将所有比它的数都放到它前面,所

理解DeepBox算法

理解DeepBox算法 基本情况 论文发表在ICCV2015,作者是Berkeley的博士生Weicheng Kuo: @inproceedings{KuoICCV15DeepBox, Author = {Weicheng Kuo, Bharath Hariharan, Jitendra Malik}, Title = {DeepBox:Learning Objectness with Convolutional Networks}, Booktitle = {International Con

再探 KMP 算法

$\DeclareMathOperator{\fail}{fail}$ KMP 算法堪称经典中的经典了,然而这么多年以来,我没能完全理解这个算法.我对 KMP 算法掌握的程度,就是知道其原理,但是写不出来. 今天打 CF,遇到一个 KMP 的题目,解法很好想,代码量也不大,我却未能在最后的 17 分钟内 AC.痛定思痛,痛何如哉.今天我要用最详细的语言,把我对 KMP 算法的理解写下来,借此将这个算法印在我心里. 相比于朴素的匹配算法,KMP 算法的优越之处在于不会进行重复比较(或者说不会进行重

使用再哈希算法查找元素

使用再哈希算法查找元素: /* hash search, using rehash method if find k, return if not find, d=(d+step)%m, rehash find */ int SearchHash(HashTable H, KeyType k) { int d, d1, m; m = H.tableSize; d = d1 = k%m; while(H.data[d].key != -1) { if(H.data[d].key == k) //h

【Linux 驱动】设备驱动程序再理解

学习设备驱动编程也有一段时间了,也写过了几个驱动程序,因此有对设备驱动程序有了一些新的理解和认识,总结一下.学习设备驱动编程也有一段时间了,也写过了几个驱动程序,因此有对设备驱动程序有了一些新的理解和认识,总结一下. ★什么是驱动程序 刚开始学习设备驱动程序的时候,产生了许多的问题.什么是驱动程序?驱动程序是干嘛的?它是如何工作的?它又是如何跟操作系统联系起来的?一系列的问题,现在有些地方还是不一定清楚,但是相比起刚开始的那个阶段,感觉自己还是清楚了很多. 设备驱动程序说白了(实质)就是为应用程