开发者学堂课程【神经网络概览及算法详解:随机神经网络】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/40/detail/949
随机神经网络
内容介绍
一.波尔兹曼机
二.模拟退火算法
三.BM 的能量函数
四.BM 的特点
五.自联想与异联想
六.BM 的学习算法
七.受限波尔兹曼机 RBM
一.波尔兹曼机
随机神经网络,最典型的就是波尔兹曼机。波尔兹曼机( Boltzmann Machine, BM)简称 BM ,也称 Stochastic Hopfield Network with Hidden Units ,它是一种随机生成的 Hopfield 网络。1983年-1986年,由 Hinton 和 Sejnowski 提出,这个神经网只有0和1两种状态,它的取值是根据规律统计法则来决定的,这个统计法的最终的形式和统计力学家波尔兹曼提出来的波尔兹曼分布非常相似,所以被称作 Boltzmann 机。它就叫波尔兹曼机, BM ,没有其它的名称。
特点
1. 有可见节点和隐藏节点之分。
2. 形式上和单层反馈网络 DHNN (离散 Hopfield 网络)非常接近
3. 可见节点实现输入输出,隐藏节点实现输入输出之间的联系
4. 从功能上看,它和三层 BP 网络比较接近
5. 权重矩阵是对称的,且自反馈为零,也就是它的对角线值是零,Wij 等于零。另外它是对称到,根据矩阵的对角线是对称的,得到Wij 等于 Wji。
它单个神经元的净输入等于矩阵乘以输入,它的阈值就是最常见的一种。
在 DHHN 或者 BP 网络中,激活函数,我们以函数 sgn 为例,直接作用于净输入。直接用 sgn 作用于我们刚才算出的 net 值,波尔兹曼机采取的是模拟退火算法,它按照概率输出1或0,它并不是直接就是在 DHNN 或BP中。
如果使用 sgn 函数作为激活函数,那么它就严格的有 sgn 函数里的净输出值来决定最终的结果。
如果净输入值是小于等于0的,那就它就是0或者是-1;如果它是大于0的,它就是1,是固定的,。但是波尔兹曼机不是的,它采用模拟退火算法,按照一定的概率得到这个结果。
那如何计算呢?
Pj(1) 就是1加1的负T分之净输出的net分之一, P0 就等于1减 P1 。按照这个算法来输出,它基本上就是如图所示的分布。
注意: T 的取值将影响到图像形状,比如 T 等于1的时候,它就是红颜色的图线;
T 小于等于1的时候,它就是上面绿颜色的图线,T 越小,图线越容易快速进入饱和区。如果 T 大于1,图线就变得平缓,进入饱和区的时间会比较长。当净输入 net 等于0的时候,带入计算, e 就等于1, Pj(1)就等于0.5, Pj(1) 等于 Pj(0) 等于0.5,输出1或0的概率是相等的,都是50%。当 net 值变大,e 就变小,分母就变小,它输出1的概率就变大了。
另外也和控制参数 T 相关,这是因为 T 的取值不同,它接近0和1的速度也会不同。
二.模拟退火算法
模拟退火算法( Simulated Anneal),简称 SA ,它和之前讲的函数意义都和热力学是有一定联系的,或者说和能量是相关的,所以退火是指物体温度逐渐降低,随着温度的降低,物体的能量状态也会变低,在结晶状态时它的能量最低。
模拟推广算法也就是模拟退火的过程,但是它在搜索过程中加入了一些随机因素,比如如果达到一个最值,或者有可能是局部最优值,也有可能是全局最优值,就是达到 B 点后,会以一定的概率跳出来。比如,如图达到 B 点以后,他原本应该沿着某个概率继续往右移动,然后模拟退火算法就使这个搜索有可能跳出局部的值。
我们画一个比较典型的例子。比如,当我们按照一定的顺序、一定的方向算到一个局部最小值之后,如果是严格的判断它是不是局部最小值,它就会返回这个局部最小值作为一个最终的结果。现在已经到了这个最小值之后,我又让它有一定的概率跳出这个最小值,那它实际上是有一定的概率跳到这个全局最优值上(即所画图中的最低点)。这就是模拟退火算法的好处。
根据 Metroplis 准则,它的概率是这样的:
如果进行调整之后,新算出来的能量,即全局的能量比原来的能量小,那就 100% 的去取这个值,也就是,沿着这个方向走,整个网络段会变的更稳定,即能量更低,所以就100%的取这个值;如果新算出来能量大于原来的能量,也就是说偏一下之后,状况比以前变得更糟了,那就证明原来的这个能量值有可能是全局最小的能量值,也有可能是局部最小的能量值,这个时候我会给他一个概率让他跳出这个值,就是让它有机会去得到这个全局最优值。
解释:当 FY2 加1小于 FY 的时候,也就是说,下一个值比当前小,就100%的接受,证明它还是在一个下降过程中,如果 FY2 加1大于当前这个值,也就是说,下一个值比当前值大,则以一定的概率接受,和控制参数 T 相关, (T 会随着时间逐渐衰减,模拟退火),每次接受一个更糟糕的值概率在不断降低,另外还有一定的概率会跳出会接受,也就是说,正常来讲已经算到一个最优值了,但是有一定的概率不接受这个最优质,让它继续去搜索,但是 T 会慢慢的衰减。这个值实际上是随着时间在不断降低的。
三.BM 的能量函数
BM的能量函数采取了和 DHNN 一样能量函数来描述网络的状态,
即如图所示的公式,公式后面是个分量形式。
网络状态改变的量,就等于在 t+1 时刻的状态减掉在 t 时刻的状态。
网络能量改变量等于在 t+1 时刻的能量减掉在 t 时刻的能。后面这个值,矩阵的对角线的值是0。
解读:当这个净输出,即 net ,它大于0并且有 Pj 大于0.5的时候,经元 j 有比较大的概率等于1;小于0,且有 Pj 大于0.5,经元 j 也有大的概率等于0。也就是说,有大概率接受就说明有小概率跳出。
Xj(t),它等于1的时候,有德尔塔 t 等于1减1,就等于零,所以德尔塔 E 就是零;它等于0的时候,就有1减零,所以德尔塔 E 就小于零,下边也是一样的。
四.BM 的特点
当 Xj 等于1的时候,网络能量为 E1;当 Xj 等于0的时候,对应的网络能量为 E0 ,所以当 Xj 从1变成0的时候,我们就会有德尔塔 E 等于 net ,等于净输出。从1变成0的时候,就等于 -net ,也带入计算。
这两个式子就是波尔兹曼分布,所以整个的神经网络一类的我们就把它叫做波尔兹曼机。当波尔兹曼机处于某一状态的概率主要取决于此状态下的能量 E ,能量越低,概率越大。
也就是整个神经网络处在什么状态下和当前状态所对应的能量相关,如果当前状态对应的能量比较高,那神经网络处在这个状态的可能性就非常低,反之,如果当前这个状态对应的能量很低,那这个概率就会很大,就会经常发生。另外,BM 处以某一状态的概率还取决于温度 T ,(温度 T 是沿着退火算法计算的,实际上 T 是一个控制参数,即取决于控制参数,控制参数 T 越大)两种状态概率越接近,网络跳出的概率就越大。比如,计算这个状态概率的时候,它要么是0要么是1,如果这两个的概率比较接近,就说明这个时候的网络还不确定,跳出的概率就会比较大。
五.自联想与异联想
它有两种方式,自联想与异联想,所谓自联想(像左边这个图)就是我可见节点既是输入又是输出,然后隐藏进来,你看不到了,像这种我们就把它叫做自联想。异联想就是,还是有这个隐藏节点,你看不到,但是可见节点中的一部分,比如说我们从1到 K 是输入,那么,另外一部分从1到 M 就是输出,像这种称为异联想。
六.BM学习算法
通过有导师学习,波尔兹曼机可以对训练集中各模式的概率分布进行模拟,从而实现联想记忆。学习的目的就是通过调整网络权值使训练集中的模式在网络状态中相同的概率在现。
1.第一阶段:正向学习
向网络输入一对儿输入-输出的模式,即需要有输入和输出,且是成对儿出现的,这时候我输入这么一对儿输入和输出,然后将网络的输入输出节点前置到期望的状态,也就是说,先固定住输入输出的状态,然后去自由的调整隐藏层。因为要调整不可见节点,然后完成输入输出之间的映射。这个在理论上是总能完成的。
2.第二阶段:反向学习
对于异联想学习来讲,输入模式固定输入节点,而让输出和隐藏节点自由活动;对于自联想学习来讲,让可见节点和隐藏节点都自由活动,以体现输入-输出对应规律的模拟情况。当输入-输出对应的这个规律表现为网络达到热平衡的,相对节点状态同时为1的概率。期望对应规律与模拟对应规律之间的差别就表现为两个学习阶段所对应的平均概率的差值,基于这个值去调整权度重。
七.受限玻尔兹曼机 RBM
最常用的是受限波尔兹曼机,简称 RBM 。它是一种简化版的特殊的波尔兹曼机,就是阉割过的。它是由 Paul Smolensky 提出的。和波尔兹曼机相比它隐藏节点中没有相互连接,可见节点间也没有互相的连接,因此,它的网络结构更简单,算的时候也更简单。受限波尔兹曼机主要是用于降维、分类、协同过滤、特征学习、主题建模等领域,根据任务的不同,可以选择监督学习或者是非监督学习的方式进行神经网络的模型训练。
特点:
1. 它主要是两层结构,分为可见层和隐藏层。
2. 同层内无链接,不同层全链接:同层内节点激活状态是独立的
3. 节点状态也是玻尔兹曼机状态,要么是零,要么是1
4. 计算起来比波尔兹曼机简单,因为它的网络拓结构更简单了
5. 理论上,只要隐层节点足够多,它能拟合任何的离散分布
这个受限波尔兹曼机也是我们后续会深度学习的一个叫信念网络的一个基础,它就是把很多受限波尔兹曼机融合起来。