learn2rank目前基本两个分支,1是神经网络学派ranknet,lamdarank,另一个是决策树学派如gbrank,lamdamart

05年提出ranknet,算分模块是简单的全连接网络,loss函数是预测概率之家的pair-wise关系和真实lablel的pair-wise关系的逻辑回归。

预测概率的pair-wise关系是两个相减然后求个sigmoid,如下图:

真实概率如下)(S_ij表示,i 比 j 相关,S_ij是1,反之是 -1,如果label一样是0):

最后的loss是

然后可以化简为:

具体推倒过程见:

下面展示了当Sij分别取1,0,-1的时候cost function以si-sj为变量的示意图:

当两个相关性不同的文档算出来的模型分数相同时,损失函数的值大于0,仍会对这对pair做惩罚,使他们的排序位置区分开。

lamdarank想要解决的一个问题是,目前loss只会优化pair之间的关系,但是rank的目的是希望把最好好的结果往上promote,pair-wise没有考虑到这一点,使得最好的结果在中间位置也会loss非常小:

如:

每个线条表示文档,蓝色表示相关文档,灰色表示不相关文档,RankNet以pairwise error的方式计算cost,左图的cost为13,右图通过把第一个相关文档下调3个位置,第二个文档上条5个位置,将cost降为11,但是像NDCG或者ERR等评价指标只关注top k个结果的排序,在优化过程中下调前面相关文档的位置不是我们想要得到的结果。图 1右图左边黑色的箭头表示RankNet下一轮的调序方向和强度,但我们真正需要的是右边红色箭头代表的方向和强度,即更关注靠前位置的相关文档的排序位置的提升。LambdaRank正是基于这个思想演化而来,其中Lambda指的就是红色箭头,代表下一次迭代优化的方向和强度,也就是梯度。

于是lamdarank在每个pair-wise loss乘以了一个ndcg的变化值,作为最终的loss

我的理解:如果是 i,j是预测对了,由于log项非常小,所以整体loss小,但是如果预测错了,会根据ndcg的差对loss加权,一般label比较大的权重也大

最后说说lamdamart,由于神经网络系列的模型都是可以直接求梯度的,Loss对模型也可以求梯度,所以很直接的用梯度下降就可以求解。

但是树模型由于无法直接求导,导致无法直接走梯度下降那一套进行求导。需要考虑另一种方法。

我们直接loss对模型可以直接求导的,那么我们就用model(i) = model(i-1) - Loss(梯度)。来求解最终的model就行了。由于树是ensemble的方式,实际使用的过程是model(i) = model(i-1)- (-loss(梯度)),即优化的时候,是减去loss的负梯度。

所以关键是每次迭代的时候是拟合 loss的负梯度,loss对于模型的负梯度是可以求出的(Loss = loss_function(model),loss_function是可以求梯度的),剩下来的就是模型来拟合这个梯度。这个梯度可以代表的是每个样本在一个函数的值,只是现在函数不是线性的,用树来拟合这些个值的话,其实就是树来求解一个回归问题,它也只能求解一个回归问题。不知道给你绕晕了没有,详细参考libo的文章吧

基本步骤就是,根据loss去求解当前的梯度值,然后用树模型来拟合梯度,加这个树后,重新进行迭代。

树拟合的过程就是分裂的过程,不多说,参考gbdt基本原理,就是每次分裂的时候使用左叶子节点值的和除以左叶子节点数目,加上右叶子节点值的和除以右叶子节点数目。看哪个特征分裂后这个值大就用这个特征进行分裂。分裂终止的条件就是根据你的设置叶子节点数目,或者分裂到叶子节点的样本数目少于多少等等。lightgbm分裂是所有叶子节点一起比较,选择一个最优的叶子节点进行分裂。xgboost是所有叶子节点都分类,是一个完全二叉树

