這篇筆記主要是為了提高訓練的效果和效率,參考的仍是同一作者的英文博文,資源仍來自于Udacity Deeplearning的納米課程。以下兩種方法是在不同的階段對訓練進行了某種程度的優(yōu)化。
Subsampling Frequent Words(基于詞匯頻率的降采樣)
下圖已經在之前的筆記中出現(xiàn)過了,這里我們不難發(fā)現(xiàn)類似于"the"這種高頻詞匯的兩方面問題:
- 對于("fox", "the")這樣的單詞對,"the"并沒有為"fox"提供很多語義上的信息,但出現(xiàn)頻率會很高。
- 對于("the", …)這樣的單詞對也會出現(xiàn)很多次,但從語義上沒有很大意義,所以我們需要更合適的方式去獲得其語義向量。

因此我們要對訓練數據根據其出現(xiàn)的概率進行降采樣,采樣的公式和對應的曲線如下圖所示。不難發(fā)現(xiàn)如果單詞出現(xiàn)的頻率很低,那么該詞匯保留下來的概率會很高,反之隨著單詞出現(xiàn)頻率的升高,該詞匯保留下來的概率就會變得很低。例如:當文本中詞頻小于0.0026時,則保留的概率為1;當文本中詞頻等于0.00746時,則保留的概率為0.5。

所以采用這種方式,可以有效解決高頻詞匯對語義學習的影響。
Negative Sampling(負采樣)
訓練網絡時往往會對全部的神經元參數進行微調,從而讓訓練結果更加準確。但在這個網絡中,訓練參數很多,每次微調上百萬的數據是很浪費計算資源的。那么Negative Sampling方法可以通過每次調整很小的一部分權重參數,從而代替全部參數微調的龐大計算量。
比如訓練("fox", "quick")單詞對時,正確的輸出向量應該是"quick"對應的位置為1,其他位置均為0。而用negative sampling方法,我們僅隨機更新5個負單詞(對應位置輸出為0)的網絡層權重,同時更新正單詞(對應位置輸出為1)的網絡權重。對于負單詞的更新數量,可以根據實際數據集的大小進行調整,數據集越大,負單詞的選取數量就應該盡量減少。
那么此時計算量減少了多少呢?我們可以做一個計算:如果模型的權重矩陣為300X10000,我們選取負單詞的數量為5。對于該網絡層,我們只要更新1800個權重值,是3M總數據量的0.06%,計算資源可以大大節(jié)約。
可以說這兩個方法分別解決了該模型的兩個棘手問題。根據詞頻的降采樣可以有效控制一些高頻詞匯的過度訓練,從而減少了一些不必要的訓練。負采樣可以有效節(jié)約計算資源,同時又減少了對模型準確性的影響。