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)=wV?exp(sθ?(w,c))exp(sθ?(w,c))?

當詞匯表 ∣ V ∣ |V| V很大時(通常 10 5 ? 10 6 10^5-10^6 105?106量級),分母計算復雜度 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θ?=?wi?V?[logP(y=1∣ci?,wi?)+j=1k?logP(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+11?pd?(x)+(1?k+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+11?pm?(x;θ)+(1?k+11?)q(x)k+11?pm?(x;θ)?=k+11?pm?(x;θ)+(k+1k?)q(x)k+11?pm?(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θ)=wV?exp(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(VwT?Vc?)

正樣本的概率表示:
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(VwT?Vc?)+kq(x)exp(VwT?Vc?)??

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θ?=?wi?V?[logP(y=1∣ci?,wi?)+j=1k?logP(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(θ)=?wi?V?[exp(VwT?Vc?)+kq(x)exp(VwT?Vc?)?+j=1k?log(1?exp(Vw~ij?T?Vc?)+kq(w~ij?)exp(Vw~ij?T?Vc?)?)]

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)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?logp(D=1∣c,w;θ)+(w,c)D?log(1?p(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+e?vc??vw?1?
于是,上式變為:
= 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)D?log1+e?vc??vw?1?+(w,c)D?log(1?1+e?vc??vw?1?)

進一步化簡為:
= 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)D?log1+e?vc??vw?1?+(w,c)D?log(1+evc??vw?1?)

最終的優化目標即為:
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)D?logσ(vc??vw?)+(w,c)D?logσ(?vc??vw?)
? 事實上,加快 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=1k?logσ(?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
英文地址,請注明出處:http://en.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