Adaptive Softmax
自適應(yīng)Softmax
原文:https://towardsdatascience.com/speed-up-your-deep-learning-language-model-up-to-1000-with-the-adaptive-softmax-part-1-e7cc1f89fcc9
提出原因
原來(lái)的分層Softmax只使用于CPU,并不適用于GPU
基本原理
根據(jù)2-8原則,即80%的文檔中只包含20%的單詞,或者說(shuō)20%的單詞覆蓋了80%的文檔,設(shè)想下面的場(chǎng)景:
假設(shè)有1000個(gè)單詞構(gòu)成的詞匯表,其中200個(gè)為常用詞,且任意一個(gè)單詞,它為常用詞的概率80%。那么將詞匯表按常用和非常用進(jìn)行分組后,計(jì)算次數(shù)的期望為200 x 80% + 800 x 20% = 320。而原始的Softmax需要計(jì)算1000次。則分組后,計(jì)算速度提升了將近4倍!
那么處理詞匯表的基本思路如下:
- 將詞匯表分割為兩組
和
- 將少一些的更常出現(xiàn)的單詞放入
, 其它單詞放入
,那么任意一個(gè)單詞出現(xiàn)在
中的概率顯然更大,即
處理步驟
- 首先將
,從原詞匯表中剔除,并新增一個(gè)分類用來(lái)指代原來(lái)屬于
中的詞,那么現(xiàn)在詞匯表的數(shù)量為
- 首先在現(xiàn)有的詞匯表上做一次Softmax,若單詞屬于
, 唯一需要做的就是在
中再做一次Softmax。那么單詞的概率變?yōu)榱?
,
指單詞屬于
的概率,而后者指單詞是
中任意單詞的概率。
然而,你并非只能分為兩組,更常用的是分為2-5組,處理方式與2組的相似,以5組為例:
- 首先將原詞匯表進(jìn)行劃分,使其數(shù)量為
,其余4類代表單詞屬于其它分組的概率
- 然后按照2組時(shí)的第二步相同
提升推理速度的另一個(gè)Trick
另一個(gè)以最小的精度犧牲提高速度的方法,就是為每個(gè)組都賦予不同的容量。設(shè)為模型隱層的輸出維度,對(duì)于更常用的單詞,需要更大的容量來(lái)使預(yù)測(cè)更準(zhǔn)確。假設(shè)1000個(gè)單詞,被[200, 400]分為3組,那么前200個(gè)單詞用
進(jìn)行預(yù)測(cè),200-400個(gè)單詞可以
的容量進(jìn)行預(yù)測(cè),剩余的單詞可以
的容量進(jìn)行預(yù)測(cè)。