說到噪聲對比估計,或者“負采樣”,大家可能立馬就想到了Word2Vec。事實上,它的含義遠不止于此,噪音對比估計(NCE, Noise Contrastive Estimation)是一個迂回但卻異常精美的技巧,它使得我們在沒法直接完成歸一化因子(也叫配分函數(shù))的計算時,就能夠去估算出概率分布的參數(shù)。本文就讓我們來欣賞一下NCE的曲徑通幽般的美妙。
指數(shù)族分布
在很多問題中都會出現(xiàn)指數(shù)族分布,即對于某個變量x的概率p(x),我們將其寫成


則是歸一化常數(shù),也叫配分函數(shù)。這種分布也稱為“玻爾茲曼分布”。
在機器學習中,指數(shù)族分布的主要來源有兩個。第一個來源是softmax:我們做分類預測時,通常最后都會將全連接層的結果用softmax激活,這就是一個離散的、有限個點的玻爾茲曼分布了;第二個則是來源于最大熵原理:當我們引入某個特征并且已經能估算出特征的期望時,最大熵模型告訴我們其分布應該是特征的指數(shù)形式。
總的來說,指數(shù)族分布是非常實用的一類分布,不論是機器學習、數(shù)學還是物理領域,都能夠碰見它。然而,它卻有一個比較大的問題:不容易算,準確來說是配分函數(shù)不容易算。
具體來說,不好算的原因可能有兩個。一個是計算量太大,比如語言模型(包括Word2Vec)的場景,因為要通過上下文來預測當前詞的分布情況,這就需要對幾十萬甚至幾百萬項(取決于詞表大?。┻M行求和來算歸一化因子,這種情況下不是不能算,而是計算量大到難以承受了;另一種情況是根本算不出來:

NCE
NCE的思想很簡單,它希望我們將真實的樣本和一批“噪聲樣本”進行對比,從中發(fā)現(xiàn)真實樣本的規(guī)律出來。
具體來說,能量還是原來的能量G(x;θ),但這時候我們不直接算概率p(x)了,因為歸一化因子很難算。我們去算

這里的θ還是原來的待優(yōu)化參數(shù),而γ則是新引入的要優(yōu)化的參數(shù)。
然后,NCE的損失函數(shù)變?yōu)?/p>

其中p~(x)是真實樣本,U(x)是某個“均勻”分布或者其他的、確定的、方便采樣的分布。
說白了,NCE的做法就是將它轉化為二分類問題,將真實樣本判為1,從另一個分布采樣的樣本判為0。
等價于原來分布
我們將(5)式中的loss改寫為

因為p~(x)和U(x)都跟參數(shù)θ,γ沒關,因此將loss改為下面的形式,不會影響優(yōu)化結果

其中

(7) 式是KL散度的積分,而KL散度非負,那么當“假設的分布形式是滿足的、并且充分優(yōu)化”時,(7)式應該為0,從而我們有p~(y|x)=p(y|x),也就是

從中可以解得

如果U(x)取均勻分布,那么U(x)就只是一個常數(shù),所以最終的效果表明γ?logU(x)起到了logZ的作用,而分布還是原來的分布(3),θ還是原來的θ。
這就表明了NCE就是一種間接優(yōu)化(3)式的巧妙方案:看似迂回,實則結果等價,并且(5)式的計算量也大大減少,因為計算量就只取決于采樣的數(shù)目了。
Word2Vec
現(xiàn)在我們落實到Word2Vec來分析一些事情。以Skip Gram模型為例,Word2Vec的目標是

其中ui,vj都是待優(yōu)化參數(shù),代表著上下文和中心詞的兩套不同的詞向量空間。顯然地,這里的問題就是歸一化因子計算量大,其中應對方案有Huffman Softmax和負采樣。這里我們不關心Huffman Softmax,只需要知道它就是原來標準Softmax的一種近似就行了。我們來看負采樣的,Word2Vec將優(yōu)化目標變?yōu)榱耍?/p>

這個式子看著有點眼花,總之它就是表達了“語料出現(xiàn)的Skip Gram視為正樣本,隨機采樣的詞作為負樣本”的意思。
首先最明顯的是,(12)式相比(4),(5)式,少引入了γ這個訓練參數(shù),或者就是說默認了γ=0,這允許嗎?據(jù)說確實有人做過對比實驗,結果顯示訓練出來的γ確實在0上下浮動,因此這個默認操作基本上是合理的。
其次,對于負樣本,Word2Vec可不是“均勻地采樣每一個詞”,而是按照每個詞本身的總詞頻來采樣的。這樣一來,(10)式就變成了

也就是說,最終的擬合效果是

大家可以看到,左邊就是兩個詞的互信息!本來我們的擬合目標是兩個詞的內積等于條件概率p~(wj|wi)(的對數(shù)),現(xiàn)在經過負采樣的Word2Vec,兩個詞的內積就是兩個詞的互信息。