【论文笔记】LightRNN: Memory and Computation-Efficient Recurrent Neural Networks

论文主题:LightRNN 解决的问题是在 perplexity 差不多的情况下 减少模型大小(model size) + 加快训练速度(computational complexity)。论文在多个基准数据集进行语言建模任务来评价 LightRNN这是一篇关于语言模型的文章。提出了使用二分量共享词向量来减少模型大小参数数量来提高运行时间的论文。

前提知识:

  1. perplexity :Perplexity其实表示的是average branch factor,大概可以翻译为平均分支系数。即平均来说,我们预测下一个词时有多少种选择。越小越好。具体说明

     2.语言模型:在这些所有可能的排列的情况中,只有很少一部分(由于语言的多样性,不一定只有一种可能是合法)是可以被人理解的,那么该如何衡量一个词语序列是否是可被理解,或者说怎样的词语序列是合法的?自然语言处理大师贾里尼克(Fred Jelinek)[1]帮我们给出了答案,他用一个非常漂亮的统计数学模型来描述一个自然语言的句子,从而解决了上面的疑问,而这个模型就是本文的主角语言模型(Language Model)具体说明 另一个文章

介绍:

在文本语料规模比较大的情况下,传统 RNN 模型 模型大 训练慢。本文提出的 LightRNN 模型通过采用两个向量组合在一起表示一个词的方法,降低实际训练词向量数目。

RNN 进行语言建模(language modeling)

通过输入嵌入矩阵(input-embedding matrix)从 one-hot 向量映射到一个词向量。 

通过输出嵌入矩阵(output-embedding matrix)将隐藏层映射到词汇表,预测下一词的概率。

当词表包含上千万个不同的词时,如果每个词用一个1024维的嵌入向量表示。这两个矩阵就会包含数百亿   (10Million×1024×2=20Billion)个不同的元素,这会使 RNN 模型变得过大(超过80GB),而当今 GPU的内存最大也只有24GB 。阻碍了RNN在实际中的应用。


词表示:

二分量共享词向量。
词汇表中的每一个词都分配到一个二维表格中,然后每一行关联一个向量,每一列关联另一个向量。

每一行的单词共享一个行向量,每一列的单词共享一个列向量。 2|√V|个向量表示|V|个词。


LightRNN模型:



LightRNN的缩小程度对比


词表生成过程:

1.随机将词分配到词表中。

2.训练LightRNN模型直至收敛。如果达到停止机制的条件(时间、困惑度perplexity)就终止,否则进行下一步。(利用RNN训练向量)

3.将词向量固定,根据最小化损失函数移动词在词表中的位置 。回到第2步。(调整词的位置。)

词调整部分的实现:

主要是定义了一个损失函数,最后推算等同于最小割最大流问题。用了一个近似求解方法,复杂度为O|V|的平方。说明在整个模型中占用的时间比较小。




实验部分:反正就是特别好

结论和未来工作:

提出了一个全新的算法 LightRNN,该算法可用于自然语言处理任务。
LightRNN 很大程度上改善了模型大小和运行时间 。

将 LightRNN 应用于更大的语料库。
将 LightRNN 应用于机器翻译和问答等其它自然语言处理任务中。
探索 k-分量分享嵌入(k>2)并研究 k 在权衡效率和有效性之间的作用。

整理发表代码。(已经完成了哦)

思考:

? 减小模型的同时,LightRNN还能达到更好的精度


原因在于共享嵌入。标准RNN假设每个词都有一个独立的向量表达;
     LightRNN中很多词会共享行和列向量。
     二维词表的行列向量和词的分配都是通过学习得到。
     因此LightRNN能够发现词表中的一些语义关联。

     有语义关联的词共享行或列向量,可以使低频的词的向量更充分的训练。

PPT

参考:http://blog.csdn.net/u011332699/article/details/70634023

 http://www.shuang0420.com/2017/03/14/%E8%AE%BA%E6%96%87%E7%AC%94%E8%AE%B0%20-%20LightRNN%20-%20Memory%20and%20Computation-Efficient%20Recurrent%20Neural%20Networks/


猜你喜欢

转载自blog.csdn.net/chen_xinjia/article/details/79656350
今日推荐