关于ZAKER 合作 加入

AI 入门:循环神经网络

今天我们主要讨论的循环神经网络,到底循环神经网络能解决什么问题,它的结构是怎样的?有什么优缺点?应该在那些领域上上?本文将跟大家一起探讨。

讲到 AI 不得不讲深度学习,而讲到深度学习,又不能不讲循环神经网络(Recurrent Neural Network, RNN)。如果把深度学习比作中国的互联网界,那循环神经网络和卷积神经网络就是腾讯和阿里级别的地位。

看这篇文章之前,建议大家先看下我前面写的两篇文章《深度学习到底有多深?》《入门 AI:卷积神经网络》,本文讨论的内容跟前面写的文章有很强的关联性,看完可能更容易理解本文所讨论的内容。

照例,先给个概述图:

为了方便,在下文中我们用 RNN 来表示循环神经网络。

一、为什么需要 RNN?

我们先来看一个订票系统:

假设我们在订票系统中输入一句话 " 我将在 7 月 20 号去深圳 ",那么订票系统就会这句话中的词进行分类,专业术语叫填槽(slot filling)。

那订票系统会把这些词分别填到 3 个槽中:

目的地:深圳

时间:7 月 20 号

其他类型:我、将、在、去

补充下神经网络的知识,要实现这个分类的话,我们可以搭一个网络架构。

当输入 " 深圳 ",经过网络系统后,会判断出 " 深圳 " 属于目的地槽的概率是多少,然后决定是否属于目的地槽。

但是,假设我们再输入另外一句话 " 我将在 7 月 20 号离开深圳 ",机器能正确处理吗?

对于普通的神经网络,同样的输入,肯定会是同样的输出,因此如果同一个网络输入这两句的 " 深圳 " 的话,那机器肯定会把他们归到同一个槽,这样肯定是错了。

那怎么办?假设我们在输入 " 深圳 " 的时候,机器根据上下文的词,再输出结果。这样是不是有可能解决问题了,没错,这就是 RNN 要做的事。

具体 RNN 怎么工作的,接着往下看。

二、RNN 的工作原理

1. RNN 的工作原理

RNN 的工作原理图:

在神经网络里,每一个神经元的输出,都会被记得绿色的方块里,然后下一次输入的时候,不仅要考虑红色的输入,还要考虑被记在绿色里面的值。

也就是:新的输出是由新的输入和被之前所记下来的值所决定的。

这样的话,我们前面所讨论的问题就可以解决了:

当输入第一句话的 " 深圳 " 时,我们记住前面输入的是 " 去 ",然后就把 " 深圳 " 归为目的地。

当输入第二句话的 " 深圳 " 时,我们记住前面输入的是 " 离开 ",然后就把 " 深圳 " 归为出发地。

因此,我们可以看到 RNN 最主要的两个特点:

新的输出是由新的输入和之前的输出共同决定的。

对于同一个输入,可能会输出不同的结果。

2. RNN 的其他架构

如上左图的架构,是每一个神经元的输出都会被记起来。

如上右图的架构,是网络的最终输出的值才会被记起来。

双向 RNN:

假设我输入一句 "7 月 20 号,深圳,我来了 ",如果用我们之前讨论的网络,就可能有问题。因为之前的网络只能考虑输入在 " 深圳 " 之前的内容,没办法考虑在 " 深圳 " 之后的内容,而 " 来 " 在 " 深圳之后 ",所以网络就不知道 " 深圳 " 是目的还是出发地了。

那双向 RNN 就可以解决这个问题:

双向 RNN 是把同一句话,按正反两个顺序一起丢到网络里去训练,然后综合考虑正反两个顺序再决定输出结果。因此,双向 RNN 不仅考虑了前文,还考虑的后文。

到此为止,我们讨论的都都是最简单的 RNN,但现实可能存在更加复杂的场景。

我们前面讨论的都是输入 " 深圳 " 只会考虑跟它相邻的那个值,如果跟它相距比较远,可能就没办法处理了,比如:我们输入 " 离开了,7 月 20 号,我美丽的深圳 "。

那要怎么解决这样的问题呢?下面我们就来介绍下,RNN 中最经典,也是现在最常用的模型:LSTM(Long short-term memory)。

三、 LSTM

结构图:

由四部分组成:输入门、输出门、忘记门、记忆单元

输入门(Input gate):决定外界能不能把数据写入记忆单元,只有输入门打开的时候,才能写入数据;

输出门(Output gate):决定外界能不能从记忆单元里读取数据,只有输出门打开的时候打,才能读取数据;

忘记门(Forget gate):决定什么时候把记忆单元里的数据清除,打开的时候是不清除的,关闭的时候就会清除;

记忆单元(Memory cell):就是存储数据。

每个门什么打开,什么时候关闭?都是机器自己学的。

具体的计算逻辑:

这个是纯数学逻辑了,大家看下就好,看不明白也没关系,入门不必深究。

从上图我们可以看出,LSTM 是需要 4 个输入,才会有一个输出的。

小结:

LSTM 最大的特点就是:可以有很长时间或距离的记忆能力,而普通的 RNN 不能记住间距大的信息。

除此之外,LSTM 对还能对梯度消失和梯度爆炸有比较好的处理效果。

备注:对于不知道什么是梯度下降的同学,可以翻下之前的文章。这里简单介绍下什么是梯度消失和梯度爆炸。

梯度消失:误差梯度的值变化得太小,没办法移动了,导致机器停止学习;

梯度爆炸:误差梯度变化非常大,网络参数大幅更新,导致网络不稳定。

四、总结

1. RNN 小结

RNN 是根据 " 人的认知是基于过往经验和记忆 " 这一观点提出的,它不仅考虑当前时刻的输入,还考虑对前面内容记忆。即 RNN 对之前发生在数据序列中的事是有一定记忆的,对处理有序列的问题效果比较好。

2. RNN 与 CNN 的不同点

前一输入跟下一输入是否有关联:

CNN :前一个输入和下一个输入之间没有任何关联,因此所有的输出都是独立的。

RNN:前一个输入和下一个输入之间没有任何关联,共同决定新的输出

前馈或反馈网络:

CNN:属于前馈神经网络

RNN:属于反馈神经网络

备注:什么是前馈网络?什么是反馈网络?

前馈网络:每一层中的神经元接收前一层神经元的输出,并输出到下一层神经元,整个网络中的信息是朝着一个方向传播的,没有反向的信息传播;

反馈网络:反馈神经网络中神经元不但可以接收其他神经元的信号,而且可以接收自己的反馈信号。

3. RNN 的主要应用领域

用 RNN 处理需要考虑时间先后顺序的问题,效果都很不错,例如:

自然语言处理(NLP)

语音识别

机器翻译

图像描述生成

文本相识度处理等

好了,到这里就介绍完了 RNN。

本文由 @Jimmy 原创发布于人人都是产品经理。未经许可,禁止转载。

题图来自 Unsplash,基于 CC0 协议。

以上内容由"人人都是产品经理"上传发布 查看原文
相关标签 神经网络上右图

觉得文章不错,微信扫描分享好友

扫码分享

热门推荐