神经网络语言建模系列之三:重要性采样


重要性采样(Important Sampling, IS)属于蒙特卡洛(Monte Carlo)方法,被Bengio and Senecal (2003)引入到神经网络语言建模中,用于加速神经网络语言模型的训练。重要性采样方法能够减少神经网络语言模型的训练时间,但是效果并不显著,还会导致模型的稳定性下降,并且只能加速模型的训练,无法提升预测阶段的计算速度。


1. 前言

       目前,神经网络语言建模(Language Modeling, LM)技术被认为是最优以及最有潜力的语言建模技术,相对于其他传统的语言建模技术,如N-gram语言建模,最大熵语言建模等,具有显著的优势。但是,神经网络语言模型的计算量较大,无论是训练还是预测都非常耗时,成为其在实际应用中最大的障碍。加速神经网络语言模型的计算是神经网络语言建模研究的重要方向之一,并且许多加速算法被提出,其中一类加算法是基于采样技术,而最早被引入的就是重要性采样。在Hinton (2002)的启发下,Bengio and Senecal (2003)研究了多种采样方法在神经网络语言模型上的加速性能,最终利用重要性采样成功地加速了神经网络语言模型的训练。引入重要性采样算法的神经网络语言模型在训练过程中,容易出现发散现象,需要采用合理的策略来调整采样数,保持模型稳定。随后,Bengio and Senecal (2008)Jean et. al. (2015)改进了重要性采样在神经网络语言模型中的应用。

2. 重要性采样

       重要性采样属于蒙特卡洛方法,即基于概率统计的数值计算方法,利用随机采样来拟合目标函数。1946年,美国拉斯阿莫斯国家实验室的三位科学家John von Neumann,Stan Ulam 和 Nick Metropolis共同发明了一种采样算法,被称为蒙特卡洛方法。它的具体定义是:在广场上画一个边长一米的正方形,在正方形内部随意用粉笔画一个不规则的形状,现在要计算这个不规则图形的面积。均匀的向该正方形内撒NN 是一个很大的自然数)个黄豆,随后数数有多少个黄豆在这个不规则几何形状内部,比如说有M个,那么,这个奇怪形状的面积便近似于M/N,并且N越大,计算得到的面积便越精确。在这里我们要假定豆子都在一个平面上,相互之间没有重叠。

       采用数学化的语言进行描述,假设求解函数f(x)在分布p(x)下的期望,即

E_{x{\sim}p(x)}[f(x)] = \int_{x}p(x)f(x)dx

       当函数f(x)比较复杂时,直接采用解析方式求解期望比较困难。蒙特卡洛方法,当采样数足够多时,就越接近原始分布,因此函数f(x)在分布p(x)下的期望可转换为:

E_{x{\sim}p(x)}[f(x)] = \frac{1}{N}\sum_{x_i{\sim}p(x), i=1}^{N}f(x_i)

其中,N为采样数,数值越大,结果越接近真实值。

       在实际应用中,实际概率分布p(x)可能比较复杂,不易直接从实际概率分布进行采样。此时,可以引入于实际概率分布p(x)的定义域相同的概率分布q(x),利用概率分布q(x)进行采样,该方法就称为重要性采样。利用重要性采样,函数f(x)在分布p(x)下的期望可改写为:

E_{x{\sim}p(x)}[f(x)] = \frac{1}{N}\sum_{x_i{\sim}q(x), i=1}^{N}\frac{p(x_i)}{q(x_i)}f(x_i)

       此处只对重要性采样方法作了简略的介绍,方便读者理解如何通过重要性采样方法来加速神经网络语言模型的训练。如果需要对重要性采样方法进行详细深入的了解学习,还需参考相关的专业资料。

3. 语言模型加速

       神经网络语言模型的输出层直接输出的为非归一化的条件概率,因此需要采用Softmax函数对输出进行归一化处理,这也是导致神经网络语言模型的计算量较大的重要因素。神经网络语言模型最终输出的条件概率形如:
