Negative Contrastive Estimation Negative Sampling

1. 基本概念与问题背景

1.1 大规模分类问题

在自然语言处理中,给定上下文 c c c预测单词 w w w的条件概率为:
P ( w ∣ c ) = exp ⁡ ( s θ ( w , c ) ) ∑ w ′ ∈ V exp ⁡ ( s θ ( w ′ , c ) ) P(w|c) = \frac{\exp(s_\theta(w,c))}{\sum_{w'\in V}\exp(s_\theta(w',c))} P(wc)=wVexp(sθ(w,c))exp(sθ(w,c))

当词汇表 ∣ V ∣ |V| V很大时(通常 10 5 − 10 6 10^5-10^6 105106量级),分母计算复杂度 O ( ∣ V ∣ ) O(|V|) O(V)成为瓶颈。

1.2 解决方案概览

方法核心思想数学形式
原始Softmax精确计算 e s ( w , c ) ∑ e s ( w ′ , c ) \frac{e^{s(w,c)}}{\sum e^{s(w',c)}} es(w,c)es(w,c)
NCE密度比估计二分类问题
负采样近似NCE简化二分类

2. Negative Contrastive Estimation理论

NCE 是一种基于噪声对比学习的优化方法,它将原始的多类分类问题转化为二分类问题。在 NCE 中,模型试图从噪声样本中区分真实的数据样本。

(二)NCE 的数学原理

NCE 的核心思想是最大化正样本对的似然函数,同时最小化负样本对的似然函数。具体来说,给定一个正样本对 ( ( c i , w i ) ((c_i, w_i) ((ci,wi) k k k 个噪声样本 { c j , w ~ i j } \{c_j, \tilde{w}_{ij}\} {cj,w~ij},NCE 的损失函数定义
J θ = − ∑ w i ∈ V [ log ⁡ P ( y = 1 ∣ c i , w i ) + ∑ j = 1 k log ⁡ P ( y = 0 ∣ c i , w ~ i j ) ] J_\theta = -\sum_{w_i \in V} \left[ \log P(y = 1 | c_i, w_i) + \sum_{j=1}^{k} \log P(y = 0 | c_i, \tilde{w}_{ij}) \right] Jθ=wiV[logP(y=1∣ci,wi)+j=1klogP(y=0∣ci,w~ij)]
其中
P ( y = 1 ∣ c i , w i ) P(y = 1 | c_i, w_i) P(y=1∣ci,wi) 是正样本对的预测概率, P ( y = 0 ∣ c i , w ~ i j ) P(y = 0 | c_i, \tilde{w}_{ij}) P(y=0∣ci,w~ij)是负样本对的预测概率。

2.1 基本框架

定义:

  • 总样本数: 1 + k 1+ k 1+k
  • 数据分布: p d ( x ) = p ( x ; θ ) p_d(x) = p(x;\theta) pd(x)=p(x;θ)
  • 噪声分布: q ( x ) q(x) q(x)
  • 混合分布: p m ( x ) = 1 k + 1 p d ( x ) + ( 1 − 1 k + 1 ) q ( x ) p_m(x) = \frac{1}{k+1} p_d(x) + {(1-\frac{1}{k+1})} q(x) pm(x)=k+11pd(x)+(1k+11)q(x)

采样概率:
P ( y = 1 ∣ x , θ ) = 1 k + 1 p m ( x ; θ ) 1 k + 1 p m ( x ; θ ) + ( 1 − 1 k + 1 ) q ( x ) = 1 k + 1 p m ( x ; θ ) 1 k + 1 p m ( x ; θ ) + ( k k + 1 ) q ( x ) = p m ( x ; θ ) p m ( x ; θ ) + k q ( x ) \begin{aligned} P(y=1|x, \theta) = \frac{ \frac{1}{k+1} p_m(x;\theta)}{ \frac{1}{k+1} p_m(x;\theta)+(1- \frac{1}{k+1} )q(x)}\\ = \frac{ \frac{1}{k+1} p_m(x;\theta)}{ \frac{1}{k+1} p_m(x;\theta)+(\frac{k}{k+1} )q(x)}\\ = \frac{ p_m(x;\theta)}{ p_m(x;\theta)+kq(x)} \end{aligned} P(y=1∣x,θ)=k+11pm(x;θ)+(1k+11)q(x)k+11pm(x;θ)=k+11pm(x;θ)+(k+1k)q(x)k+11pm(x;θ)=pm(x;θ)+kq(x)pm(x;θ)

其中
P m ( x ∣ θ ) = exp ⁡ ( s θ ( w , c ) ) ∑ w ′ ∈ V exp ⁡ ( s θ ( w ′ , c ) ) P_m(x|\theta) = \frac{\exp(s_\theta(w,c))}{\sum_{w'\in V}\exp(s_\theta(w',c))} Pm(xθ)=wVexp(sθ(w,c))exp(sθ(w,c))

(【FunRec】Softmax负采样优化)引入一个假设:将分母部分固定为1,实验发现并没有影响模型的性能,此外,通过实验对分母进行统计,发现分母的值真的是以一个较小的方差在1 附近波动,此外,固定为1方便转化为逻辑回归的损失,最终条件概率:

P m ( x ∣ θ ) = exp ⁡ ( s θ ( w , c ) ) = e x p ( V w T V c ) P_m(x|\theta) = {\exp(s_\theta(w,c))} = exp(V_w^{T}V_{c}) Pm(xθ)=exp(sθ(w,c))=exp(VwTVc)

正样本的概率表示:
P ( y = 1 ∣ x , θ ) = e x p ( V w T V c ) e x p ( V w T V c ) + k q ( x ) \begin{aligned} P(y=1|x, \theta) = \frac{{exp(V_w^{T}V_{c})}}{exp(V_w^{T}V_{c}) +kq(x)} \end{aligned} P(y=1∣x,θ)=exp(VwTVc)+kq(x)exp(VwTVc)

2.2 损失函数推导

对于原损失函数
J θ = − ∑ w i ∈ V [ log ⁡ P ( y = 1 ∣ c i , w i ) + ∑ j = 1 k log ⁡ P ( y = 0 ∣ c i , w ~ i j ) ] J_\theta = -\sum_{w_i \in V} \left[ \log P(y = 1 | c_i, w_i) + \sum_{j=1}^{k} \log P(y = 0 | c_i, \tilde{w}_{ij}) \right] Jθ=wiV[logP(y=1∣ci,wi)+j=1klogP(y=0∣ci,w~ij)]

展开后:

J ( θ ) = − ∑ w i ∈ V [ e x p ( V w T V c ) e x p ( V w T V c ) + k q ( x ) + ∑ j = 1 k log ⁡ ( 1 − e x p ( V w ~ i j T V c ) e x p ( V w ~ i j T V c ) + k q ( w ~ i j ) ) ] J(\theta) = -\sum_{w_i \in V}\left[\frac{{exp(V_w^{T}V_{c})}}{exp(V_w^{T}V_{c}) +kq(x)}+ \sum_{j=1}^k \log\left(1 - \frac{{exp(V_{\tilde{w}_{ij}}^{T}V_{c})}}{exp(V_{\tilde{w}_{ij}}^{T}V_{c}) +kq(\tilde{w}_{ij})}\right)\right] J(θ)=wiV[exp(VwTVc)+kq(x)exp(VwTVc)+j=1klog(1exp(Vw~ijTVc)+kq(w~ij)exp(Vw~ijTVc))]

NCE具有很好的理论保证:随着噪音样本数k的增加,NCE的导数趋向于softmax的梯度。有研究证明25个噪音样本足以匹配常规softmax的性能,且有45x的加速。

3. 负采样技术详解

负采样是NCE的一个特例,它通过简化NCE的损失函数来实现更高效的训练。在负采样中,我们不再直接从噪声分布中采样,而是从词汇表中随机选择负样本,从而减少计算复杂度。

3.1 从NCE到负采样

p ( D = 1 ∣ c , w ; θ ) p(D = 1 | c, w; \theta) p(D=1∣c,w;θ) 表示给定中心词 c c c 和上下文词 w w w 的正样本概率, p ( D = 0 ∣ c , w ; θ ) p(D = 0 | c, w; \theta) p(D=0∣c,w;θ) 表示负样本概率。
优化目标 = arg ⁡ max ⁡ θ ∏ ( w , c ) ∈ D p ( D = 1 ∣ c , w ; θ ) ∏ ( w , c ) ∈ D ′ p ( D = 0 ∣ c , w ; θ ) = arg ⁡ max ⁡ θ ∏ ( w , c ) ∈ D p ( D = 1 ∣ c , w ; θ ) ∏ ( w , c ) ∈ D ′ ( 1 − p ( D = 1 ∣ c , w ; θ ) ) 取对数后 = arg ⁡ max ⁡ θ ∑ ( w , c ) ∈ D log ⁡ p ( D = 1 ∣ c , w ; θ ) + ∑ ( w , c ) ∈ D ′ log ⁡ ( 1 − p ( D = 1 ∣ c , w ; θ ) ) \begin{aligned} 优化目标 &= \arg \max_{\theta} \prod_{(w,c) \in D} p(D = 1 | c, w; \theta) \prod_{(w,c) \in D'} p(D = 0 | c, w; \theta)\\ &= \arg \max_{\theta} \prod_{(w,c) \in D} p(D = 1 | c, w; \theta) \prod_{(w,c) \in D'} (1 - p(D = 1 | c, w; \theta))\\ 取对数后&= \arg \max_{\theta} \sum_{(w,c) \in D} \log p(D = 1 | c, w; \theta) + \sum_{(w,c) \in D'} \log (1 - p(D = 1 | c, w; \theta)) \end{aligned} 优化目标取对数后=argθmax(w,c)Dp(D=1∣c,w;θ)(w,c)Dp(D=0∣c,w;θ)=argθmax(w,c)Dp(D=1∣c,w;θ)(w,c)D(1p(D=1∣c,w;θ))=argθmax(w,c)Dlogp(D=1∣c,w;θ)+(w,c)Dlog(1p(D=1∣c,w;θ))

其中, p ( D = 1 ∣ c , w ; θ ) p(D=1∣c,w;θ) p(D=1c,w;θ) 可以表示为:
p ( D = 1 ∣ c , w ; θ ) = 1 1 + e − v c ⋅ v w p(D = 1 | c, w; \theta) = \frac{1}{1 + e^{-v_c \cdot v_w}} p(D=1∣c,w;θ)=1+evcvw1
于是,上式变为:
= arg ⁡ max ⁡ θ ∑ ( w , c ) ∈ D log ⁡ 1 1 + e − v c ⋅ v w + ∑ ( w , c ) ∈ D ′ log ⁡ ( 1 − 1 1 + e − v c ⋅ v w ) = \arg \max_{\theta} \sum_{(w,c) \in D} \log \frac{1}{1 + e^{-v_c \cdot v_w}} + \sum_{(w,c) \in D'} \log \left( 1 - \frac{1}{1 + e^{-v_c \cdot v_w}} \right) =argθmax(w,c)Dlog1+evcvw1+(w,c)Dlog(11+evcvw1)

进一步化简为:
= arg ⁡ max ⁡ θ ∑ ( w , c ) ∈ D log ⁡ 1 1 + e − v c ⋅ v w + ∑ ( w , c ) ∈ D ′ log ⁡ ( 1 1 + e v c ⋅ v w ) = \arg \max_{\theta} \sum_{(w,c) \in D} \log \frac{1}{1 + e^{-v_c \cdot v_w}} + \sum_{(w,c) \in D'} \log \left( \frac{1}{1 + e^{v_c \cdot v_w}} \right) =argθmax(w,c)Dlog1+evcvw1+(w,c)Dlog(1+evcvw1)

最终的优化目标即为:
arg ⁡ max ⁡ θ ∑ ( w , c ) ∈ D log ⁡ σ ( v c ⋅ v w ) + ∑ ( w , c ) ∈ D ′ log ⁡ σ ( − v c ⋅ v w ) \arg \max_{\theta} \sum_{(w,c) \in D} \log \sigma(v_c \cdot v_w) + \sum_{(w,c) \in D'} \log \sigma (-v_c \cdot v_w) argθmax(w,c)Dlogσ(vcvw)+(w,c)Dlogσ(vcvw)
​ 事实上,加快 Word2vec训练速度的方法还有 Hierarchical softmax(层级 softmax),但实现较为复杂,且最终效果没有明显优于负采样方法,因此较少采用

4. 算法实现细节

4.1 负采样算法流程

  1. 输入:正样本对 ( w , c ) (w,c) (w,c),负采样数 k k k
  2. 采样负例: { c 1 ′ , . . . , c k ′ } ∼ q ( c ′ ) \{c'_1,...,c'_k\} \sim q(c') {c1,...,ck}q(c)
  3. 计算损失:
    L = − log ⁡ σ ( s ( w , c ) ) − ∑ i = 1 k log ⁡ σ ( − s ( w , c i ′ ) ) \mathcal{L} = -\log\sigma(s(w,c)) - \sum_{i=1}^k \log\sigma(-s(w,c'_i)) L=logσ(s(w,c))i=1klogσ(s(w,ci))
  4. 更新参数:
    θ ← θ − η ∇ θ L \theta \leftarrow \theta - \eta \nabla_\theta \mathcal{L} θθηθL

负采样的优势

负采样的主要优势在于其计算效率。通过减少需要考虑的负样本数量,负采样显著降低了计算复杂度,从而加快了训练速度。此外,负采样在实际应用中表现出色,尤其是在处理大规模数据集时。
事实上,除了负采样,还有其他方法可以加快Word2vec的训练速度,例如Hierarchical softmax(层级softmax)。然而,这些方法的实现较为复杂,且最终效果没有明显优于负采样方法,因此较少采用。

引用

  • 【FunRec】Softmax负采样优化
  • Gutmann, Michael U., and Aapo Hyvärinen. “Noise-contrastive Estimation of Unnormalized Statistical Models, with Applications to Natural Image Statistics.” The Journal of Machine Learning Research, vol. 13, 2012, pp. 307-361.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/85780.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/85780.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flink SQL Connector Kafka 核心参数全解析与实战指南

Flink SQL Connector Kafka 是连接Flink SQL与Kafka的核心组件,通过将Kafka主题抽象为表结构,允许用户使用标准SQL语句完成数据读写操作。本文基于Apache Flink官方文档(2.0版本),系统梳理从表定义、参数配置到实战调优…

vscode内嵌浏览器实时预览vue项目

安装插件 web Preview 启动vue项目 打开预览 ctrl shift p 之后输入并选择 Open Web Preview 即可看到预览窗口,但此时明明我的页面是有内容的,但是窗口却空白的。 因为默认访问端口是3000,我们将其修改为vue项目默认的5173端口即可。 点…

计算机网络:(四)物理层的基本概念,数据通信的基础知识,物理层下面的传输媒体

计算机网络:(四)物理层的基本概念,数据通信的基础知识,物理层下面的传输媒体 前言一、物理层的基本概念1. 什么是物理层2. 物理层的核心使命3. 物理层的四大特性 二、数据通信的基础知识1. 数据通信系统的基本模型1.1 …

Linux系统性能优化

目录 Linux系统性能优化 一、性能优化概述 二、性能监控工具 1. 基础工具 2. 高级工具 三、子系统优化策略 1. CPU优化 2. 内存优化 3. 磁盘I/O优化 4. 网络优化 四、资源限制优化 1. ulimit 2. cgroups(控制组) 五、安全与注意事项 六、…

【streamlit streamlit中 显示 mermaid 流程图有两种方式】

streamlit中显示mermaid 流程图有两种方式 mermaind示例 code """ flowchart LRmarkdown["This **is** _Markdown_"]newLines["Line1Line 2Line 3"]markdown --> newLinesmarkdown["This **is** _Markdown_"]newLines[&quo…

Rust调用 DeepSeek API

Rust 实现类似 DeepSeek 的搜索工具 使用 Rust 构建一个高效、高性能的搜索工具需要结合异步 I/O、索引结构和查询优化。以下是一个简化实现的框架: 核心组件设计 索引结构 use std::collections::{HashMap, HashSet}; use tantivy::schema::{Schema, TEXT, STORED}; use …

Unity3D仿星露谷物语开发69之动作声音

1、目标 Player动作时产生的声音,比如砍倒树木、砸石头。 2、修复NPC快速行进的bug(与本节无关) 修改NPCMovement.cs脚本的MoveToGridPositionRoutine方法。 确保npcCalculatedSpeed的速度不少于最慢速度。 原代码: 修改后的…

【Node.js 的底层实现机制】从事件驱动到异步 I/O

简介 Node.js 作为 JavaScript 后端运行环境,其核心优势在于高并发处理能力和非阻塞 I/O 模型。 特点: 高并发处理:单线程事件循环高效处理大量并发连接I/O 密集型任务:非阻塞 I/O 模型避免线程切换开销,不适合 CPU…

nginx服务器配置时遇到的一些问题

京东云 CentOS 8.2 64位 Nginx配置文件修改后需要重启或重载服务的原因以及不重启的后果: ​​工作进程不主动重读配置​​: Nginx采用master-worker多进程架构。master进程读取配置文件并管理worker进程,worker进程处理实际请求。修改配置…

【论文阅读 | CVPR 2024 |Fusion-Mamba :用于跨模态目标检测】

论文阅读 | CVPR 2024 |Fusion-Mamba :用于跨模态目标检测 1.摘要&&引言2.方法2.1 预备知识2.2 Fusion-Mamba2.2.1 架构特征提取与多模态融合(FMB模块)FMB的应用与输出2.2.2 关键组件3.2.2.1 SSCS 模块:浅层跨模态特征交互…

Nginx-Ingress-Controller自定义端口实现TCP/UDP转发

背景1 使用deployment部署一个http服务,配合使用ingresstls的解析在ingress终止。 apiVersion: networking.k8s.io/v1 kind: Ingress metadata:annotations:name: test.comnamespace: rcs-netswitch-prod spec:defaultBackend:service:name: rcs-netswitch-prodpo…

基于Vue.js的图书管理系统前端界面设计

一、系统前端界面设计要求与效果 (一)系统功能结构图 设计一个基于Vue.js的图书管理系统前端界面。要充分体现Vue的核心特性和应用场景,同时结合信息管理专业的知识。要求系统分为仪表盘、图书管理、借阅管理和用户管理四个主要模块&#x…

Perplexity AI:对话式搜索引擎的革新者与未来认知操作系统

在信息爆炸的数字时代,传统搜索引擎提供的海量链接列表已无法满足用户对高效、精准知识获取的需求。Perplexity AI作为一款融合人工智能与实时网络检索的对话式搜索引擎,正通过技术创新重新定义人们获取信息的方式。这家成立于2022年的硅谷初创企业&…

第七讲 信号

1. 信号铺垫 信号: Linux 系统提供的, 简单轻量的, 用于向指定进程发送特定事件, 让接受信号进程做识别和对应处理实现进程控制的一种异步通信机制. 1~31 普通信号 34 ~ 64 实时信号 信号概览 下面是Linux系统中所有标准信号的名称及其对应的数字: SIGHUP (1…

2025年渗透测试面试题总结-2025年HW(护网面试) 02(题目+回答)

安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 2025年HW(护网面试) 02 1. 有趣的挖洞经历 2. 高频漏洞及修复方案 3. PHP/Java反序列化漏洞 4. 服务器入…

Odoo 18进阶开发:打造专业级list,kanban视图Dashboard

🎯 项目概述 在现代企业级应用中,数据可视化已成为提升用户体验的关键要素。Odoo 18 作为领先的企业资源规划系统,为开发者提供了强大的视图定制能力。本教程将带您深入了解如何在list(列表)视图和Kanban(…

LabVIEW仪表检测

依托LabVIEW 图形化开发平台,集成 NI、Keysight、Fluke 等硬件,构建自动化仪表检测工装系统。方案覆盖从二维码识别、程序烧写、多维度校准到数据管理的全流程自动化检测,解决传统人工检测中效率低下(单卡检测效率提升 62.5%&…

Java八股文——消息队列「场景篇」

什么是消息队列? 面试官您好,消息队列(Message Queue, MQ),从本质上讲,是一个实现了“先进先出”(FIFO)队列数据结构的、专门用于在不同系统或服务之间进行可靠异步通信的中间件。 …

CTE vs 子查询:深入拆解PostgreSQL复杂SQL的隐藏性能差异

1 SQL优化的关键抉择 在PostgreSQL数据库性能优化领域,CTE(公共表表达式) 和子查询的选择往往决定了复杂SQL查询的执行效率。许多开发者习惯性地认为两者功能等价,但实际执行路径却存在显著差异。本文将深入剖析两者的底层机制&a…

【fargo】x264的intra refresh 1:编码

【fargo】x264的intra refresh 2:识别NAL类型、 NAL slice header 解析器大神的理论分析: H264Encoder 编码输出一帧 D:\XTRANS\thunderbolt\ayame\zhb-bifrost\player-only\echo\codec\x264\echo_h264_encoder.cppbool H264Encoder::encode