经过前面几节的学习,相信对经典神经网络已经非常熟悉了。从本节开始,将学习循环神经网络(recurrent neural networks, RNN),它适用于分析和解决具有前后关联性的数据问题。
问题引出
下图是经典的模拟神经网络模型,它认为每一个输入都是独立,没有关联的。
虽然经典的网络模型成功解决了一些问题,但是对于一些涉及前后关联的数据问题,它是无能为力的,例如
我非常向往北京,如果有机会,我一定会去( )。
对于这样的填空题,人脑能很快的填入符合前后逻辑的答案。但是对于上面的经典神经网络模型,它对这样的填空题真的是一头雾水。循环神经网络(CNN)
的提出,就是为了解决这样的问题的。利用 CNN,人们能够和机器人聊天,能够让电脑做出古诗词等有意思的事情。当然,机器人聊天和做诗词,也只是从提供给它的数据集里拼凑出的,它还没有真正的思想。
经典循环神经网络
哲学认为万物皆有联系,所以实际生活中,我们接触到的数据也都是具有联系的。
如上图,一个序列的数据可以是
- x1-4 分别是一句话的第 1-4 个字。
- 在一段语音中,x1-4 表示每帧声音信号。
- 表示连续 4 天的股票。
等等。可以说,经典神经网络对于前后具有关联性的数据集几乎无能为力。循环神经网络RNN
为了解决这类问题,引入了隐状态 h
的概念,h
可以从一系列数据中提取出关联性特征,接着再转换为输出。
上图中的 x1-4 表示输入,h0 是第一个隐状态,之后的隐状态的计算需要根据前面一个隐状态的值。这样前后数据的关联性就被保留在网络里了。
在循环神经网络 CNN 中,图中公式中的 激活函数 f
通常是 tanh 函数
。
按照图中的公式计算完隐状态,还剩下输出
没有计算。计算输出和经典神经网络类似,只不过在循环神经网络CNN中,输入不再是 x,而是隐状态 h。
使用 softmax 函数
将输出转换成各个类别的概率,解决的通常都是分类问题。按照上图的公式,计算完输出,经典循环神经网络CNN
就建立完成了。这种结构的输出纬度必须等于输入纬度,因为这个限制,所以经典循环神经网络RNN
适用范围较小。
N-1 循环神经网络
N-1
的意思是指输入是一个序列,输出不再是对应的序列,而是一个值。它的结构如下图,只在最后一个 h 上做输出变换即可。
h4 是由前面 3 输入递推出来的,保留着输入数据的关联性特征,因此这么做是合理的。这种结构通常用来处理序列分类问题,例如输入一段文字,判断它所属的类别,输入一句话判断它的情感倾向,输入一段视频判断类别等等。
1-N 循环神经网络
顾名思义,即输入是一个值,而输出是一个序列。我们可以只在序列的开始进行计算。
也可以使单个输入值,作为每一个阶段的输入:
它可以解决 N-1 的反向问题,例如,根据情感生成一句话,根据类别生成语音或者音乐,等等。
经典循环神经网络就介绍到这,接下来计划学习生成古诗词的网络。
[…] 上一节介绍了循环神经网络RNN和它的几种变体结构,本节将介绍RNN的改进版,长短期记忆网络(long short term memory, LSTM)。 […]
[…] 简单的说,call方法就是用来计算隐状态的。关于隐状态可以参考前面两节(RNN和LSTM)。而state_size和output_size则表示隐状态的大小和输出向量的大小。 […]