自适应Softmax(Adaptive Softmax)

作者: manlier | 来源:发表于2019-05-23 11:04 被阅读0次

    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. 将词汇表分割为两组 V^{HEAD}V^{TAIL}
    2. 将少一些的更常出现的单词放入V^{HEAD}, 其它单词放入V^{TAIL},那么任意一个单词出现在V^{HEAD}中的概率显然更大,即p(V^{HEAD}) > p(V^{TAIL})

    处理步骤

    1. 首先将V^{TAIL},从原词汇表中剔除,并新增一个分类用来指代原来属于V^{TAIL}中的词,那么现在词汇表的数量为V^{HEAD} + 1
    2. 首先在现有的词汇表上做一次Softmax,若单词属于V^{TAIL}, 唯一需要做的就是在V^{TAIL}中再做一次Softmax。那么单词的概率变为了 P^{HEAD}(tail|h) * P^{TAIL}(w|h),P^{HEAD}(tail|h)指单词属于V^{TAIL}的概率,而后者指单词是V^{TAIL}中任意单词的概率。

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

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

    提升推理速度的另一个Trick

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

    相关文章

      网友评论

        本文标题:自适应Softmax(Adaptive Softmax)

        本文链接:https://www.haomeiwen.com/subject/ofkvzqtx.html