語言模型中用到的幾種取樣之不全版
1、蒙特卡洛數值積分
在科學計算領域,對一個已知分佈的p(x),函式f(x)的期望可以通過數值解法方法來近似計算。從p(x)中獨立抽取的n個樣本xi,其中i = 1, · · · , n。當 n足夠大時,f(x)的期望可以用這n個樣本的均值來近似:
根據大數定律,當n趨向於無窮大是,樣本均值收斂於期望值:
,when n →∞.
也就是說,它可以用來求一些複雜函式的積分。求積分,可以通俗地理解為求面積,而如果只是簡單的求面積,利用蒙特卡洛來求就是用隨機投點法來模擬不規則圖形的面積。
比如在1*1的矩形中,有一個不規則的圖形,我們想要直接計算該圖形的面積很困難,那怎麼辦呢?我們可以拿N個點,隨機拋在1*1的矩形框中,數一下落入該不規則圖形中的點的個數count,那麼該不規則圖形的面積就可以用count/N來近似。
所以現在就有一個問題,就是要怎麼抽樣才能讓資料最符合事實分佈。抽樣,其實是指從一個概率分佈中生成觀察值(observations)的方法。而這個分佈通常是由其概率密度函式(PDF)來表示的。而且,即使在已知PDF的情況下,讓計算機自動生成觀測值也不是一件容易的事情。從本質上來說,計算機只能實現對均勻分佈(Uniform distribution)的取樣。比較原始的解決方法會有直接取樣,拒絕取樣、自適應的拒絕取樣等(這幾種這個連結介紹的很好)。下面介紹幾種比較主要的“曲線救國”的方法。
2、重要性取樣
它也是藉助了容易抽樣的分佈 q (proposal distribution)來解決這個問題,直接從公式出發:
其中p(z)是資料的分佈,f(z)是資料的函式,p(z) / q(z) 可以看做取樣出後的資料的 importance weight,可見p(z) / q(z)>1,即p(z) > q(z),取樣資料的權重變高,反之則權重降低,這是比較intuitive的。我們要確定的是 q。要確定一個什麼樣的分佈才會讓取樣的效果比較好呢?直觀的感覺是,樣本的方差越小期望收斂速率越快。比如一次取樣是 0, 一次取樣是 1000, 平均值是500,這樣取樣效果很差,如果一次取樣是 499, 一次取樣是501, 你說期望是 500,可信度還比較高。在上式中,我們目標是 p×f/q 方差越小越好,所以 |p×f| 大的地方,proposal distribution q(z) 也應該大(而這個條件並不能經常滿足,這也就成了重要性取樣的缺點)。
因為這篇文章主要是服務於語言模型的,所以這裡講一講它在語言模型的應用。
應用重要性取樣在加快求解:
,
如下式:
其中通常採用訓練集的unigram分佈(鍵為詞,值為詞的頻率),接著從中獨立抽取k個樣本vi, 1 ≤ i ≤ k
到了這一步基本完成重要性取樣,下面說一下上圖中最後一項中部分項的求解:
Z(h) 需要在所有樣本上進行計算,計算量仍然很大。
於是,Bengio在2003年在這裡又用了一次重要性取樣:
其中可以跟上面一樣採用訓練集的unigram分佈。
到這裡就完成工作了,梳理一下整個推導流程:
3、自適應重要性取樣
雖然直觀上Q(w′|ht)採用n元語言模型更加準確,但Bengio and Senécal [2008]發現使用複雜的n元語言模型分佈並不能改進效能,原因是n元模型的分佈和神經網路語言模型估計的分佈之間有很大的差異。於是,他們提出了自適應的n-gram分佈來更好地擬合目標分佈P。他們將bigram和unigram融合,融合的係數用SGD的方法訓練得到,最終使得融合後的分佈Q與目標分佈P的KL距離最小。他們的實驗顯示這種方法能使速度提升100倍。
4、 NCE
噪聲對比估計(Noise Contrastive Estimation)是Mnih和Teh發明的一種比重要性取樣更穩定的取樣方法,因為剛剛上面說的重要性取樣中P和Q可能大小不一致的情況。NCE不是直接估計某個詞語的概率值。相反,它藉助一個輔助的損失值,從而實現了正確詞語概率值最大化這一目標。NCE的想法是:訓練一個模型來區分目標詞語與噪聲。於是,待解決的問題就由預測正確的詞語簡化為一個二值分類器任務,分類器試圖將正確的詞語與其它噪聲樣本中區分開來。
對於每個詞語wi,它的前n個詞語wt-1, ……, wt-n+1表示為wi的語境ci。然後從含有噪聲的分佈Q中生成k個噪聲樣本。參照重要性取樣的方法,這裡也可以從訓練資料的unigram分佈中取樣。由於分類器需要用到標籤資料,我們把語境 ci 對應的所有正確的詞語wi標記為正樣本(y=1),其餘的噪聲詞語作為負樣本(y=0)。
接著,用邏輯迴歸模型來訓練樣本資料:
為了簡化表示,上式中用c表示上下文內容,並且省略了目標詞語wt的下標t。由於計算所有噪聲樣本的期望時仍需要對詞表V中的詞語求和,得到標準化的概率值,於是可以採用蒙特卡洛方法來估算:
簡化為:
實際上,我們是從兩個不同的分佈中取樣資料:正樣本是根據語境c從訓練資料集Ptrain中取樣,而負樣本從噪聲分佈Q中取樣獲得。因此,無論是正樣本還是負樣本,其概率值都可以表示成上述兩種分佈帶權重的組合,權重值對應於來自該分佈的樣本值:
於是,樣本來自於Ptrain的概率值可以表示為條件概率的形式:
這個式子可以被簡化為:
由於不知道Ptrain(待計算項),我們就用P來代替:
當然,樣本為負樣本的概率值就是P(y=0|w,c)=1−P(y=1|w,c)。值得注意的是,已知c求詞語w出現的概率值P(w|c)的計算方法實際上就是softmax的定義:
h是網路倒數第二層的輸出向量。因為分母只與h相關,h的值與c相關(假設V不變),那麼分母可以簡化為Z(c)來表示。softmax就變為下面的形式:
為了求解Z(c),還是需要對V中所有詞語出現的概率值求和。NCE則用了一個小技巧巧妙地繞開:即把標準化後的分母項Z(c)當作模型的待學習引數。Mnih和Teh(2012)、Vaswani(2013)等在論文中都把Z(c)的值固定設為1,他們認為這樣不會對模型的效果造成影響。Zoph(2016)則證明了,即使訓練模型,最終得到Z(c)的值也是趨近於1,並且方差很小。
若是我們把上面softmax等式中的Z(c)項改為常數1,等式就變為:
再把上面的式子代入求解P(y=1|w,c)P(y=1|w,c),得到:
繼續把上式代入到邏輯迴歸的目標函式中,得到:
NCE方法有非常完美的理論證明:隨著噪聲樣本k的數量增加,NCE導數趨近於softmax函式的梯度。Mnih 和 Teh (2012) 認為抽取25個噪聲樣本就足以達到常規softmax方的效果,速度能提升大約45倍。Chris Dyer撰寫的筆記對NCE方法進行了更詳細的解釋。
在這裡仍然可能會讓人疑惑,為何一個softmax的計算效率問題就能轉化為一個二分類問題了。其實,仔細一想,softmax就是解決從多個分類挑出正確目標這個問題的,而我們這裡NCE把樣本分為了正樣本和負樣本兩類,也算是解決了這個問題,只是徹底拋棄了softmax而已。
5、 Negative Sampling
負取樣(Negative Sampling)方法,簡稱NEG,可以看成是噪聲對比估計方法的一 個簡化版本。
回顧上面這條公式:
我們把kQ(w)設為1,就把NCE變成NEG了。
因為NEG與NCE的關鍵區別在於NEG以儘可能簡單的方式來估計這個概率值,所以上式中計算量最大的kQ(w) 項被置為1,於是得到:
當k=|V|並且Q是均勻分佈(若Q為unigram,則這意味著每個詞出現頻率一樣)時,kQ(w)=1成立。此時,NEG等價於NCE。我們將kQ(w)設定為1,而不是其它常數值的原因在於,P(y=1|w,c)可以改寫為sigmoid函式的形式:
如果我們再把這個等式代入之前的邏輯迴歸損失函式中,可以得到:
進一步簡化後得到:
假設
最終得到:
為了與Mikolov et al. (2013)論文中的符合保持一致,h要用vwI替換,v’wi要用v’wO替換,vwij 要用v’wi替換。另外,與Mikolov所使用的目標不同,我們在三個方面做了修改:a)對整個文件集做優化,b)最小化負對數似然,而不是最大化對數似然,c)用蒙特卡洛方法估計期望值
我們發現,僅當k=|V|並且Q是均勻分佈時,NEG才等價於NCE。在其它情況下,NEG只是近似於NCE,也就是說前者不會直接優化正確詞語的對數似然,所以不適合用於自然語言建模。NEC更適用於訓練詞向量表示。
另外,在原始碼實現中,當Q用unigram時,每個詞的頻率會被再弄上一個0.75的冪。
Reference:
[4] 《神經網路與深度學習》第12章 邱錫鵬