AI入门:循环神经网络

科技 2019-12-25 19:41 阅读:51

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

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

看这篇文章之前,建议大家先看下我前面写的两篇文章、本文讨论的内容跟前面写的文章有很强的关联性,看完可能更容易理解本文所讨论的内容。

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

一、为什么需要RNN?

我们先来看一个订票:

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

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

目的地:深圳

时间:7月20号

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

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

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

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

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

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

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

二、RNN的工作原理 1. 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对还能对梯度消失和梯度有比较好的处理效果。

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

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

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

2. RNN与CNN的不同点

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

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

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

前馈或反馈网络:

CNN:属于前馈神经网络

RNN:属于反馈神经网络

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

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

反馈网络:反馈神经网络中神经元不但可以接收其他神经元的信号,而且可以接收自己的反馈信号。3. RNN的主要应用领域

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

自然语言处理(NLP)

语音识别

机器翻译

文本相识度处理等

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

本文相关词条概念解析:

神经网络

人工神经网络(ArtificialNeuralNetwork,即ANN),是20世纪80年代以来人工智能领域兴起的研究热点。它从信息处理角度对人脑神经元网络进行抽象,建立某种简单模型,按不同的连接方式组成不同的网络。在工程与学术界也常直接简称为神经网络或类神经网络。神经网络是一种运算模型,由大量的节点(或称神经元)之间相互联接构成。每个节点代表一种特定的输出函数,称为激励函数(activationfunction)。每两个节点间的连接都代表一个对于通过该连接信号的加权值,称之为权重,这相当于人工神经网络的记忆。网络的输出则依网络的连接方式,权重值和激励函数的不同而不同。而网络自身通常都是对自然界某种算法或者函数的逼近,也可能是对一种逻辑策略的表达。最近十多年来,人工神经网络的研究工作不断深入,已经取得了很大的进展,其在模式识别、智能机器人、自动控制、预测估计、生物、医学、经济等领域已成功地解决了许多现代计算机难以解决的实际问题,表现出了良好的智能特性。