1. 程式人生 > >【番外】負取樣原理

【番外】負取樣原理

本來不想先寫這篇的,有個任務要用到,就花了一天時間弄清楚,然後總覺得要寫點什麼,就寫了。

NCE(噪聲對比估計)

負取樣可以看成 NCE 的特化,所以有必要先講一下 NCE。

在 Softmax 迴歸中,樣本屬於某個分類的概率是:

P ( y = k

x ) = exp ( w
k T
x + b k )
j e x p ( w j T x + b j )
  = exp ( w k T x + b k ) Z P(y=k|x) = \frac{\exp(w_k^T x + b_k)}{\sum_j exp(w_j^T x + b_j)} \\ \, \\ = \frac{\exp(w_k^T x + b_k)}{Z}

也就是說,要計算它屬於某個分類的概率,就要把所有分類的概率都計算出來。有的時候算力計算一個是夠的,但不夠計算這麼多。

NCE 的想法很簡潔,把多分類變成二分類,還用相同的引數。

我們需要在資料集上取樣。對於每個樣本,它的特徵為 x x ,選取它所屬的類別,並根據某個分佈 N ( y ) N(y) 選取 n n 個其它類別,作為標籤 y y 。然後對於每個 y y ,把 ( x , y ) (x, y) 當做新樣本的特徵。

然後給每個新樣本一個標籤 d d ,如果 x x 屬於 y y ,那麼 d = 1 d = 1 ,否則 d = 0 d = 0

然後整個問題就變成了優化 P ( d = 1 y , x ) P(d = 1| y, x)

我們觀察到,在新的資料集中,如果我們選取 d = 1 d = 1 的樣本,它們的 x , y x, y 和原始樣本一樣。也就是:

P ( y x , d = 1 ) = P 0 ( y x ) P(y | x, d = 1) = P_0(y | x)

為了避免混淆,把原資料集上的那個函式加了個下標 0。

如果我們選取 d = 0 d = 0 的樣本,它們的 y y 就是分佈 N ( y ) N(y) ,與 x x 無關。

P ( y x , d = 0 ) = N ( y ) P(y | x, d = 0) = N(y)

還有,對於每個 x x d d 總會有一個 1 和 n n 個 0。

P ( d = 1 x ) = 1 n + 1   P ( d = 0 x ) = n x + 1 P(d = 1 | x) = \frac{1}{n + 1} \\ \, \\ P(d = 0 | x) = \frac{n}{x + 1}

把它們乘一起,就得到了聯合分佈:

P ( d = 1 , y x ) = 1 n + 1 P 0 ( y x )   P ( d = 0 , y x ) = n n + 1 N ( y ) P(d = 1, y | x) = \frac{1}{n + 1} P_0(y | x) \\ \, \\ P(d = 0, y | x) = \frac{n}{n + 1} N(y)

然後計算需要優化的那個函式:

P ( d = 1 y , x ) = P ( d = 1 , y x ) P ( d = 1 , y x ) + P ( d = 0 , y x )   = P 0 ( y x ) P 0 ( y x ) + n N ( y ) P(d = 1| y, x) = \frac{P(d = 1, y | x)}{P(d = 1, y | x) + P(d = 0, y | x)} \\ \, \\ = \frac{P_0(y | x)}{P_0(y | x) + nN(y)}

負取樣

到現在還是算不出來,Mikolov 在此基礎上做了兩個改動:

第一,把 N ( y ) N(y) 變成所抽樣標籤上的均勻分佈,那麼 n N ( y ) = 1 nN(y) = 1

第二,把配分項 Z Z 變成模型的一個引數 z z

於是,

P ( d = 1 y , x ) = P 0 ( y x ) P 0 ( y x ) + 1   = exp ( w k T x + b k ) exp ( w k T x + b k ) + z   = 1 1 + exp ( w k T