可以看作是Softmax計算的另一種加速。 (注意區(qū)分下Word2Vec的huffman softmax)
在正常每個time-step輸出的時候,我們使用的是直接在整個字典大小上softmax:

其中的分母Z是所有的詞語的響應(yīng)和:

Z就是每個詞響應(yīng)的累加,可見Z的計算量太大了,如果每個time-step我們都需要計算每個詞的響應(yīng)并且累加的話,耗時很長。
所以我們進(jìn)一步分析發(fā)現(xiàn),式子(6)對于目標(biāo)詞的梯度可以寫成(左右取log,所以分子分母變加減法):

其中E定義為某個詞語的能量(其實也是這個詞的響應(yīng))。
Z對目標(biāo)詞的梯度就是式子8中的負(fù)項。
不看負(fù)號,這個項實際是能量E在字典V上的的梯度期望?。總€詞y_k的概率×它的梯度),也就是:

作者用importance sampling的方法,找到只跟目標(biāo)詞相關(guān)的詞語。
我們假設(shè)預(yù)定義一個分布Q,并且有一個從Q采樣的字典V',用Q逼近式子9:

如何得到Q分布?就是把語料進(jìn)行partition,每個partition當(dāng)字典大小到達(dá)閾值thres的時候,停止增加詞語。比如第i個partition的字典是V'_i。
這個時候的Q_i定義為:

代入式子10-11,Q項可以被抵消,所以最后的p項(式子8中的負(fù)項的p)為

可以看成,訓(xùn)練的時候的softmax就是在一個小的set V'上計算的。
而我猜想V'是有正相關(guān)和負(fù)相關(guān)詞語的。所以只在小范圍內(nèi)optimize,讓網(wǎng)絡(luò)向目標(biāo)的詞匯更快地邁進(jìn),也是合理的。相關(guān)的詞會直接update到W和b權(quán)重里面。
在測試的時候,恢復(fù)在整個字典V上進(jìn)行softmax。
引用