LightRNN 论文笔记:LightRNN: Memory and Computation-Efficient Recurrent Neural Networks
2017-04-08 21:48
417 查看
Introduction
近年来RNN被广泛的应用于基于神经网络的NLP任务当中,比如说语言模型,QA等等,并且通常来说由RNN的相关结构能够在这些任务当中取得state of art的表现。不过呢,虽然RNN相关的网络在NLP任务中表现十分优异,但是其也有一些非常显著的缺点,比如说当一个语料库所对应的词表数量非常大的情况下,整个模型的大小也会随之变大。比如,当我们使用RNN构建语言模型的时候,我们首先将词语从one-hot的向量,通过词嵌入的手段,转变为一个稠密的向量形式(如Word2Vec),并且所有词转变后构成一个embedding matrix,而当这个语料中的词语非常多的时候,将会导致这个matrix非常的大,大到我们使用GPU训练的时候,都没有办法将它放到GPU的显存里面。与此同时,除了模型会变的非常大以外,整个模型的训练开销也会随着词表的增大而急速增长。
在RNN LM或者相关的模型的计算中,最耗费时间的一个步骤在于计算预测词的概率,因为必须要通过softmax去计算概率值,而softmax需要计算一个规则项,该规则项需要遍历整个词表。
为了解决这个由于词表增大,而导致的模型大小和计算速度上的开销急剧增大的问题,这篇文章提出了一种新颖的做法,就是在做词嵌入的时候,将一个词对应的词嵌入拆成两部分,一部分可以理解为行嵌入部分,另一部分是列嵌入部分,并且这两部分都是共享的,只保证每个行和每个列的组合,只对应一个词。在传统的RNNLM做法中,一个词的词嵌入表示是一个独立的、唯一的表示,如果有V个词,那么就需要有V个向量来表示。而在这个RNNLM中,由于词嵌入的表示,由行向量和列向量组成,并且行列向量都是共享的,那么对于V个词的预料,那么其实只需要(根号V)的大小去表示,极大的改善了模型大小,并且改善了训练速度。
对于LightRNN的这种做法,其主要难点在于如何构建这种行列向量表示的词嵌入方案,以及如何应用到RNN当中。
对于向量的表示方式,LightRNN的做法是,使用一个Table来表示所有词,每个词对应一个坐标(i,j),所有行坐标为i的词,共享一个行向量,所有列坐标为j的词,共享一个列向量,这样在保证共享行列向量的基础上,保证了词表中的每一个词的具体值都是不一样的。 而在训练中,则是首先随机的将所有词放到一个Table当中,然后再把这些行列向量当做参数来进行训练。
而应用到RNN则其实是以一种特殊的方法,将行列分别输入到RNN当中,这个随后再说。
在试验中,LightRNN主要是训练了一个语言模型,并且取得了减小模型100倍,提升速度2倍的基础上,做到了不逊色于传统语言模型的性能。而LightRNN的目的也就是构建一个十分轻量化、但是不失性能的模型。
Related Work
为了解决当词表增大后,模型复杂度增加的问题,业界已经提出了很多的工作。其中一部分工作,着力于解决由于Softmax需要遍历整个词表去计算概率所带来的时间开销问题。比如说引入层级的概念,将所有词进行聚类,并且使用一个二叉树去表示整个聚类后的结构,可以将时间复杂度降低到log(V)的级别。当然还有一些类似的方案,能够将它降低到根号V的这个级别。不过总体来说,这些方法都只能加速训练的时间,降低时间复杂度,但是并不能降低模型的大小。
而另一部分的工作,则是着力于解决模型的大小问题,比如一些特殊的Softmax结构,比如说Char-Level的卷积等等,但是这些工作减少的也并不显著,并且也不能降低训练的时间开销。
总而言之,似乎现在没有一种能够同时减少模型大小和提升训练速度的好方法,而本文提出的LightRNN却能够同时做到。
LightRNN
从这里开始,将会详细的介绍下LightRNN。2-Component Shared Embedding
在LightRNN中,这种共享行列向量的词嵌入方法,被称为2-Component Shared Embedding。
上图就是这种共享方法的一个示意图。
简单来说,在传统的词嵌入方法中,一个词对应一个embedding vector,而在LightRNN当中,将所有词放入一个表格当中,每个词拥有一个行坐标和一个列坐标,所有行坐标相同的词有着相同的行向量表示,对应的,相同的列坐标有着相同的列坐标表示。也就是一个Embedding Vector分成了两部分(2Component),一个是行,一个是列,并且按照对应的位置共享。于是乎,我们只需要 根号V个行向量,根号V个列向量,就可以表示整个词表了。极大的压缩的模型的大小。
2-Component Shared Embedding应用到RNN网络中的方式,也非常的简单,我们只需要交替的输出行、列向量进入RNN网络就可以。
需要说明的是,对于wt的预测,LightRNN使用的是上一个时刻的Xc和当前时刻的Xr的输出来计算的,这点需要注意下。
假设一个词的坐标是(n,m),并且我们需要计算的是wt这个词的概率,那么我们只需要简单的先后输入行列向量,并且将随后输出的两个值相乘使用,就可以计算出概率了。
相乘方法:
而在具体怎么训练词向量和列向量上,方式就是:
1、首先见表,然后随机初始化
2、和训练语言模型类似,并且设定一个停止条件(比如困惑度或者时间,达到一个标准后)就停止
3、固定2中学到的向量,调整上述表格中的分配,目标是最小化loss func
笔记就到这里吧,先,剩下的我不关心,也没看了
相关文章推荐
- [NLP论文阅读]LightRNN: Memory and Computation-Efficient Recurrent Neural Networks
- 【论文笔记1】RNN在图像压缩领域的运用——Variable Rate Image Compression with Recurrent Neural Networks
- RNN的四种代表性扩展—Attention and Augmented Recurrent Neural Networks(二)
- 论文笔记:Analyzing Classifiers: Fisher Vectors and Deep Neural Networks
- 论文笔记:Empirical Evaluation of Gated Recurrent Neural Networks on Sequence Modeling
- 论文笔记之Label-Free Supervision of Neural Networks with Physics and Domain Knowledge
- RNN的四种代表性扩展—Attention and Augmented Recurrent Neural Networks(一)
- RNN(2) ------ “《A Critical Review of Recurrent Neural Networks for Sequence Learning》RNN综述性论文讲解”(转载)
- LSTM Recurrent Neural Networks for Short Text and Sentiment Classication文章阅读笔记
- 论文笔记《A Survey of Model Compression and Acceleration for Deep Neural Networks》
- 论文阅读笔记:MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications
- [深度学习论文笔记][Semantic Segmentation] Recurrent Convolutional Neural Networks for Scene Labeling
- deeplearning论文学习笔记(2)A critical review of recurrent neural networks for sequence learning
- [深度学习论文笔记][Recurrent Neural Networks] Visualizing and Understanding Recurrent Networks
- 论文《Inside-Outside Net: Detecting Objects in Context with skip pooling and Recurrent Neural Networks》
- RNN的四种代表性扩展—Attention and Augmented Recurrent Neural Networks(二)
- 论文笔记:Mastering the game of Go with deep neural networks and tree search
- 深度学习入门笔记:Fast Image Search with Deep Convolutional Neural Networks and Efficient Hashing Codes
- 【论文笔记2】图像压缩神经网络在Kodak数据集上首次超越JPEG——Full Resolution Image Compression with Recurrent Neural Networks
- 【论文阅读笔记】Rocket Launching: A Universal and Efficient Framework for Training Well-performing Light Net