深度学习 --- 随机神经网络详解(玻尔兹曼机学习算法、运行算法)

版权声明:转载请注明出处: https://blog.csdn.net/weixin_42398658/article/details/84110991

BM网络的学习算法

(1)  学习过程

      通过有导师学习,BM网络可以对训练集中各模式的概率分布进行模拟,从而实现联想记忆.学习的目的是通过调整网络权值使训练集中的模式在网络状态中以相同的概率再现.学习过程可分为两个阶段;第一阶段称为正向学习阶段或输入期,即向网络输入一对输人输出模式,将网络输人输出节点的状态“钳制”到期望的状态,而让隐节点自由活动,以捕捉模式对之间的对应规律;第二阶段称为反向学习阶段或自由运行期,对于异联想学习,用输人模式“钳住”输人节点而让隐节点和输出节点自由活动,对于自联想学习,让可见节点和隐节点都自由活动,以体现网络对输人输出对应规律的模拟情况。输人输出的对应规律表现为网络达到热平衡时,相连节点状态同时为1的平均概率。期望对应规律与模拟对应规律之间的差别就表现为两个学习阶段所对应的平均概率的差值,此差值便作为权值调整的依据。设BM网络隐节点数为m,可见节点数为n,则可见节点可表达的状态X(对于异联想,X中部分分量代表输人模式,另一部分代表输出模式)共有2”种。设训练集提供了P对模式,一般有P<n,训练集用一组概率分布表示各模式对出现的概率:

                                                       \large P(X^1),P(X^2),...,P(X^P)

         以上也是在正向学习阶段期望的网络状态概率分布。当网络自由运行时,相应模式出现的概率为:

                                                        \large P'(X^1),P'(X^2),...,P'(X^P)

          训练的目的是使以上两组的概率分布相同。

