这一节主要是介绍了三种主要的神经网络模型:前向网络、循环神经网络和对称网络
前向网络 Feed-forward Neural Networks
如果把神经元看做节点,把神经元的输出到另一个神经元的输入看做有向边,那么神经网络可以看做是一个有向图,一个有向图没有圈(circle)的神经网络就是前向网络。前向网络应用广泛,也十分经典,常见的CNN就是一个典型的前向网络;全连接网络则为相邻两层节点之间都有权重连接的前向网络。下图即为一个经典的两层前向网络(但不是全连接网络):
当层数逐渐加深之后,我们就称之为深度网络(deep neural networks)(通常存在两个隐层即可称为深度网络)。
前向网络每一层的作用往往是计算一种变换,对输入做变换之后得到一种新的表示输出。而这种变换的目的是为了后续任务更容易完成,例如使得同一类的输入在变换后空间上更加接近,而不同类的输入变换后更加疏离(为了完成这种任务,通常需要使用非线性**函数,从而使得网络可以学习一种非线性变换)。(这种变换可以损失也可以保留信息,取决于权重矩阵的秩)
循环神经网络 Recurrent networks
如上所述,神经网络可以表示为有向图,那该图中存在圈(circle)的神经网络即为循环神经网络。常见的naive RNN, LSTM, GRU都是RNN中的一员,也是RNN的一种特殊形式。RNN因为其存在有向圈,所以分析起来很复杂,也难于训练(现在在加入一些限制条件和技巧之后,RNN已经在很多任务中表现出出色的结果)。RNN模型也存在生理基础,即在大脑中发现了循环连接的神经元。
RNN因为其循环的特性,天生适合对序列信号进行建模。下图是个非常经典常用的RNN用法,隐层节点存在一个自己指向自己的有向边,在时序上展开之后即为下图所示。注意到展开之后的模型与对于每个时间节点构建一个深度前向网络是等价的,但是RNN展开之后的模型每个时间节点的权重矩阵都是共享的,因此不同于直接构建一个前向网络,RNN可以处理任意时长的输入。当然这只是一个简单的RNN模型,要发挥出理想效果(如对长时间序列的数据进行建模记忆等等)还需要很多技巧。
然后Hinton举了一个RNN的例子,是2011年的成果(现在(/2017年)已经有更加impressive的成果发表了):通过阅读英文的维基百科,然后学习到一种RNN模型,这个模型可以一个字符一个字符的输出,最后组合成语法语义都相对合理的语句。Hinton提到输出的时候基于RNN模型,所以每次都会得到一个输出字符的分布:如果每次都只输出最有可能的那个字符则会很容易重复;实际采用根据分布随机选取下一个字符的方式。具体结果如下:
对称网络 Symmetrically connected networks
对称网络是我来刷Hinton课程的原因之一,因为我发现自己对于玻尔兹曼机、限制玻尔兹曼机、Hopfield Net等网络知之甚少,但其又往往对解释神经网络、理解神经网络有帮助。而上诉几个经典模型均和对称网络有着关联。
对称网络其实很像循环神经网络(因为其存在circle),但是不同的是,该网络可以表示为无向图。即每一条有向边都有一条和其方向相反,权重相同的回边,这也是“对称”的由来。两条权重相同、方向相反的有向边可以用一条权重相同的无向边表示。
对称的权重其实限制了网络模型变化的可能性,从而也限制了网络的能力;但这种限制也使得其比循环神经网络更容易分析(往往遵循某种能量方程)。
没有隐藏节点的对称网络往往称为Hopfield Nets,而存在隐藏节点的对称网络则称为玻尔兹曼机(Boltzmann Machine)。玻尔兹曼机比Hopfield Nets能力更强,但要弱于循环神经网络;其拥有一个简单优雅的学习算法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Hinton Neural Networks课程笔记2a:三种主要的神经网络框架之前向网络、循环神经网络和对称网络 - Python技术站