Skip to content

  • 体验新版
    • 正在加载...
  • 登录
  • PaddlePaddle
  • models
  • Issue
  • #217

M
models
  • 项目概览

PaddlePaddle / models
大约 2 年 前同步成功

通知 232
Star 6828
Fork 2962
  • 代码
    • 文件
    • 提交
    • 分支
    • Tags
    • 贡献者
    • 分支图
    • Diff
  • Issue 602
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 255
  • Wiki 0
    • Wiki
  • 分析
    • 仓库
    • DevOps
  • 项目成员
  • Pages
M
models
  • 项目概览
    • 项目概览
    • 详情
    • 发布
  • 仓库
    • 仓库
    • 文件
    • 提交
    • 分支
    • 标签
    • 贡献者
    • 分支图
    • 比较
  • Issue 602
    • Issue 602
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 255
    • 合并请求 255
  • Pages
  • 分析
    • 分析
    • 仓库分析
    • DevOps
  • Wiki 0
    • Wiki
  • 成员
    • 成员
  • 收起侧边栏
  • 动态
  • 分支图
  • 创建新Issue
  • 提交
  • Issue看板
已关闭
开放中
Opened 8月 25, 2017 by saxon_zh@saxon_zhGuest

when using rankloss, learning performance of DSSM model is terrible.

Created by: lcy-seso

  • DSSM 模型命令行指定 model_type=rank 时,训练结果非常糟糕,我觉得可能存在以下问题:

  1. DSSM 指定 model_type=rank 时,实际上就是经典的Pairwise RankNet。

  2. 在RankNet中,神经网络对一个输入的”对“进行打分,学习一个标量分值作为输出。

  3. 以下是 RankLoss 计算的部分公式: $$P_{ij}=\frac{e^{o_{ij}}}{1+e^{o_{ij}}}$$ $$o_{ij} = o_i - o_j$$

  4. 在上面的公式中,网络对左右一对输入进行打分,分值相减得到 $o_{ij}$,$o_{ij}$ 通过指数公式转化为概率,最终的损失函数为基于概率的交叉熵。

  5. ranknet的优化目标是希望推开左右两部分网络的得分,使他们之间差异尽可能大以提高泛化能力,一般不对$o_{i,j}$做值域的限制;一些含有指数项的激活函数,也可能会影响梯度的回传;

  6. 目前 Paddle 的dssm 模型使用 fc + cosine 的方式得到一维得分 $o_{i,j}$ ,cosine 的值域受限,落在 [-1,1]之内,于是会出现下图的情况,下图是[-1, 1] 区间上,$o_{ij}$ 和 $P_{ij}$ 变化曲线:

image

可以看出来,即使落在了$P_{ij}$的两个极端,对相关和不相关的区分力也是非常弱的。

我认为DSSM模型使用rankloss时,目前配置部分有问题,不应该使用cosine 得到一维分值,而是使用全连接映射到一维,并且不使用任何非线性激活。

ltr 目录下的 ranknet,配置更为合理: https://github.com/PaddlePaddle/models/blob/develop/ltr/ranknet.py#L32

指派人
分配到
无
里程碑
无
分配里程碑
工时统计
无
截止日期
无
标识: paddlepaddle/models#217
渝ICP备2023009037号

京公网安备11010502055752号

网络110报警服务 Powered by GitLab CE v13.7
开源知识
Git 入门 Pro Git 电子书 在线学 Git
Markdown 基础入门 IT 技术知识开源图谱
帮助
使用手册 反馈建议 博客
《GitCode 隐私声明》 《GitCode 服务条款》 关于GitCode
Powered by GitLab CE v13.7