(2)网络热平衡状态

   为了统计以上的概率,需要反复使BM网络按模拟退火算法运行并达到热平衡状态,具体如下:

           ① 在正向学习阶段,用一对训练模式\large X^p钳住网络的可见节点;在反向学习阶段,用训练模式中的输入部分钳住可见节点中的输入节点。

            ② 随机选择自由活动节点j,使其更新状态为:

                                                         \large s_j(t+1) = \left\{\begin{matrix} 1 \ ,\ s_j(t) = 0 & \\ & \\ & \\ 0\ ,\ s_j(t) = 1& \end{matrix}\right.

             ③ 计算节点j状态更新而引起的网络能量变化     \large \Delta E_j = -\Delta s_j(t)net_j(t)

             ④ 若\large \Delta E_j< 0,则接受状态更新;\large \Delta E_j> 0,\large P(s_j(t+1))> \rho时接受新状态,否则维持原状态。\large \rho \epsilon (0,1)是预先设置的数值,在模拟退火过程中,温度T随时间逐渐降低,根据(3)式的讨论情况a看 ,对于常数\large \rho,为使\large P(s_j(t+1))> \rho ,必须使\large \Delta E_j< 0,\large \Delta E_j在训练中不断减小,因此网络的爬山能力也是减小的。

              ⑤返回步骤②~④直到自由节点被全部选择一遍。

              ⑥按事先选定的降温方式降温,退火算法的降温规律没有统一的定论,一般要求初始温度\large T_0足够高,降温速度充分慢,以保证网络收敛到全局最小,我们在模拟退火算法中给出了两个,现在拿出来:

                                                         \large T(t) = \frac{T_0}{log(1+t)}

                                                         \large T(t) = \frac{T_0}{1+t}

               ⑦ 返回步骤②~⑥直到对所有自由节点均有\large \Delta E_j=0,此时认为网络已经达到热平衡状态,此状态可供学习算法中统计任意两个节点同时为1的概率使用。

从上面的学习过程我们看到了计算的复杂性,不知道大家对书面语言理解的怎么样,这里我用简单的口语在解释一下吧,这里以异步联想BM网络为例解释一下,首先呢他是那样本数据的输入特征和输出值分别赋给神经元的输入和输出,我让输入和输出固定,此时隐节点是可以自由活动的(这是第一阶段正向学习阶段),然后呢我随机从隐藏节点选择一个神经元,去尝试改变这个状态(不是真正的改变)然后计算他的能量是否下降,如果下降则本次改变是允许的此时才是真正的改变,如果能量没下降反而上升了,此时我们并不是立刻否定这个状态,而是通过计算概率比较在决定是否改变(这里就是退火原理及加能量),就按照这样把所有的隐节点都更新一遍。更新完后我们使用降火算法,在此进行循环训练,直到能量不在变化了,即能量的变化为0,此时就说明达到热平衡了。简单的就是这样,如果大家理解前面的退火和玻尔兹曼分布,这里还是不难理解了,如果还是不好理解,建议在看两遍前面的内容。从这里我们已经看到了很大的计算量了,一层跌一层,计算量相当大。下面我们看看权值调整。

(3)权值调整算法与步骤

             BM网络的学习算法步骤如下:

              ①随机设定网络的初始权值\large w_{ij}(0)

              ② 正向学习阶段按已知概率\large P(x^p)向网络输入学习模式\large x^p,p=1,2,3,...,P。在\large x^p的约束下按上述模拟退火算法运行网络到热平衡状态,统计该状态下网络中任意两个节点i与j同时为1的概率\large p_{ij}.

               ③ 反向学习阶段在无约束条件下或者在仅输入节点有约束条件下的运行网络到热平衡状态,统计该状态下网络中任意两节点i与j同时为1的概率\large P'_{ij}.

                ④权值调整算法为:

                                         \large \Delta w_{ij} = \eta (p_{ij} - p'_{ij}) ,\eta > 0

               ⑤ 重复以上的步骤直到\large p_{ij}\large P'_{ij}充分接近

这里又体现了巨大的计算量。下面看看运行的算法:

运行的算法:
运行是训练完成后,根据输入数据得到输出的过程,在运行过程中权值保持不变。Boltzmann机的运行步骤与模拟退火算法非常类似,不同之处在于模拟退火算法针对不同的问题需要定义不同的代价函数,而Boltzmann机的代价函数为能量函数,且具有一定的网络结构。
(1)初始化。Boltzmann机神经元个数为N,第i个神经元与第j个神经元的连接权值为\large w_{ij},初始温度规定为\large T_0,终止温度为\large T_{end},初始化神经元状态。
(2)在温度\large T(n)下,选取某个神经元根据下式计算其输入其中为神经元状态·如果\large x_i> 0,则能量有减小的趋势,取1为神经元i的下一状态值。如果\large x_i< 0,则进行概率操作:计算\large P = \frac{1}{1+e^{-\frac{x_i}{T(n)}}},然后在区间【0,1】随机产生一个随机数\large \varepsilon,若\large \varepsilon < p,则接受1为神经元的下一状态,否则状态保持不变。

(3〕检查小循环的终止条件。在小循环中,使用同一个温度值\large T(n),如果判断当前温度下系统已经达到热平衡,则转到第                (4)步进行降温,否则转到第〔2)步,继续随机选择一个神经元进行迭代·
(4)按指定规律降温,并检查大循环的终止条件:判断温度是否到达终止温度,若达到终止温度,则算法结束,否则转到第二步继续计算。

注:小循环与大循环的区别:在小循环中,温度保持恒定,算法选择不同的神经元进行状态调整,达到热平衡后进行降温,进入新的温度下的小循环。大循环是指整个降温、计算的过程,当大循环结束后,算法也就结束了。初始温度的选择方法与模拟退火算法类似,可以随机选择网络中的刀个神经元,取其能量的方差,或随机选择若干神经元,取其能量的最大差值\large \Delta E_{max}

通过本节大家看到了玻尔兹曼机最大的缺点就是计算量太大了,但是优点是完全解决了伪吸引子的问题,即神经网络运行到最后一定会收敛训练的一个状态,这里大家尽量理解吧,随机神经网络的设计思想就是基于能量的,只是我们前面说的玻尔兹曼分布是基于粒子的能量,这样大家把神经元看做粒子理解就可以了,尽量理解,我们知道了,玻尔兹曼机的缺点是计算量太大,那么如何解决计算量大的问题呢?下一节我们将引入受限玻尔兹曼机,只是下一节将更难理解了,需大家有很好的数学功底,我打算从基础性的知识讲起,这些知识在强化学习和自然语言处理都经常使用的,通过这次好好介绍,以后开自然语言处理或者强化学习直接引用,因此下一节会深入的讲解,本节到此结束。

猜你喜欢

转载自blog.csdn.net/weixin_42398658/article/details/84110991