chapter-10-循环网络架构
RNN
目前我们所了解的所有神经网络的架构都是下图左边的,我们输入一个数据,经过一些隐藏层的处理,得到一个唯一的输出。但这种架构方式并不能满足我们所有的要求,有时候我们希望能有其它的输入/输出方式,如下图右侧。因此我们需要一个能够同时容纳输入与输出的可变长度序列的架构方式。
这就是RNN,它的思路是,在输入层和输出层间加入一个循环核心单元,它在每次x输入时进行刷新:即上图从h0到hr的过程,其方程如下:
上述给的是一个多输入对多输出的RNN模型,在输入层右方或输出层左边摘掉相应的神经元,就能得到一对多、多对一一对一的RNN。视频这里只举了一层隐藏层的例子,实际应用中应该可以有多层。
语言模型
语言模型是RNN常关注的一个问题,我们希望能让算法能够在我们给出一个首字符的情况下,给出后面的字符的预测。在我看来,这不仅可以用于搜索引擎,在考虑了语境后,或许也可以用来写文章或绘画。
视频给出以下例子:
在训练时将所有文本依次输入,而在测试时则不同,是只输入首字符,并将首字符的预测结果作为第二个输入:
这种方法的一个问题是,在处理大型数据时计算梯度会非常难,因为每次计算梯度都要计算所有之前的数据。为了解决这个问题,我们采用了一种称为"沿时间的截断反向传播方法(truncated back propagation through time)"的近似处理方法:每次计算梯度时只考虑前n个输入。
以下是RNN的几个实例:
我们可以使用莎士比亚的文集来训练算法,来得到习得了莎翁文风的算法。
将一大堆代数托补学教材的内容输入RNN,它就能输出一篇看上去像模像样的文章,甚至还能绘图(AI论文指日可待):
它甚至还会省略证明,可以说是学到了数学教材的精髓了。
将代码输入RNN,它可以输出一个代码,虽然有很多的问题。
图像标注
图像标注即指输入一个图片,输出对其的描述文字。
视频以李飞飞实验室的论文为例,首先把图片输入一个CNN得到特征向量,然后依次将特征向量输入RNN,得到文字描述。
另一个模型是注意力模型,视频中只是一笔带过,详细解释见:
https://www.jianshu.com/p/926c252eb7b2?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation
LSTM
RNN遇到的一个问题是,当在反向传播计算梯度时,我们实际上是乘以权重矩阵的转置,当这个值大于一时,梯度会变得非常大。称为梯度爆炸;若该值小于一,则梯度会变得很小,称为梯度消失。
为了解决这个问题,我们提出了LSTM模型:
当反向传播时,梯度只在上方经过,且只与f点乘。而且因为f是不断更新的,可以较有效地避免梯度爆炸或梯度消失。