自适应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. 将词汇表分割为两组 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的容量进行预测。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 最近新接触文本分类问题,对于我来数第一个问题就是Word Embedding这个词到底是什么意思,因此也就开始学习...
    小松qxs阅读 24,966评论 2 27
  • 首页 资讯 文章 资源 小组 相亲 登录 注册 首页 最新文章 IT 职场 前端 后端 移动端 数据库 运维 其他...
    Helen_Cat阅读 3,945评论 1 10
  • 主要内容 自然语言输入编码 前馈网络 卷积网络 循环网络(recurrent networks ) 递归网络(re...
    JackHorse阅读 4,268评论 0 2
  • 有人说万事开头难,有人说坚持到底难。对于一个浅尝辄止的人来说,平台期无疑是最难过的。 小A是一个私企里的部门经理。...
    Lucky_mama阅读 170评论 0 1
  • 因为一句“城外的人都想进去,城里的人都想出去”,在家的几天特意拜读了一下钱老爷子的围城,方鸿渐一个具有多重特色...
    站在风中的猪阅读 703评论 0 0