我要努力工作,加油!

tensorflow学习,经典循环神经网络(RNN)的原理与结构(23)

		发表于: 2018-07-19 22:53:12 | 已被阅读: 32 | 分类于: tensorflow
		
经过前面几节的学习,相信对经典神经网络已经非常熟悉了。从本节开始,将学习循环神经网络(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 的反向问题,例如,根据情感生成一句话,根据类别生成语音或者音乐,等等。

经典循环神经网络就介绍到这,接下来计划学习生成古诗词的网络。