Softmax函数加速(Part I)

关于Softmax函数加速那些事(Part I)

===========================

本章内容:

  • 基于Softmax函数的优化

    • 层次化的Softmax函数(Hierarchical Softmax

    • 差分Softmax函数(Differentiated Softmax

    • CNN-Softmax

  • 基于采样的优化

===========================

 

前言:关于Softmax函数我想自不必多说,在机器学习的一般方法中,Softmax函数可以在很多问题中用于拟合目标的生成概率,例如,语言模型中单词的生成概率,排序学习中对应位置文档的出现概率(更准确的说法应该是Luce model),信息传播中级联传播过程的概率等都可以用Softmax函数拟合。更为直白地说,Softmax函数的建模目标是如何从一堆候选集中挑选出正确的那一个,在数学上,就是最大化正确目标的数值(同时最小化候选集中的其他目标)。但使用Softmax函数去拟合特定目标的生成概率时会遇到一个非常明显的问题:当候选集较大时(一般量级大于10K),Softmax函数的计算代价会决定整个优化算法的计算效率,甚至左右测试阶段的计算效率。因此,如何优化Softmax函数的计算成为了这些问题的关键。下面,我们就来看看有哪些优化Softmax函数计算的方式,以及这些优化方法中的联系。

 

基于Softmax函数的优化方法

要介绍基于Softmax函数的优化方法,首先了解下Softmax函数的具体形式:

                    

                                                                           

给定候选集V以及样本x的条件下, h是给定样本下的特征空间,wwi是对应候选目标的参数向量。在Softmax函数中,计算代价最大的是分母部分(也称为normalization)。可以看到,分母部分的计算代价于候选集的数量相关。那么我们是否有办法减少候选集的数量,或者采用其他方法降低计算每一候选目标的计算代价?带着这个问题,我们来看下基于Softmax函数优化的三种方法。

 

层次化的Softmax函数(Hierarchical SoftmaxH-Softmax

  • 两层的H-Softmax

利用层次化的思想可以解决很多复杂问题,尤其是查询相关的问题,使用层次化思想可以大幅降低问题的复杂程度。自然科学中的分类学就是利用层次化思想解决复杂问题的一个很好的例子,基于分类学思想,自然界中纷繁的生物关系得以整理明确。在Softmax函数的优化中也可以利用这一思想,将挑选正确目标的过程形式化为一个逐层的分类查找问题(见图1)。

图 1两层的H-Softmax结构

1所示的层次化框架由Goodman[1]2001年首先提出,Mikolov等人[2]2011年应用于Softmax函数的加速上中:

这种方法在原Softmax函数前增加了分类先验,可以有效降低了原Softmax函数的计算代价。


  • 多层的H-Softmax

另外一种H-Softmax函数是将选择正确目标的过程形式化为一个迭代的二分类问题。和上一种层次化的方法在思想上近似,这种多层的方式可以更为有效地对原Softmax函数进行加速。图2示例了在语言模型中使用多层H-Softmax函数建模单词生成的一个典型场景:最大化p(“cat”|context)等价于在给定context的条件下,最大化从根节点开始到单词“cat”这条路径的概率。从信息论的观点来看,这种查询的过程被称为编码过程。进一步地,我们还可以根据训练集构建Huffman编码树从全局上优化根节点到目标之间的编码距离,进一步对多层的H-Softmax进行加速。


2多层H-Softmax的检索示例

 

小结:两种H-Softmax函数对原Softmax函数的加速效果非常明显。假设大小为|V|的候选集,使用两层的H-Softmax的加速策略,如果设定个分类,则最终的算法复杂度可以降低至。使用多层的H-Softmax的加速策略,如果构建的迭代二分类过程是一颗完全二叉树,则最终的算法复杂度可以降低之。但将Softmax函数层次化后由于其参数数量增加,会使得优化难度增加,优化需要更长的迭代步,同时也需要更多的有效样本进行训练,因此在对原Softmax函数加速效果不明显的情况下不推荐使用。

 

差分Softmax函数(Differentiated SoftmaxD-Softmax

这一优化思路来源对实际数据的具体观测。在我们所处理的应用问题中,涉及到由人所产生的数据里应用普遍存在长尾分布,例如,词分布、在线销售商品的购买/点击、活跃用户的数量等等。这一现象启发了我们可以在优化过程中,可以学习一个稀疏参数矩阵用来拟合目标的生成:由于训练样本数量的缘故,那些频率较低的样本可以采用比频繁出现的样本更少的参数用来拟合。由于长尾分布的存在,在大量的应用中,采用这种策略所学到的参数矩阵可以是非常稀疏的。Chen等人[3]2015年提出一种将参数矩阵按对应目标在训练样本中的出现频次根据经验分块的D-Softmax函数形式(见图3)。这样在计算Softmax函数时因为参数的大量减少,计算代价大幅降低从而起到加速的作用。


图 3 D-Softmax函数中分块的参数矩阵

 

小结:采用D-Softmax函数对原Softmax函数进行近似几乎没有损失,因此D-Softmax函数是表现性能最为优异的一种方法。但D-Softmax函数在模型的训练阶段没有H-Softmax函数的加速效率高,另外采用D-Softmax函数需要经验地设置分块数量以及各分块的大小,一定程度上增加了模型调参的难度。

 

CNN-Softmax函数

在文本领域将RNNCNN结合的思路是这几年做模型融合的思路之一。设计CNN-Softmax函数的思想是由Jozefowicz等人[4]Kim等人[5]的工作启发提出:将原本在输入层构建的字符级别的卷积网络在输出层也同样构建一个(见图4)。在Softmax函数的计算时,将原候选目标(单词)的参数向量由构建的卷积网络的输出替换


如此,原本在输出层所需要的d× |V|的参数矩阵,可以由加入卷积网络的学习而大幅缩减。因为参数的大量减少,计算代价大幅降低从而起到加速的作用。


图 4 CNN-Softmax在RNN中的应用

另外,Jozefowicz的工作中还提到了一种由字符预测模型代替Softmax函数的方式(见图5)。由于字符数量明显少于单词数量,这种模型的加速效果也相当明显。


图 5字符预测模型替换Softmax函数

 

小结:采用字符级别的卷积网络的一大问题是字符相对于单词表示空间更为平滑,因此这种字符级别的模型很难区分出拼写相近但词意差别很大的单词。为了解决这一问题,可以对每一单词增加一个矫正因子(correction factor)用以区分单词之间的差异。但加入了矫正因子后,会使得CNN-Softmax函数和原Softmax函数之间的结果差异加大。另外,Jozefowicz所提出的后一种模型,会大幅降低语言模型的表现性能,故而这里并不推荐使用。

 

 

参考文献:

[1] Goodman, J. Classesfor fast maximum entropy training. Acoustics, Speech, and Signal Processing, 2001.Proceedings.(ICASSP'01). 2001 IEEE International Conference on, 2001,1, 561-564

[2] Mikolov, T.;Kombrink, S.; Burget, L.; Černock, J. H. & Khudanpur, S. Extensionsof recurrent neural network language model. Acoustics, Speech and Signal Processing (ICASSP), 2011 IEEEInternational Conference on, 2011,5528-5531

[3] Chen, W.;Grangier, D. & Auli, M. Strategies for Training Large Vocabulary NeuralLanguage Models. arXiv preprint arXiv:1512.04906, 2015

[4] Jozefowicz, R.;Vinyals, O.; Schuster, M.; Shazeer, N. & Wu, Y. Exploring the limits oflanguage modeling. arXiv preprint arXiv:1602.02410, 2016

[5] Kim, Y.;Jernite, Y.; Sontag, D. & Rush, A. M. Character-aware neural languagemodels. arXivpreprint arXiv:1508.06615, 2015


  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值