自适应Softmax(Adaptive Softmax)

Adaptive Softmax

自适应Softmax
原文:https://towardsdatascience.com/speed-up-your-deep-learning-language-model-up-to-1000-with-the-adaptive-softmax-part-1-e7cc1f89fcc9

提出原因

原来的分层Softmax只使用于CPU,并不适用于GPU

基本原理

根据2-8原则,即80%的文档中只包含20%的单词,或者说20%的单词覆盖了80%的文档,设想下面的场景:

假设有1000个单词构成的词汇表,其中200个为常用词,且任意一个单词,它为常用词的概率80%。那么将词汇表按常用和非常用进行分组后,计算次数的期望为200 x 80% + 800 x 20% = 320。而原始的Softmax需要计算1000次。则分组后,计算速度提升了将近4倍!

那么处理词汇表的基本思路如下:

  1. 将词汇表分割为两组 和
  2. 将少一些的更常出现的单词放入, 其它单词放入,那么任意一个单词出现在中的概率显然更大,即

处理步骤

  1. 首先将,从原词汇表中剔除,并新增一个分类用来指代原来属于中的词,那么现在词汇表的数量为
  2. 首先在现有的词汇表上做一次Softmax,若单词属于, 唯一需要做的就是在中再做一次Softmax。那么单词的概率变为了 ,指单词属于的概率,而后者指单词是中任意单词的概率。

然而,你并非只能分为两组,更常用的是分为2-5组,处理方式与2组的相似,以5组为例:

  1. 首先将原词汇表进行划分,使其数量为,其余4类代表单词属于其它分组的概率
  2. 然后按照2组时的第二步相同

提升推理速度的另一个Trick

另一个以最小的精度牺牲提高速度的方法,就是为每个组都赋予不同的容量。设为模型隐层的输出维度,对于更常用的单词,需要更大的容量来使预测更准确。假设1000个单词,被[200, 400]分为3组,那么前200个单词用进行预测,200-400个单词可以的容量进行预测,剩余的单词可以的容量进行预测。

你可能感兴趣的:(自适应Softmax(Adaptive Softmax))