从ranknet到lamdarank,再到lamdamart的更多相关文章

  1. [笔记]Learning to Rank算法介绍:RankNet,LambdaRank,LambdaMart

    之前的博客:http://www.cnblogs.com/bentuwuying/p/6681943.html中简单介绍了Learning to Rank的基本原理,也讲到了Learning to R ...

  2. Learning to Rank算法介绍:RankNet,LambdaRank,LambdaMart

    之前的博客:http://www.cnblogs.com/bentuwuying/p/6681943.html中简单介绍了Learning to Rank的基本原理,也讲到了Learning to R ...

  3. Pairwise ranking methods: RankNet与LambdaRank

    转自:http://blog.csdn.net/u014374284/article/details/49385065, 感谢分享! LamdaMart 介绍见博客http://blog.csdn.n ...

  4. 排序学习(learning to rank)中的ranknet pytorch简单实现

    一.理论部分 理论部分网上有许多,自己也简单的整理了一份,这几天会贴在这里,先把代码贴出,后续会优化一些写法,这里将训练数据写成dataset,dataloader样式. 排序学习所需的训练样本格式如 ...

  5. 恢复SQL Server被误删除的数据(再扩展)

    恢复SQL Server被误删除的数据(再扩展) 大家对本人之前的文章<恢复SQL Server被误删除的数据> 反应非常热烈,但是文章里的存储过程不能实现对备份出来的日志备份里所删数据的 ...

  6. 再谈CAAnimation动画

    CAAnimaton动画分为CABasicAnimation & CAKeyframeAnimation CABasicAnimation动画, 顾名思义就是最基本的动画, 老规矩先上代码: ...

  7. 再部署一个 instance 和 Local Network - 每天5分钟玩转 OpenStack(131)

    上一节部署了 cirros-vm1 到 first_local_net,今天我们将再部署 cirros-vm2 到同一网络,并创建 second_local_net. 连接第二个 instance 到 ...

  8. iOS开发之再探多线程编程:Grand Central Dispatch详解

    Swift3.0相关代码已在github上更新.之前关于iOS开发多线程的内容发布过一篇博客,其中介绍了NSThread.操作队列以及GCD,介绍的不够深入.今天就以GCD为主题来全面的总结一下GCD ...

  9. 你还可以再诡异点吗——SQL日志文件不断增长

    前言 今天算是遇到了一个罕见的案例. SQL日志文件不断增长的各种实例不用多说,园子里有很多牛人有过介绍,如果我再阐述这些陈谷子芝麻,想必已会被无数次吐槽. 但这次我碰到的问题确实比较诡异,其解决方式 ...

随机推荐

  1. hdu4779 组合计数+dp

    提交 题意:给了n*m的网格,然后有p个重型的防御塔,能承受1次攻击,q个轻型防御塔不能接受任何攻击,然后每个防御搭会攻击他所在的行和所在的列,最后求在这个网格上放至少一个防御塔的方案数, 我们枚举 ...

  2. 去除菜单项的加速键--‘&’符号

    去除菜单项的加速键--‘&’符号 ---------PopupMenu的AutoHotKeys(不用设置每个Item的这个属性)设置为maManual就行了

  3. mysql 5.7 配置文件说明

    1.配置文件样例 [client] #password= socket=/data/var/mysql/mysql.sock [mysqld_safe] pid-file=/data/var/mysq ...

  4. python 对excel操作用法详解

    在python中,对excel表格读,写,追加数据,用以下三个模块: 1.wlrd 读取excel表中的数据 2.xlwt 创建一个全新的excel文件,然后对这个文件进行写入内容以及保存. 3.xl ...

  5. liunx驱动----USB驱动

    现象:把usb设备接入电脑 1.Windows发现设备 2.跳出一个对话框提示安装驱动程序 问1:既然没有驱动程序,为什么了够知道是什么驱动了?? 答1:Windows里面已经有了usb总线驱动程序, ...

  6. 系统管理--配置Gitlab

    很多教程都有配这个,但这个又不能用于”源码管理”模块拉取代码,我一直很困惑这个配置有什么用,然后就找到了该插件的github项目地址才弄明白,链接:https://github.com/jenkins ...

  7. GP数据库 常用SQL语句

    GP数据库 常用SQL语句 --1,查看列名以及类型 select upper(column_name) ,data_type from information_schema.columns wher ...

  8. h5完美实现无刷新上传并附带上传效果

    附带上传源码如下: <!DOCTYPE html> <html> <head> <title>测试上传功能</title> <meta ...

  9. Java反射操作成员变量 Class can not access a member with modifiers "*"

    fields[j].set(obj, val); 报: Exception in thread "main" java.lang.IllegalAccessException: C ...

  10. WebSocket 的理解

    WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术.依靠这种技术可以实现客户端和服务器端的长连接,双向实时通信. 它的最大特点就是,服务器可以主动向客户端推送信息,客 ...