67

AI入门:循环神经网络

 4 years ago
source link: https://www.tuicool.com/articles/3EBRfiR
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

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

ABNJbuQ.jpg!web

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

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

照例,先给个概述图:

ryqeuen.jpg!web

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

一、为什么需要RNN?

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

B7BFjaq.jpg!web

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

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

  • 目的地:深圳
  • 时间:7月20号
  • 其他类型:我、将、在、去

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

quui22I.jpg!web

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

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

UVnMB3A.jpg!web

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

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

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

二、RNN的工作原理

1. RNN的工作原理

RNN的工作原理图:

V7b6BzN.jpg!web

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

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

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

NnMFnuv.jpg!web

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

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

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

  • 新的输出是由新的输入和之前的输出共同决定的。
  • 对于同一个输入,可能会输出不同的结果。

2. RNN的其他架构

IRNZfij.jpg!web

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

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

双向RNN:

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

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

EfYJv2u.jpg!web

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

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

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

n2mYnya.jpg!web

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

三、 LSTM

结构图:

YjymM3v.jpg!web

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

  1. 输入门(Input gate):决定外界能不能把数据写入记忆单元,只有输入门打开的时候,才能写入数据;
  2. 输出门(Output gate):决定外界能不能从记忆单元里读取数据,只有输出门打开的时候打,才能读取数据;
  3. 忘记门(Forget gate):决定什么时候把记忆单元里的数据清除,打开的时候是不清除的,关闭的时候就会清除;
  4. 记忆单元(Memory cell):就是存储数据。

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

具体的计算逻辑:

MZb2aqI.jpg!web

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

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

小结:

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

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

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

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

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

四、总结

1. RNN小结

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

2. RNN与CNN的不同点

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

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

前馈或反馈网络:

  • CNN:属于前馈神经网络
  • RNN:属于反馈神经网络

ZRnAv2q.jpg!web

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

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

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

3. RNN的主要应用领域

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

  • 自然语言处理(NLP)
  • 语音识别
  • 机器翻译
  • 图像描述生成
  • 文本相识度处理等

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

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK