一天搞懂深度学习—学习笔记3(RNN)

来源:互联网 发布:淘宝美工自学网站 编辑:程序博客网 时间:2024/06/05 06:59

Recurrent Neural Network(RNN) (Neural Network with Memory)

1.一些基本的理解

开场首先来个填词题目,I would like to arrive at (Taipei) on (November 2nd). 我们人来填的话,很简单就能想到第一个空是地点,第二个是时间。那么对于计算机,它该如何处理这样的内容呢。

首先第一个要解决的是表示形式。
在语言中,最基本的是字,然后由字可以组成词语,词语可以连成句子,那么问题就变得简单了,只要我们能表示一个词语,并让计算机识别这个词语,那么就可以表示这样一个句子。不过在自然语言中,一个字表达的意思往往不够清楚,因此主要选择对词语进行建模,然后连词成句,当然也可以对字进行建模,不过数量上应该少很多。

怎样对词语建模呢
如果了解work2vec的工作原理,那这个问题就很简单了。work2vec将句子先拆分成词语,首先建立词语库,对每一个词语初始化100、200甚至更高维度的词向量,注意到,这里的词向量是需要先初始化的,然后在不断的训练中得到最优词向量。
(有一种编码方式叫做独热编码one-hot encoding, 具体内容查看下面网址,个人觉得这个讲的比其它的好 http://www.wyblog.cn/2016/10/31/%E6%95%B0%E6%8D%AE%E9%A2%84%E5%A4%84%E7%90%86-one-hot%E7%BC%96%E7%A0%81/)

2.我们来看看RNN

A recurrent neural network and the unfolding in time of the computation involved in its forward computation. Source: Nature

The above diagram shows a RNN being unrolled (or unfolded) into a full network. By unrolling we simply mean that we write out the network for the complete sequence. For example, if the sequence we care about is a sentence of 5 words, the network would be unrolled into a 5-layer neural network, one layer for each word.
1.xt is the input at time step t. For example, x1 could be a one-hot vector corresponding to the second word of a sentence.
2.st is the hidden state at time step t. It’s the “memory” of the network. st is calculated based on the previous hidden state and the input at the current step:
3.st=f(Uxt + Wst-1). The function f usually is a nonlinearity such as tanh or ReLU. s-1, which is required to calculate the first hidden state, is typically initialized to all zeroes.
4.ot is the output at step t. For example, if we wanted to predict the next word in a sentence it would be a vector of probabilities across our vocabulary. ot = softmax(Vst).

上文简单点翻译过来就是说,RNN网络是时序性质的网络,在文本处理中,我们需要多少个信息(以每个RNN神经单元的输出信息为单位信息),则RNN就会展开多少层去模拟生成。从介绍中我们也可以知道,RNN第一个隐藏层的初始状态初始化为全0,每一层都会有输出信息,而且输出信息是由softmax处理得到的概率分布信息。

3.RNN作用

RNN主要作用在NLP(Neural Language Processing)领域,因为在语言处理过程中需要知道语义上下文信息。上图的RNN模型是可以知道上文信息的模型,当然我们亦可以实现上下文都可以得知的双向循环RNN模型,亦可以多个RNN结构叠加。其实这个设计就看需求了。在RNN中用的最多最火热的就是LSTM(Long Short-term Memory)了,我们接下来谈一谈这个。

4.LSTM
先来看一天搞懂深度学习里面的两张图(就是这么大张旗鼓的用别人的东西)

这里写图片描述

这里写图片描述

看到LSTM加了一个Forget Gate,事实上就是这样简单么? 我们来看两张对比图片。


这里写图片描述
这里写图片描述

LSTM的核心是顶部的那条cell线,它直接穿过各个时刻的隐藏层,并且只会进行简单的变大变小(X号表示乘以一个倍率)以及添加新内容(+号),因此它可以在各个时刻变换中,使信息无损地保留下去。

对于当前时刻,第一个要做的就是要去除掉哪些无用的信息,第二个添加新信息,最后输出结果。具体反映在图中依次为从左到右,主线上x号对应的为去除无用信息的,主线上+号对应的就是增加信息的。

这里写图片描述

这里写图片描述

同样是用ht-1和x作为输入,首先是一个sigmoid的门,来判断我们需要更新哪些信息。然后再用一个tanh门函数,来表示我们可能要更新信息的数值,两者相乘,得到具体要更新哪些信息,以及他们对应的数值。最后再加入到Ct-1中,得到这些数值之后,我们就能得出当前状态Ct了:

这里写图片描述

我们得到的Ct可以作为cell线的输出,剩下还有隐藏层和当前时刻的输出需要处理,方法如下:

首先把Ct的状态,用tanh函数转化为适合隐藏层和当前时刻输出的形式(-1到1),然后根据ht-1和x的消息,选择把哪些输出。比如x输入了一个新的性别消息,比如man,那么相应的我们就需要把该身份信息传递给下一时刻,这样一来,如果下一时刻的输入信息要求推测动词的使用形式,那么根据我们传递过去的man这个信息,就能确定此时应该用第三人称单数作为输出。

最后:话说这些图做的都炒鸡好,感谢!

参考文献
1.http://www.wildml.com/2015/09/recurrent-neural-networks-tutorial-part-1-introduction-to-rnns/
2.http://www.jianshu.com/p/9dc9f41f0b29
3.http://blog.sina.com.cn/s/blog_8e5ce7190102wsna.html

阅读全文
0 0
原创粉丝点击