RankNet学习思路+损函感悟+\pi \xu 学xi+交叉熵损函详

RankNet学习思路

  • 1、ranknet是从概率角度,用pairwise解决排序问题;
  • 2、最终学的是一个为搜索结果打分的函
    • 函数中有未知参数,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越比s_j大,那么P_{ij}就越靠近1,这个牛逼了,以后学着点。

- 还有一个概率是真实概率
  • S_i_j取{0,1,-1},
    • 如果i比j相关,则取1,
    • 相同取0,
    • 不相关取-1;

还真实概率,这不就是标签吗!!

canci

损失函数感悟

  • 损失函数必然是样本的函数

    • 和模型参数的函数
  • 比如softmax里面

  • y_表示标签矩阵哦

    • 假设是(None,10)
  • y表示根据样本输入算出的矩阵

    • 肯定也是(None,10)
  • 那么损失函数就是

y ∗ t f . l o g ( y ) y_*tf.log(y) ytf.log(y)

  • 但是这个结果是个啥啊?
  • (None,10) × \times ×(None,10)
  • 这是社么贵啊

排序学习实践—ranknet方法

1 背景

  • 通常情况用户看前几页,找不到满意的商品则退出,流单
  • 对商品排序使用户能尽快完成购买流程?

  • 找几个特征比如评分、销量
  • 找个打分函数
    • 线性:F=w1评分+w2销量+…,
    • 手工调整权重值w并结合abtest来达到排序

  • 1)每增一个特征都得调整所有特征权重,并在线上abtest,费时力
  • 2)特征较多时(当引入个性化特征时),这种手工调整权重的方式已经不可能完成,很难找到一个较优解
  • 3)随着数据不断变化,每隔一段时间都要人工重调节权重。总体来讲人工调参费时费力、效果也差!

  • 为避免人工调参,工业界主要排序学习

2 排序学习

  • 通过一些自动化的方法完成模型参数训练
  • 根据不同类型的训练数据可将排序学习方法分为三类:
    • 单点标注(point wise)
    • 两两标注
    • 列表标注

2.1 point wise过程

  • 排序学习最重要的工作:构造训练样本,
  • 得一组(V1,V2,V3,…, Y)
  • 得到样本后带入相应的机器学习模型即可完成训练

  • 特征分以下(业务不同可自行添加特征)
    • a)商品(文档)特征如:评分、销量、价格
    • b)用户特征:性别、年龄、用户的商品类型偏好
    • c)用户-商品关联特征如:
      • 是否看过此商品、是否买过此商品、对此商品的历史评价
    • d)场景特征如:时间(早中晚)、与商品距离、是否节假日
    • 要将这些特征进行归一化,原因参见:

  • 找到特征后需定义label。
  • 给用户展示过的商品label为1,
    • 点击过的商品label为3,
    • 购买过的商品label为7。

  • 通过对历史日志数据清洗得到成千上万样本

  • 得到样本后可将此排序问题转为多分类(样本特征-类别标记)或回归问题(样本特征-连续值)
  • 如果转多分类,模型最后输出只能1、3或7,导致在同一类中的文档(比如两个文档输入模型的得到的结果都是7)不好继续排序
  • 实际用中往往转为回归问
    • 常用LR、GBDT等来解决

