分层softmax_技术 | 词嵌入系列博客Part2:比较语言建模中近似softmax的几种方法...

本文深入探讨了语言建模中近似softmax的多种方法,包括分层softmax、微分softmax、CNN-softmax、重要性采样、目标采样和负采样等。这些方法主要通过改变softmax结构或采用采样技术,以降低计算复杂度,提高训练速度。分层softmax利用树结构降低计算量,微分softmax根据词频分配参数,CNN-softmax引入卷积层,重要性采样和目标采样通过采样策略近似概率分布,而负采样则简化了训练过程。每种方法各有优缺点,适用于不同的场景和需求。
摘要由CSDN通过智能技术生成

原标题:技术 | 词嵌入系列博客Part2:比较语言建模中近似softmax的几种方法

选自SebastianRuder Blog

作者:Sebastian Ruder

机器之心编译

参与:冯滢静

本文是词嵌入系列博客的 Part2,全面介绍了词嵌入模型, Part1请点击

基于Softmax的方法

多层次Softmax

微分Softmax

CNN-Softmax

基于采样(Sampling)的方法

重要性采样

具有适应的重要性采样

目标采样

噪音对比估计

负采样

自标准化

低频的标准化

其他方法

选择哪一种方法?

结论

这篇博文是我们词嵌入及其表示系列的第二篇。在上一篇博文里,我们提供了词嵌入模型的概述,并介绍了 Bengio 等人在2003年提出的经典神经语言学习模型、Collobert 和 CWeston 在2008年提出的 C&W 模型,以及Mikolov 在2013年提出的 word2vec 模型。我们发现,设计更好的词嵌入模型的最大挑战,就是如何降低softmax 层的计算复杂度。而且,这也是机器翻译(MT)(Jean等人[10 ])和语言建模(Jozefowicz等人[6 ])的共通之处。

在这篇博文里,我们将要重点介绍过去几年的研究中 softmax 层的不同近似方法,它们其中的一些被运用在语言建模和机器学习。在下一篇博文里,我们才会介绍别的超参数。

为了统一以及便于比较,让我们简单重新介绍一下上一篇博文的重点:我们假设训练集是一串包括 T 个训练词的字符序列 w1,w2,w3,⋯,wT ,每一个词来源于大小为 |V| 的词汇库 V。模型大体上考虑n个词的上下文 c。我们将每一个词和一个 d 维度的输入向量(也就是表示层的词嵌入)vw 以及输出向量 v′w(在softmax层的权重矩阵的对于词的表示)联系在一起。最终,我们相对于我们的模型参数 θ 来优化目标函数 Jθ。

我们一起来回顾一下,softmax 层对于一个词 w 在上下文 c 出现的概率的计算公式如下:

其中,h 是倒数第二层的输出向量。注意到和之前提到的一样,我们用c来表示上下文,并且为了简洁,舍弃目标词 wt 的索引 t。计算softmax的复杂度很高,因为计算 h 和 V 里每个词 wi 的输出向量的内积需要通过一部分的分母的求和来获得,从而得到标准化后目标词 w 在上下文 c 的概率。

接下来我们将会讨论近似 softmax 所采用的不同方法。这些方法可以分成两类:一类是基于 softmax 的方法,另一类则是基于采样的方法。基于 softmax 的方法保证 softmax 层的完好无损,但是修改了它的结构来提升它的效率。基于采样的方法则是完全去掉 softmax 层,优化其它目标函数来近似 softmax。

基于 softmax 的方法

多层次的 softmax 方法

多层次的softmax(H-Softmax)是 Morin 和 Bengio[3]受到二叉树启发的方法。根本上来说,H-softmax 用词语作为叶子的多层结构来替代原 softmax 层的一层,如图1所示。

多层次的softmax(H-Softmax)是 Morin 和 Bengio[3]受到二叉树启发的方法。根本上来说,H-softmax 用词语作为叶子的多层结构来替代原 softmax 层的一层,如图1所示。

这让我们把对一个词出现概率的计算分解成一连串的概率计算,我们将无需对所有词作昂贵的标准化。用 H-Softmax 来替代单一的 softmax 层可以把预测词的任务带来至少50倍的速度提升,因此适用于要求低延迟的任务,比如 Google 的新通讯软件 Allo 的实时沟通功能。

图 1:多层词的 softmax

我们可以把常规的 softmax 想成是只有一层深度的树,每个 V 中的词都是一个叶子节点。计算一个词的 softmax的概率则需要标准化所有 |V| 个叶子的概率。反之,如果我们把 softmax 当成一个每个词都是叶子的二叉树,我们只需要从叶子节点开始沿着树的路径走到那个词,而无序考虑其它的词。

因为一个平衡的二叉树的深度为 log2(|V|),我们只需要通过计算最多 log2(|V|) 个节点来取得一个词最终的概率。注意到这个概率都已经经过了标准化,因为二叉树中所有叶子节点的概率之和为1,所以形成了一个概率分布。想要粗略地验证它,我们可以推理一个树的根节点(图1中的节点0),它的所有分支必须相加为1。对于每个接下来的节点,概率质量分解给它的分支,直到最终到达叶子节点,也就是词。因为这其中没有损失概率,而且所有词都是叶子,所有词的概率的总和必须为1,所以分层次的 softmax 定义了在 V 上所有词的一个标准化的概率分布。

