神经网络随笔 HopField & RBF & BP神经网络
近来需要研究神经网络在控制领域的应用,因此有必要回顾一些经典的神经网络模型,比如HopField神经网络、RBF神经网络。
HopField神经网络是非常特殊的,其关键词是“状态”,即每一个神经元在一个时间点上有状态概念。神经元对应的状态变量的取值可以是离散的,也可以是连续的,也因此分为离散型HopField网络(DHNN)和连续型HopField(CHNN)。这里仅讨论离散型,并且其取值是二值的(-1,1),其它的原理可由其导出。
其特殊之处,除了对每个神经元引入“状态”的概念外,其在结构上没有显式的层次概念,可参见下图。
可以发现,一个神经元的输入就是其它神经元的输出,这里是线性传递函数和符号函数的组成。
某个神经元的输入=符号函数(线性变换参数*其他神经元的状态变量+偏置参数)
如若将全部神经元视为一个整体系统,这就是一种系统内部,信号自反馈的现象。这种结构下,每个神经元的地位都是平等的,因此不存在显式的层次结构。
在实际工作时,DHNN的输入可以视为是每个神经元的状态变量的初始值。模型输入之后,也就是初始化之后,其内部状态不断按照结构图所示的更迭,可以证明,在合适的参数矩阵下(网络使用的都是线性传递函数,参数矩阵由其导出),每个神经元的状态变量在足够多次数的更迭下可以收敛,此时所有神经元的状态变量组成的向量被称为吸引子,整个DHNN被称为是一个稳定的网络。
显然,不合适的参数矩阵,会导致DHNN无法收敛,由于每个神经元对应的状态变量的取值是离散的,模型不会发散,只会振荡。
一个使模型是稳定的充分条件是,线性变换参数矩阵是对称的。如果模型的工作方式是是同步的,则追加对线性变换矩阵的限制,其必须是半正定的。
模型的工作方式指的是,在模拟内部神经元的状态更迭时,模拟方式是异步的还是同步的。是一次只更新一个神经元,固定其它神经元(异步);还是将所有神经元视为一个状态,整体进行更新。(同步)
应注意到,所有参数在状态更迭时都是不变的,换而言之,这些参数是事先设定的,是常数。如果把DHNN理解成是一种非线性动力模型,则可以引入“能量函数”的概念。即认为,所有神经元的状态变量组成的向量,也就是X,对应着一个能量值。能量函数是X的函数。在状态更迭时,能量值不断下降;在模型收敛时,能量值达到最小值。能量函数的一种构造方式如下所示。
对于实际应用,一个例子是无约束优化问题的求解,只需把目标函数编码成HNN的能量函数,更加具体的例子是CHNN成功求解了TSP旅行商问题(经典的NP问题),这也是HNN网络出名的原因。另一个例子是,或许也是HNN有别于其他结构的神经网络的原因,联想记忆,意思是将需要记忆的实体编码入吸引子,这样模型输入另一个实体时,最终仍然收敛到记忆的实体,更加具体的例子是图像复原。
事实上,笔者本身觉得HNN没什么实际用途,以上只是道听途说。
最后,需要注意的是,HNN的参数矩阵是手工设计的,有很多方法可以对所需要的数据集进行构造参数矩阵,无须迭代式地训练。此外,一个设置好参数的HNN模型可能有多个吸引子,也就是说初始化的不同最终可能会收敛到不同的吸引子。
RBF神经网络又名径向基神经网络。
先定义什么是径向基,不如换一个名词,“放射状·团”
点C是这个“放射状·团”的中心。
可见离C点越近,函数值越大。如若使用”场”的概念,则场强等高线图是以点C为中心的圆,形象上,这就是一个放射状,而且是个团,因此可以理解为是“放射状·团”。
注意到,距离的衡量可以使用范数,也有其它的方式。放射函数的定义也是一样,有很多待选函数。
RBF网络的主体思想,就是使用若干个“放射状·团”,每个团有各自的中心,一个团对应着一个隐藏层的神经元,对样本的特征空间进行建模。下面是RBF网络结构图,或许就能阐述这种建模的思路。
隐藏层能编码输入的特征向量与“放射状·团”之间的距离关系,输出层则对隐藏层的输出进行线性变换,得到最终的网络的输出。
与其说RBF是一个特殊结构的网络,不如说这个理论提出了一个新型网络层,RBF层,使用时就和卷积层、池化层、全连接层一样是用来对数据进行变换的。
另外,径向基函数或许和核函数有密切联系(核函数在支持向量机中大放光彩),能将线性不可分的特征表达,转化为线性可分的特征表达。
RBF网络的训练除了梯度下降算法,还可以这样训练。首先使用无监督的聚类算法,找到数据集中的类,再对每个类选择径向基函数,就完成了RBF层的训练。而剩下的输出层,实际上就是全连接层,或者说就是线性模型,其参数可以通过正规方程求解(机器学习-线性模型中有涉及到)
事实上,RBF层使笔者引发了更多的思考。
首先,先定义特征描述子的概念,即一种客观存在的,且极为有效地描述“当前任务对象实体”的“模式”。举个实例,现在深度学习得到的模型的处理流程可能是这样的,以分类任务为例:
原始的特征表达(RGB空间) -》 某些特征描述子 -》 最后类别
最终,直到模型训练完成,我们都可能不知道这些特征描述子的客观含义,只直到它们的计算方式(在训练过程,拟合出来的隐函数就是它们的计算方式)
有了特征描述子的概念后,RBF层或许是这样工作的。
通过聚类,找到数据内部的特征描述子,然后RBF层反映了输入的特征表达与这些特征描述子的关系(使用距离来编码这种关系),最终输出的特征表达就变得更加有效。
如若借用“判别式模型”和“生成式模型”的概念,RBF层就是在对特征表达的状态进行建模。
而对于全连接层,可以清晰的发现,它更多是一种“判别式”的思想。回忆神经元的计算原理,先计算线性变换,再对值进行**,如果说线性变换就对应着一个判别式的触发条件,**就是对应着这个条件,这个判别超平面的响应程度。也就是说,全连接层是在对特征表达进行超平面的分支定界,进行着不同条件的决策,全连接层是对特征表达的行为进行建模。