Softmax函数加速(Part II)

关于softmax函数加速那些事(Part II)


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

本章内容:

  • 基于Softmax函数的优化

    • 层次化的Softmax函数(Hierarchical Softmax

    • 差分Softmax函数(Differentiated Softmax

    • CNN-Softmax

  • 基于采样的优化

    • 重要性采样(Importance Sampling/可适的重要性采样(Adaptive Importance Sampling/目标采样(Target Sampling

    • 噪声对比估计(Noise Contrastive Estimation

    • 负采样(Negative Sampling

    • 低频归一化(Infrequent Normalization

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

 

前言:上一章节讲了如何在Softmax函数基本形式上对Softmax函数进行直接的加速优化,这一方向的思路主要有两种:1)降低对单个候选目标的计算代价(差分Softmax函数);2)降低归一化项(normalization)的计算代价(分层思想:层次化的Softmax函数;任务分解思想:CNN-Softmax)。在这一章节中,不采用直接优化的思路,而是在使用Softmax函数为模型进行训练时,在训练阶段进行加速优化。

 

基于采样的优化方法

介绍基于采样的优化方法前,先通过一个例子来明确这类方法的加速目标。

假设模型的参数集为θ,使用Softmax函数,其单个样本的误差(对单个样本的Softmax函数取负对数似然)为:

   

简化上式的书写形式,令,则有:

      

在训练过程中,要使得单个样本的误差最小(在训练集上所有样本的平均误差最小),采用梯度优化的方式,得到关于模型参数集θ的梯度:

        

其中P(wi)是关于目标wiSoftmax函数。在上式的梯度求解过程中,可以明显看到计算代价最大的部分主要集中于求解期望。因此基于采样的优化方法,主要是利用采样的方式估计期望,从而加速训练阶段的求解

 

重要性采样(Importance SamplingIS/可适的重要性采样(Adaptive Importance SamplingAIS/目标采样(Target SamplingTS

这三类方法放在一起说明是因为他们采取的做法近似,简单且直接。利用采样估计期望,就是要通过有限次的采样逼近真实的期望。利用蒙特卡洛方法(Monte Carlo Method),估计的期望为:

由于分布P未知,因此重要性采样(IS[1]是在分布P未知的情况下寻找一个与P近似的分布Q,通过对比样本在分布PQ上的差异,调整当前所采样本的重要程度,最终估计期望。这个采样的重复过程为:

  1. Q分布中采样,得到样本wi

  2. 计算当前样本的调整系数:

  3. 计算调整后的样本:

  4. 更新归一化项:

根据重要性采样估计的期望为

可适的重要性采样(AIS[2]与重要性采样的几乎一致,不同的是在估计分布Q时,采用了多种分布的混合,在面对特定问题时通过调节混合系数来调节分布Q,这样可以更好的逼近P,近而提升采样效率。

目标采样(TS[3]的提出是因为GPU的有限内存导致参数的更新无法一次全部完成。其手段是减少一次更新的目标,通过采样的方法将候选集V切分为若干个子集V’,假设采样所得各个候选集的子集相互独立,在子集上做重要性采样或可适的重要性采样,并最终用于参数的更新。

 

小结:对比Mento Carlo Markov ChainMCMC),重要性采样不需要有收敛的过程,每一步的采样都可以通过调整用来估计期望。在BengioSenécal的论文[1]中提到,采用重要性采样的所需要采样的数量S大约应为:。这意味着采用重要性采样时所估计的分布Q不能与P有太大的偏差,否则很难利用分布Q去覆盖分布P,因而需要从分布Q中获取更多的样本用以校正所估计的期望误差。

 

噪声对比估计(Noise Contrastive EstimationNCE

噪声对比估计(NCE)由GutmanHyvärinen[4]2010年在统计模型中提出使用,MnihThe[5]2012年应用于Softmax函数的训练加速。对比上一种对期望进行近似的采样方式,NCE直接从优化的角度入手,目标为:每次随机的从候选集中采样出一批噪声数据,要求能够最大程度的区分正确目标和噪声之间的差异。换一种说法,NCE采用一种分类的思想来近似Softmax函数的优化问题,例如,每次将正确目标和其他k个随机的候选目标(噪声)混合,如果模型始终能通过分类找到正确的哪一个,那么模型的优化即完成。

基于NCE的对数似然损失函数为:

      

其中分布Q是噪声样本的分布,是噪声样本的期望。为了避免在计算时对候选集V的遍历,采用蒙特卡洛法近似估计,


假设了训练数据由两种分布产生的:1)真实的目标由训练集所对应的分布Ptrain产生(由于Ptrain未知,我们用模型P近似);2)噪声样本由分布Q产生。因此在给定输入x的情况下,经验分布(下式是边缘概率分布的求解过程)


由此我们可以推出概率P(y=1|w,x)的形式(使用贝叶斯公式):


由于模型P采用的是Softmax函数,因此在分母(归一化)部分仍然需要消耗大量的计算代价。采用直接对模型进行约束[5,6],使得分母部分的和为1,即P(w|c)=exp(-hTvw)(加入这种约束后还能对模型的参数起到稀疏性约束的作用)。在约束条件下,概率P(y=1|w,x)的形式为


代入Jθ中可以得到NCE完整的损失函数形式:

   

NCE有理论上的保证:对原Softmax函数的逼近效果随着所采样的噪声样本大小k的增大而提升。一般而言,根据不同的应用问题,噪声样本的规模大小是需要调节的。

 

小结:ISAISTS方法中,需要讨论真实分布P与估计的分布Q的差异,但在NCE方法中则不太依赖这种假设。一般在语言模型中,对于噪声分布Q(和对真实分布做估计的分布Q不是同一个),可以设计为unigram分布,在其他应用问题里,一般也可以根据候选目标在训练集中的其他统计性质来确定分布Q

 

负采样(Negative SamplingNEG

负采样方法(NEG)因为Mikolov等人[7]2013年发表的工作而被世人所熟悉。NEG可以看作是对NCE方法进一步的简化,NEG可以使得模型在更大规模的训练数据集上进行训练。基于NCE方法,NEG方法的假设如下:假设在NCE方法中的kQ(w)=1(当k=|V|,分布Q为均匀分布时成立),则

     

将新的概率分布P(y=1|w,x)代入Jθ,可以得到,


这里的σsigmoid函数。可以明显看到,对比NCE方法,NEG方法的计算更为简便,因此其加速效果也更为明显。

 

小结:虽然通过推导可以看到NEG其实是NCE的一种近似,但NEG并没有直接优化NCE的目标。因此虽然NEG的加速效果明显,并且在word2vec等表达学习中有很好的应用,但其本身缺乏渐进一致性的理论保证,因此并不适合语言模型的建模。关于NEG的具体实现和相关参数设置可以参看[7,8]

 

低频归一化(Infrequent NormalizationIN

低频归一化(IN)的方法出自自归一化(self-normalizationSN)。自归一化(SN[9]本身并不是在训练阶段用来做加速的,SN的目标是使得Softmax函数的分母部分(归一化项)的求和为1,如此exp(hTvw)就可以直接用来表示目标的概率。

Softmax函数的归一化项Z(x)=1,则对应的logZ(x)=0。在原Softmax函数对数似然的损失函数中,加入对归一化项的惩罚项,目标使得Z(x)=1


其中α是平衡系数。由于加入惩罚项后能够有效约束归一化项为1,因此上式还能进一步简化为

      

SN这种直接输出概率,不需要计算归一化项的的思想使得SN能够在解码(获得目标概率)阶段得到更快的速度。在自归一化的基础上,AndreasKlein[10]2014年提出了低频归一化的思想,目标是减少惩罚项的计算代价。引入采样的思想,通过采样使得惩罚项的计算只考虑训练集中的部分随机样本,修改后的损失函数为

     

其中X表示训练集,γ为所采样的样本总数。另外,除了用二阶项作为惩罚外,我们还可以采用一阶项logZ(xj)作为惩罚项。

 

小结:低频归一化融合了NCE思想中采样的思想,以及SN中在编码阶段避免计算归一化项这两种思想的特点,但其所引入的平衡系数需要通过手动调节,这使得模型训练的复杂度有所提升。一般IN的采样率为训练集大小的1/10

 

写在最后的总结:

各个方法的总结陆陆续续地都写在了对应方法的背后,所以最后也就不再多啰嗦了。最后在结尾处加入一张表格,用来比较各个方法,使得大家能够明确各类方法的应用场景,明确各种加速Softmax函数的方法之间的适用情况。

1的结论是综合Chen等人的论文[11]以及Sebastian的博客[12]所得,其中加速倍速一栏中括号内的数字是各方法原作者在其工作所提到的加速倍速,括号外的加速倍速由论文[11]的实验所得。造成两者差异的原因是因为原作者当时在比较时并未使用GPU所导致。通过表格 1的对比可以看到,加速最明显的方法是多层Softmax方法,可适的重要性采样以及负采样;仅有差分Softmax可以同时在训练和测试阶段进行加速。表现性能上,在选集较小的情况下,原Softmax函数,差分Softmax函数以及低频归一化方法能够获得最好的效果;在候选集较大的情况下,多层Softmax和低频归一化可以获得最好的效果。因此在选择具体加速方法时,大家需要根据具体的应用场景选择合适的方法。

 

1各种Softmax函数加速方法的比较

方法

加速倍数

是否能在训练中加速

是否能在测试中加速

表现性能(候选集较小)

表现性能(候选集较大)

所需的参数比例

>>Softmax<<

1x

不能

不能

非常好

非常差

100%

多层Softmax

25x(50-100x)

不能

非常好

100%

差分Softmax

2x

非常好

<100%

CNN-Softmax

(未知)

不能

(未知)

一般(或差)

30%

重要性采样

~19x

不能

100%

可适的重要性采样

~100x

不能

100%

目标采样

2x

不能

100%

噪声对比估计

8x(45x)

不能

100%

负采样

(50-100x)

不能

非常差

100%

低频归一化

6x

(10x)

不能

非常好





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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值