java lambdamart库,LambdaMART笔记
LambdaMART是一种state-of-art的Learning to rank算法,由微软在2010年提出[1]。在工业界,它也被大量运用在各类ranking场景中。LambdaMART可以看做GDBT版本的LambdaRank,而后者又是基于RankNet发展而来的。RankNet最重要的贡献是提出了一种pairwise的用于排序的概率损失函数,而LambdaRank又在损失函数中巧妙的引入了NDCG等ranking metrics来优化排序效果。LambdaMART则是集大成者,它结合了上述两篇文章中提出的Lambda函数以及GDBT这个效果经过实践证明的ensemble算法,在各种排序问题中均能取得不错的效果。下面是目前的一些开源实现:
RankNet
RankNet是2005年微软提出的一种pairwise的Learning to rank算法,它从概率的角度来解决排序问题。RankNet提出了一种pairwise的概率损失函数,并可以应用于任意对参数可导的学习算法。在论文中,RankNet基于神经网络实现,除此之外,GDBT等模型也可以应用该损失函数。
RankNet是一个pairwise的算法,它首先将训练数据中同一Query下的doc两两组成pair,用{Ui,Uj}表示。模型的学习目标是得到一个打分函数f(x),它的输入是某个doc的特征向量x,输出是一个实数,值越高代表该doc的排序位置应该越靠前。也就是说,当f(xi)>f(xj)时,Ui的排序位置应该在Uj之前,用Ui ▷ Uj表示。基于此,我们定义Ui比Uj排序位置更靠前的概率如下,其中,s=f(x).
我们的目标概率(理想情况,预测概率应该尽可能拟合的概率)如下:
为了方便计算,我们令:
这样,根据Ui和Uj的标注得分,就可以计算P‘ij。
有了目标概率和模型预测概率,使用交叉熵损失函数(cross entropy loss function)作为概率损失函数,它衡量了预测概率和目标概率在概率分布上的拟合程度:
求上式关于si的偏导,由于对称性可以得到如下结论:
计算C关于模型参数wk的偏导,并应用gradient descent求解:
总的来说,RankNet从概率角度定义了排序问题的loss function,并通过梯度下降法求解。所以RankNet依赖的模型必须是平滑的,保证梯度是可以计算的。在paper中,作者选择一个两层的神经网络作为排序模型。除此之外,选择GBDT也可以取得不错的效果。
交叉熵
设随机变量X服从的概率分布为p(x),往往p(x)是未知的,我们通过统计方法得到X的近似分布q(x),则随机变量X的交叉熵为:
它衡量了q(x)和p(x)的拟合程度
加速学习算法
在上述的学习过程中,每一对样本{Ui,Uj}都会更新一次参数w,如果采用BP神经网络模型,每一次更新都需要先前向预测,再误差后向反馈,训练过程非常慢。因此,有了下面的加速算法;
对于给定的样本对Ui,Uj,我们有如下推导:
![][07]
这里我们定义:
![][08]
梯度下降量的求解如下:
![][09]
其中,为了计算简便,我们令{i,j}满足Ui>Uj,所以有
![][10]
上两式合并有:
![][12]
其中:
![][11]
这样,我们将每更新一次w,计算一个样本对{Ui,Uj}
改为了计算Ui所能组成的所有样本对。加速算法可以看成是一种mini-batch的梯度下降算法。
LambdaRank
在RankNet中,我们使用了交叉熵概率损失函数,并作为最优化的目标。但对于IR问题,通常选择NDCG、ERR作为评价指标,这两者间存在一定的mismatch。另一方面,NDCG、ERR是非平滑、不连续的,无法求梯度,不能直接运用梯度下降法求解,将其直接作为优化目标是比较困难的。因此,LambdaRank选择了直接定义cost function的梯度来解决上述问题。
LambdaRank是一个经验算法,它直接定义的了损失函数的梯度λ,也就是Lambda梯度。Lambda梯度由两部分相乘得到:(1)RankNet中交叉熵概率损失函数的梯度;(2)交换Ui,Uj位置后IR评价指标Z的差值。具体如下:
![][15]
Z可以是NDCG、ERR、MRR、MAP等IR评价指标
损失函数的梯度代表了文档下一次迭代优化的方向和强度,由于引入了IR评价指标,Lambda梯度更关注位置靠前的优质文档的排序位置的提升。有效的避免了下调位置靠前优质文档的位置这种情况的发生。
LambdaRank相比RankNet的优势在于考虑了评价指标,直接对问题求解,所以效果更好。
LambdaMART
LambdaRank中重新定义了损失函数的梯度,而这个Lambda梯度可以应用于任何使用梯度下降法求解的模型。自然,我们想到了将Lambda梯度和MART结合,这就是LambdaMART。
MART
学习过程
Ranklib
java lambdamart库,LambdaMART笔记相关推荐
- java lambdamart库,LambdaMART简介——基于Ranklib源码(一 lambda计算)
学习Machine Learning,阅读文献,看各种数学公式的推导,其实是一件很枯燥的事情.有的时候即使理解了数学推导过程,也仍然会一知半解,离自己写程序实现,似乎还有一道鸿沟.所幸的是,现在很多主 ...
- java lambdamart库,LambdaMART 之 lambda(示例代码)
LambdaMART 之 lambda 概念 LTR 排序学习主要用于对召回结果的精排,主流使用基于pair(文档对标记)的 LambdaMART 算法,该算法由两部分组成:lambda + MART ...
- log4j linux如果日志目录不存在,Java日志库学习笔记
(未完成,待修改) 一.安装Log4j log4j的库文件可以在官方网站下载: 二.log4j.properties的目录搜索规则 在src/目录下创建一个log4j.properties文件,即LC ...
- JAVA学习笔记—JAVA SE(四)JAVA核心库类(下)
文章目录 四.JAVA核心库类(下) 1. 异常机制和File类 1.1 异常机制 1.1.1 基本概念 1.1.2 异常的分类 1.1.3 异常的避免 1.1.4 异常的捕获 1.1.5 异常的抛出 ...
- 编程方法学26:介绍Java标准库
前言 本笔记是斯坦福公开课,编程方法学的学习笔记. 总体而言,这门课讲了很多很基础的东西,具有很强的通用性. 正文 本次的笔记对应的是第二十六节课,这堂课是来讲Java标准库的知识. 1ACM lib ...
- JAVA并发编程实践笔记
2019独角兽企业重金招聘Python工程师标准>>> JAVA并发编程实践笔记 博客分类: java JAVA并发编程实践笔记 1, 保证线程安全的三种方法: a, 不要跨 ...
- Java核心技术卷一读书笔记
文章目录 Java核心技术卷一读书笔记 第一章 Java程序设计概述 1.1 关键特性 第二章 Java程序设计环境 2.1 使用命令行工具 第三章 Java的基本查询设计结构 3.1 数据类型 3. ...
- 夯实JAVA基础(个人笔记)
夯实JAVA基础(个人笔记) 一.Java 异常处理 二.泛型 三.集合 四.算法 五.输入与输出(字节流和字符流) 六.并发和多线程 七.网络连接 八.lambda表达式 九.反射 十.Java S ...
- Java基础篇 学习笔记
List item Java基础篇 学习笔记 java基础篇 第1章 计算机.程序和java概述 学习笔记 1.1什么是计算机 简单来说:计算机就是 ' 存储 ' 和 ' 处理 ' 数据的电子设备. ...
最新文章
- java 不退出_Java项目不挂断运行,即当账户退出或终端关闭时,程序仍然运行,并附上执行脚本...
- AlertDialog创建6种对话框的用法
- 1650显卡和1050T显卡差距大吗?
- Java项目案例之---定时器的使用
- 最好用的OCR实时翻译工具:Bob for Mac
- Java程序员不得不会的124道面试题(含答案)
- Gifox for Mac 1.6.0 优秀的Gif动画录制工具 破解版下载
- 从零开始SpringCloud Alibaba实战(47)——阿里开发手册泰山版学习笔记一 命名风格
- 贵州大学计算机学院研究生成绩查询,贵州大学计算机科学与技术学院2008年硕士研究生初试、复试总成绩一览表...
- 2020年android studio ------jni常用函数总结
- 曾经跨过山和大海的百度AI技术汇,跨进北工大!
- Rust 学习3, 枚举,集合
- html 水平柱形图,CSS实现柱形图效果的代码示例
- 【ansys workbench】3.圆角L型支架的应力结果
- MySQL的TRUNCATE()函数
- mysql相关的dll_libmySQL.dll,下载,简介,描述,修复,等相关问题一站搞定_DLL之家
- hdoj 1878 欧拉回路
- 『干货』深度强化学习与自适应在线学习的阿里实践
- 如何提出保存PDF指定的几页
- rz后远程服务器没反应,“通过jumpserver远程登录linux服务器,rz上传文件速度过慢”问题的解决...