Skip to content

  • 体验新版
    • 正在加载...
  • 登录
  • PaddlePaddle
  • Paddle
  • Issue
  • #5479

P
Paddle
  • 项目概览

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

通知 2325
Star 20933
Fork 5424
  • 代码
    • 文件
    • 提交
    • 分支
    • Tags
    • 贡献者
    • 分支图
    • Diff
  • Issue 1423
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 543
  • Wiki 0
    • Wiki
  • 分析
    • 仓库
    • DevOps
  • 项目成员
  • Pages
P
Paddle
  • 项目概览
    • 项目概览
    • 详情
    • 发布
  • 仓库
    • 仓库
    • 文件
    • 提交
    • 分支
    • 标签
    • 贡献者
    • 分支图
    • 比较
  • Issue 1,423
    • Issue 1,423
    • 列表
    • 看板
    • 标记
    • 里程碑
  • 合并请求 543
    • 合并请求 543
  • Pages
  • 分析
    • 分析
    • 仓库分析
    • DevOps
  • Wiki 0
    • Wiki
  • 成员
    • 成员
  • 收起侧边栏
  • 动态
  • 分支图
  • 创建新Issue
  • 提交
  • Issue看板
已关闭
开放中
Opened 11月 08, 2017 by saxon_zh@saxon_zhGuest

Add nce op

Created by: wanghaoshuang

Noise-contrastive estimation

Noise-contrastive estimation: A new estimation principle for unnormalized statistical models

1. 定义

Denote by $X = (x_1,...,x_T)$ the observed data set, consisting of T observations of the data x, and by $Y = (y_1 , . . . , y_T )$ an artificially generated data set of noise y with distribution $p_n(.)$. X is modeled with $p_m(.; θ)$.

翻译: 定义$X = (x_1,...,x_T)$ 为我们观察到的样本集合,也就是训练数据集中的T条样本。 $p_m(.; θ)$ 表示$X$的分布,其中$θ$为我们要求的模型的参数。

定义 $Y = (y_1 , . . . , y_T )$是人工生成的样本集合,也就是通过负类别采样生成的数据集。 $p_n(.)$ 表示$Y$的分布 (一般用uniform distribution) .

Denote by $U = (u_1 , . . . , u_{2T} )$ the union of the two sets $X$ and $Y$ , and assign to each datapoint $u_t$ a binary class label $C_t$: $C_t =1$ if $u_t ∈X$ and $C_t = 0$ if $u_t ∈ Y$ .

翻译: 定义 $U = (u_1 , . . . , u_{2T} )$ 为 $X$ 和 $Y$的并集 , 对于每一个样本 $u_t$定义一个二分类 label $C_t$: $C_t =1$ if $u_t ∈X$ (真正的样本) $C_t = 0$ if $u_t ∈ Y$ (通过sampling生成的样本)

###2 (closed). 公式 对于真正的样本$u$($C_t =1$): $$p(u|C = 1; θ) = p_m(u; θ)$$ 其中$θ$就是我们正在求解的模型,也就是整个NCE OP 的 FC部分,FC的输出就是$p_m(u; θ)$, 所以FC的输出应该过sigmoid activation.

对于生成的噪声样本u ( $C_t =1$): $$p(u|C = 0) = p_n(u)$$ 如果我们用uniform distribute, $p_n(u)$ = number_sampled_class / number_total_class

又:$ P(C=1)=P(C=0)=1/2$

根据贝叶斯原理得: $$P(C=1|u;\theta) = \frac{p_m(u;\theta)}{p_m(u;\theta) + p_n(u)}$$ $$P(C=0|u;\theta) = 1 - P(C=1|u;\theta) = \frac{p_n(u)}{p_m(u;\theta) + p_n(u)}$$

Log-likelihood of the parameters θ: $$L(\theta) = \sum_tC_tlnP(C_t = 1|u_t;\theta) + (1 - C_t)lnP(C_t = 0|u_t;\theta)$$ $$=\sum_tC_tln\frac{p_m(u;\theta)}{p_m(u;\theta) + p_n(u)} + (1-C_t)ln \frac{p_n(u)}{p_m(u;\theta) + p_n(u)}$$ $$=\sum_tC_tln\frac{p_m(u;\theta)}{p_m(u;\theta) + p_n(u)} + \sum_t(1-C_t)ln \frac{p_n(u)}{p_m(u;\theta) + p_n(u)}$$

再来看paddle中的实现:

cost = samples_[i].target ? -log(o / (o + b)) : -log(b / (o + b)); // 计算单条样本cost
// samples_[i].target 表示是否是真是样本,也就是(C_t==1)
// o = sigmoid(fc.output) = p_m(u; \theta)
// b = 1. / numClasses_ * config_.num_neg_samples() = p_n(u)

3. 理论证明

4. 其它

NCE方法也存在一个弊端,由于每个正样本词语w对应的噪声样本各不相同,这些负样本就无法以稠密矩阵的形式存储,也就无法快速地计算稠密矩阵的乘法,这就削弱了GPU的优势。Jozefowicz et al. (2016) 和 Zoph et al. (2016) 各自分别提出了在同一个批数据中共享噪声样本的想法,于是可以发挥GPU的稠密矩阵快速运算的优势。

指派人
分配到
无
里程碑
无
分配里程碑
工时统计
无
截止日期
无
标识: paddlepaddle/Paddle#5479
渝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