P(w_t{\mid}h_t) = \frac{e^{-y(w_t, h_t)}}{\sum_{i=1}^{N_v}e^{-y(w_i, h_t)}}
其中,w_t为t时刻的目标词,h_t为t时刻神经网络隐藏层的输出,y(w_t,h_t)t时刻输出的非归一化条件概率,N_v为词典中词的总数。因此,神经网络语言模型可被看作为能量模型的特例,但是是否了解能量模型,并不影响理解重要性采样对神经网络语言模型训练的加速原理。

       神经网络语言模型通常采用梯度下降(Gradient Descent, GD)算法进行训练,模型的参数根据反向传播的误差梯度进行更新。在神经网络语言模型中,模型参数的误差梯度由两个部分构成:目标词w_t的正面强化部分和以P(w_i{\mid}h_t)为权重的其他词w_i (i{\neq}t)的负面强化部分,即:

\frac{\partial{\textrm{log}P(w_t{\mid}h_t)}}{\partial{\theta}} = -\frac{\partial{y(w_t, h_t)}}{\partial{\theta}} + \sum_{i=1,i{\neq}t}^{N_v}P(w_i{\mid}h_t)\frac{\partial{y(w_i, h_t)}}{\partial{\theta}}

       不难看出,正部只涉及目标词,其计算量可以忽略不计。模型的计算量主要集中在负部,因为其他词的数量与词典大小的量级一致,一般为几十万,甚至上百万。如果能够近似地估算出负部的梯度,那么在训练过程中能够极大地减少模型的计算量,这也是利用重要性采样来加速神经网络语言模型的基本思想。

       参数梯度的负部可以看做是梯度在分布P(w_i{\mid}h_t)下的期望,可以通过采样的方式进行近似,即重要性采样。引入与分布P近似的建议分布Q,对参数梯度的负部进行近似得到:

\sum_{i=1,i{\neq}t}^{N_v}P(w_i{\mid}h_t)\frac{\partial{y(w_i,h_t)}}{\partial{\theta}}=\frac{1}{N_s}\sum_{i=1,i{\neq}t}^{N_s}\frac{P(w_i{\mid}h_t)}{Q(w_i{\mid}h_t)}\frac{\partial{y(w_i,h_t)}}{\partial{\theta}}

其中,N_s为采样的样本数量。

       但为了减少计算量,分布P(w_i{\mid}h_t)是需要避免进行计算的,因为计算P(w_i{\mid}h_t)需要计算模型的所有输出。为了对分布P(w_i{\mid}h_t)进行分析,先对其进行如下转换:

P(w_i{\mid}h_t)=\frac{e^{-y(w_t,h_t)}}{\sum_{i=1}^{N_v}e^{-y(w_i,h_t)}}=\frac{e^{-y(w_t,h_t)}}{Z}

       对转换后的分布进行分析,Z 可以看作均匀分布 1/N_v下的期望,即:

Z = \sum_{i=1}^{N_v}e^{-y(w_i,h_t)} = N_v\sum_{i=1}^{N_v}\frac{1}{N_v}e^{-y(w_i,h_t)}

       于是再次利用重要性采样,对Z进行近似估计,可得:

Z = \frac{N_v}{N_s}\sum_{i=1}^{N_v}\frac{e^{-y(w_i,h_t)}}{N_vQ(w_i{\mid}h_t)} = \frac{1}{N_s}\sum_{i=1}^{N_v}\frac{e^{-y(w_i,h_t)}}{Q(w_i{\mid}h_t)}

       经过两次重要性采样操作,便可以得到参数梯度的最终近似估计,即:

