AI入门:循环神经网络

JM
0 评论 8660 浏览 29 收藏 11 分钟

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

讲到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

结构图:

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

  1. 输入门(Input gate):决定外界能不能把数据写入记忆单元,只有输入门打开的时候,才能写入数据;
  2. 输出门(Output gate):决定外界能不能从记忆单元里读取数据,只有输出门打开的时候打,才能读取数据;
  3. 忘记门(Forget gate):决定什么时候把记忆单元里的数据清除,打开的时候是不清除的,关闭的时候就会清除;
  4. 记忆单元(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协议。

更多精彩内容,请关注人人都是产品经理微信公众号或下载App
评论
评论请登录
  1. 目前还没评论,等你发挥!