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(w∣c)=∑w′∈V?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=1∑k?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∣θ)=∑w′∈V?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=1∑k?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=1∑k?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=1∣c,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 負采樣算法流程
- 輸入:正樣本對 ( w , c ) (w,c) (w,c),負采樣數 k k k
- 采樣負例: { c 1 ′ , . . . , c k ′ } ~ q ( c ′ ) \{c'_1,...,c'_k\} \sim q(c') {c1′?,...,ck′?}~q(c′)
- 計算損失:
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=1∑k?logσ(?s(w,ci′?)) - 更新參數:
θ ← θ ? η ? θ 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.