\frac{\partial{\textrm{log}P(w_t|h_t)}}{\partial{\theta}}=-\frac{\partial{y(w_t, h_t)}}{\partial{\theta}}+\frac{\sum_{\hat{w}\in{W}}\frac{\partial{y(w_t|h_t)}}{\partial{\theta}}e^{-y(\hat{w}|h_t)}/Q(\hat{w}|h_t)}{\sum_{\hat{w}\in{W}}e^{-y(\hat{w}|H-t)}/Q(\hat{w}|h_t)}

其中,W为采样得到的词集合,其大小即为采样数N_s

4. 模型实现

       经过上述论述,从理论上证明了重要性采样的可行性。在实际应用中,仍然有许多问题。其中两个主要的问题,一个是选取合适建议分布Q,另一个是调节采样的数量,以保证模型的性能,即保证模型的稳定性以及最终的PPL指标。

       选择合适的建议分布Q,对模型的性能有着重大的影响,建议分布Q与目标分布P越接近,其效果越好。关于建议分布Q,通常有如下几种选择:

  • 均匀分布
  • Unigram分布
  • 指数Unigram分布
  • N-gram分布

其中,Unigram分布或者指数Unigram分布是比较常用的分布,比较容易获取,从语言模型的训练数据中直接统计计算即可得到。除了上述采用固定的建议分布外,Bengio and Senecal (2008)提出了利用模型训练过程的输出,对建议分布进行动态修正,减少建议分布与目标分布的差异。

       另外一个重要的问题是采样的样本数的调整。对于重要性采样,如果样本数越充足,其精度就越高,但是如果采样数太大,便失去加速训练的效果。另一方面,随着训练的进行,模型精度越来越高,如果采样数保持不变,重要性采样的精度就会不足,导致模型不稳定,因此需要随着训练的进行,不断增加采样数。Bengio and Senecal (2003)提出了评估采样数是否足够的目标函数,在训练阶段根据目标函数对采样数进行检测调整,而Jean et. al. (2015)则提出利用验证集,对采样数进行评估调整。

       此处,分别引用Bengio and Senecal (2003)Bengio and Senecal (2008)的实验结果来说明重要性采样对神经网络语言模型的加速效果,如下表所示:

序号 模型 PPL 加速
01 原模型(Bengio and Senecal (2003)) 278 -
02 重要性采样Bengio and Senecal (2003) 278 19倍
03 原模型(Bengio and Senecal (2008)) 204 -
04 重要性采样(Bengio and Senecal (2008)) 196.6 100倍

       重要性采样的研究均是在前向神经网络(Feed-forward Neural Network, FNN)语言模型上进行的,因为当时其他的神经网络结构还未被应用到语言建模中。在最初的版本中,Bengio and Senecal (2003)采用的建议分布为Unigram分布,并通过动态的调整采样数来保持模型稳定。然而实验中发现随着训练的进行,采样数迅速增加,并很快达到原模型的计算量,使得加速效果并不理想。其主要原因是建议分布与实际分布相差较大,随着训练的进行,需要更多的样本来保证精度。而后Bengio and Senecal (2008)针对这个问题,对模型进行了改进,在训练过程中利用训练得到的模型对建议分布进行修正,减少建议分布与实际分布的差异,最终使得加速效果得到很大的提升。但是该方法实施比较复杂,并需要额外的存储空间。

5. 总结

       重要性采样方法能够一定程度地加速神经网络语言模型的训练,尤其在训练的初始阶段。随着训练的进行,需要不断提高采样的数量以保持模型稳定,并且采样数的调整策略需要仔细设计,也比较复杂。在实际应用中,采样数会随着训练而迅速地增加,最终达到词典的大小,使得模型训练的计算量达到正常训练时的规模。另外,重要性采用方法,和其他基于采用的加速方法类似,只能够加速模型的训练,而无法提升模型预测阶段的计算速度。尽管如此,重要性采用仍是一种有效的神经网络语言模型的加速方法,并且提供了基于采样来加速神经网络语言模型训练的思路。

作者:施孙甲由 (原创)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354

推荐阅读更多精彩内容