2.2 point wise缺点

  • point wise直观,易将问题转换为我们所熟知的问题,
  • 缺点是完全从单文档的分类角度计算,没有考虑文档之间相对顺序

  • 左图红框为某一次用户点击,这时得一条样本i (V1i,V2i,V3i,…,Xni, 3)
  • 右图红框为某一次用户点击的事件,获一条样本j (V1j,V2j,V3j,…,Vnj, 3)。
  • 按pointwise,认为这两条样本的label都3
  • 但第二张图包含更重要的信息,“用户只点了红框酒店,而没点绿框酒店(绿框内的酒店和左图点击酒店一致)”,
    • 说明j的label应该比i的label大(样本j排名比样本i更靠前
    • 而pointwise没利用这信息

  • 如何将文档之间相对顺序信息利用进去?

2.3 pair wise

  • pairwise不再从从单文档的分类角度来看待问题,
    • 而从一个文档对如<d1,d2>来看待问题
  • 用户点击了红框的商品(d1)而没有点击绿框中的商品(d2),那这个时候认为d1的相关性大于d2,可把 d1-d2的label设为+1,d2-d1的label设为 -1
  • 按照这种方式,就得到了二元分类器训练所需的样本
  • 预测时,只需要对所有pair分类,便可以得到文档集的一个偏序关系,从而实现排序
  • Pairwise有很多的实现
    • SVM Rank、RankNet、FRank、RankBoost
    • 介绍下ranknet的原理以及应用。

3 ranknet

3.1 ranknet原理

  • 文档i的特征向量Xi(1i, v2i, v3i, …, vni),
  • 文档j的特征向量Xj(v1i, v2j, v3j, …, vnj),
  • 找一个打分函数F,
  • 设F是线性函数,
  • F(Xi)=WXi=w1v1i + w1v2i + … + wnvni,
  • w表示权重系数,

  • 希望找出这样一个函数F(训练得到这些权重w),
  • 当文档X1比X2排名高时,我们希望F(Xi) > F(Xj)。

  • 下面需定义损失函数了。
  • 定义概率Pij表示Xi比Xj排名高的概率,
  • 可设Pij=F(Xi)-F(Xj),这样F(Xi)-F(Xj)越大表示Xi比Xj排名高的概率越大,
  • 概率值是在[0,1]区间范围内的,因此需要归一化。
  • 参考逻辑斯蒂回归的归一化函数:

  • Oi=F(i),Oij=F(i)-F(j),
  • 当Oij=0时,Pij=0.5,
  • Oij>0时,Pij>0.5,且Oij趋向于无穷大时,Pij=1,
  • Oij<0时,Pij<0.5,当Oij趋向于无穷小时,Pij=0。
  • 这时候们就可以定义损失函数了。损失函数常用有两种类型:

这特么连标签都没有,搞什么损失函数啊??

1)平方损失函数
  • 最常用的损失函数,
  • 但现在由于已经做了归一化逻辑映射,使得平方损失函数不再是一个凸函数,这给我们最优化求解造成了比较大的挑战,
  • 实际常常使用另一种损失函数—交叉熵。
2)交叉熵
  • 非凸函数,要求最小值,常用的梯度下降法或牛顿迭代法往往限于局部最优解

  • 交叉熵损失函数是否能满足需求。

  • 得到凸损失函数后,就可以使用梯度下降方法求解最优化参数。

  • 这么训练最终得到的是线性模型,不能学习特征之间的非线性关系,
  • 非线性关系有几种方法:
  • 1)一种是对特征进行高维映射,例如svm的核方法;
  • 2)树模型;
  • 3)带有隐藏层的神经网络。

3.2 基于神经网络的ranknet

  • 实际中,ranknet用神经网络方法学习,
  • 一般采用的是带有隐层的神经网络。
  • 用误差反向传播来训练。
  • 输入层的神经元代表了样本的每一个特征,虚线的神经元代表隐藏层,最终输出只有一个神经元。

  • 训练思路:
  • 1)取一个样本对(Xi, Xj),
    • 对Xi带入神经网络进行前向反馈,
    • 其次将Xj带入神经网络进行前向反馈,
    • 计算差分结果并误差反向传播,
    • 接着取下一个样本对。。。
      这种方法很直观,缺点收敛速度慢。

3.3 ranknet代码实现

  • 开源ranknet实现:
  • http://people.cs.umass.edu/~vdang/ranklib.html

3.4 应用

  • 样本如下:
  • 字段为:
  • qid: : : … :
  • target就是label,购买=7,点击=3,展示=1;
  • qid代表一次排序的标识,feature就是特征,#后面是注释信息。