具体而言,当我们遍历树的时候,我们需要计算每个分支点的左右两个分支来计算这个节点的概率。正因如此,我们要为每个节点指定一个表示。对比于规律的 softmax,对于每个词,我们因此不需要 v'w 的输出词嵌入——反之,我们用给每个节点 n 都指定词嵌入 v′n。因为我们有 |V|−1 个节点,而每一个都拥有一个唯一的表示,H-Softmax 参数都和普通的 softmax 几乎一样。我们现在可以计算给定上下文 c 一个节点 n 的右分支(或左分支)的概率了,方式如下:

这个方法和普通的 softmax 的计算方式几乎一致。现在,我们不计算h和词嵌入 v′w 的点乘积,而是计算每个树节点的h和词嵌入 v′w。另外,我们不计算整个词汇库里所有词的概率分布,我们仅仅输出一个概率,在这个例子中这个概率是 sigmoid 函数的节点 n 的右分支的概率。相反地,左分支的概率是 1−p(right|n,c)。

图 2:多层次的 softmax计算

由此易得一个词w在上下文c中的为左右分支的概率之积。举个例子,在上下文「the」、「dog」、「and」、「the」之中,在图 2 中词「cat」的概率可以通过计算从节点1向左,经过节点2转右,再在节点后转右所得的概率来计算。Hugo Lachorelle 在他的课程视频 (https://www.youtube.com/watch?v=B95LTf2rVWM)中提供了一个更详细的介绍。Rong[7] 也很好地解释了这些概念,并且推导了 H-Softmax 的导数。

显然,树的结构十分重要。直观上来说,如果我们让模型在每个节点都来学习二元分类,比如我们可以让相似的路径获得相似的概率,我们的模型应该可以获得更好的表现。基于这一点,Morin 和 Bengio 给树提供 WordNet中的 synsets 的聚类。然而,他们的模型表现却不如常规的softmax。Mnih 和 Hinton [8] 用一个聚类算法来训练树结构来低轨地把词分成两堆,并且他们的模型在一部分的计算中表现和常规的 softmax 相当。

值得注意的是,只有在我们提前知道想要预测的那个词(以及它的路径)时,我们才能够加速训练。在测试阶段,当我们需要预测最可能出现的词时,尽管缩小了范围,我们仍然需要计算所有词的概率。

实际上,我们不需要用「左」和「右」来指定子节点,我们可以用一个对应路径的位向量来索引节点。在图 2,如果我们假设用比特 0 来表示向左和比特 1 来表示向右,我们可以用0-1-1来表示一条左-右-右的路径。

让我们回顾一下,一个平衡二叉树的路径长度是 log2|V|。如果我们设置 |V|=10000,这就相当于一条大约长度为13.3 的路径长度。相似的,我们可以用平均长度为13.3的路径的位向量来表示每一个词。在信息论中,这指代一串信息长度为 13.3 比特的字。

字的信息内容小结

首先回忆,一个词 w 的信息量(信息熵)I(w)是它的概率的负对数 I(w)=−log2p(w)。

在数据集中所有词的熵H就是在一个单词库的所有词的信息熵的期望:H=∑i∈Vp(wi)I(wi)

我们也可以把一个信息源的信息熵想成是用来编码这部分信息所用的比特数。对于抛掷一枚公平的硬币,每次需要1比特;而对于一个总是输出相同符号的信息源,我们只需要0比特。对于一个平衡二叉树,我们平等对待每一个词,每个词 w 的熵 H 将拥有同样的信息量 I(w),因为每个词都有同样的概率。在一个 |V|=10000 大小的平衡二叉树中平均的词信息熵 H 就恰好是它的平均路径长度:

我们之前讲过,树的结构十分重要。值得注意的是,利用树的结构不但可以获得更好的表现,更可以加速运算:如果我们将更多信息加载进树中,那么更少信息的词将不意味着更短的路径,因为有些词出现频率更高,就可以用更少的信息去编码它。一个 |V|=10,000 长度的信息库的词信息熵大约为 9.16。

因此,考虑到出现频率,我们可以减少一个词汇库中每个词中的平均比特数。在这个例子中,我们从 13.3 减少到 9.16,相当于加速了 31%。Mikolov 等人 [1]把哈夫曼树运用在多层次 softmax,把更少的比特赋给更常出现的词。比如,「the」这个最常见的英语单词,在树中只需要最少比特数的编码,而第二常见的单词将会被指定第二少比特数的编码,以此类推。虽然我们仍然需要用相同数量的词去编码一个数据集,然而有更高频率出现短的编码,所以平均而言,去给每个词编码只需用更少的比特数。

一个类似于哈夫曼编码的编码又被称为信息熵编码࿰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值