7 qid:1 1:1 2:1 3:0 4:0.2 5:0 # 1A
3 qid:1 1:0 2:0 3:1 4:0.1 5:1 # 1B 
1 qid:1 1:0 2:1 3:0 4:0.4 5:0 # 1C
1 qid:1 1:0 2:0 3:1 4:0.3 5:0 # 1D  
1 qid:2 1:0 2:0 3:1 4:0.2 5:0 # 2A  
3 qid:2 1:1 2:0 3:1 4:0.4 5:0 # 2B 
1 qid:2 1:0 2:0 3:1 4:0.1 5:0 # 2C 
1 qid:2 1:0 2:0 3:1 4:0.2 5:0 # 2D  
1 qid:3 1:0 2:0 3:1 4:0.1 5:1 # 3A 
3 qid:3 1:1 2:1 3:0 4:0.3 5:0 # 3B 
7 qid:3 1:1 2:0 3:0 4:0.4 5:1 # 3C 
1 qid:3 1:0 2:1 3:1 4:0.5 5:0 # 3D

  • 将样本输入到ranknet训练,
  • 最终得到如下结果,
  • 特征为46个,即输入层中神经元个数为46个,隐藏层只设置了1层,
  • 隐藏层神经元个数设置为10个。

在这里插入图片描述

  • 得到模型结果后,将此模型保存到缓存中。
  • 一个线上请求,
  • 先提取出各个文档的特征向量(V1, V2, V3, …, Vn),
  • 带入此神经网络模型得到各个文档的评分,并按照评分排序。

4 小结

  • 本文对排序学习做了一介绍,
  • 着重介绍了ranknet的原理以及应用,
  • 后面会对其他pair wise方法、list wise方法做探讨

参考俩捏

交叉熵损失函数详解

  • 二分类:如逻辑回归、神经网络,标签 [0,1],负和正类
  • 模型最后会经一个 Sigmoid ,输出一概率值
    • 预测为正的可能性

  • s 是模型上一层输出
  • Sigmoid 特点:s = 0 ,g(s) = 0.5;s >> 0 , g ≈ 1,s << 0 时,g ≈ 0。
  • g(s) 将前一级的线性输出映射到 [0,1] 概率上。
  • g(s) 就是交叉熵公式中的模型预测输出 。

  • Sigmoid的输出表征了当前样本标签为 1 的概率:

  • 当前样本标签为 0 的概率就可以表达成:

  • 如果从极大似然性的角度出发,把上面两种情况整合到一起:

在这里插入图片描述

  • 重点看整合后的概率表达式
  • 希望P(y|x)越大越好
  • 首先,对P(y|x)引入log,
    • 因为log不影响函数本身的单调性

在这里插入图片描述

  • 希望logP(y|X)越大越好,只要-logP(y|x)越小就行。
  • 引入损失函数

在这里插入图片描述

  • 已推导出单个样本的损失函数,
  • 如果是计算N个样本的总的损失函数,只要将N个Loss加起来就可

在这里插入图片描述

  • 已完整地实现了交叉熵损失函数的推导

2.交叉熵损失函数的直观理解

  • 从图形的角度,分析交叉熵函数

  • 首先,还是写出单个样本的交叉熵损失函数:

在这里插入图片描述

  • y=1时

在这里插入图片描述

  • 横坐标是预测输出,纵坐标是交叉熵损失函数。
  • 预测输出越接近真实样本标签1,L越小;
  • 预测输出越接近0,L越大。

  • y=0时

在这里插入图片描述

在这里插入图片描述

  • 无论真实样本标签y是0还是1,L都表征了预测输出与y的差距。

  • 预测输出与y差得越多,L越大,也就是说对当前模型的“惩罚
    越大,而且是非线性增大,是一种类似指数增长的级別。
  • 这是由Iog本身的特性所決定的。
  • 这样的好处是模型会倾向于让预测输出更接近真实样本标签y

3. 交叉熵损失函数的其它形式

  • 交叉熵损失函数还有其它形式?
  • 没错!
  • 我刚才介绍的是一个典型的形式。
  • 接下来我将从另一个角度推导新的交叉熵损失函数。

  • 标签为 +1 和 -1,
  • Sigmoid 如下性质:

在这里插入图片描述

  • 之前说 y = +1 时,下列成立:

在这里插入图片描述

  • 如果 y = -1 ,下列成立:

在这里插入图片描述

  • 整合到一起:

在这里插入图片描述

  • 同样引入 log 函数,得到:

在这里插入图片描述

  • 就可以定义相应的损失函数为

在这里插入图片描述

在这里插入图片描述

  • L 就是我要推导的交叉熵损失函数。
  • 如果是 N 个样本,其交叉熵损失函数为:

在这里插入图片描述

not yet

参考链接

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fgh431

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值