受限玻尔兹曼机_随机深度网络:玻尔兹曼机与受限玻尔兹曼机 - CSDN
精华内容
参与话题
  • 深度学习 --- 受限玻尔兹曼机详解(RBM)

    万次阅读 多人点赞 2018-11-23 12:58:15
    本节终于来到了重头戏受限玻尔兹曼机,为了能深入理解本节,我们深入讲了很多基础知识,这些基础知识很重要,是理解本节的基础,同时也是你学习其他算法的基础如强化学习、自然语言处理等。本节的安排是先对比一下...

    本节终于来到了重头戏受限玻尔兹曼机,为了能深入理解本节,我们深入讲了很多基础知识,这些基础知识很重要,是理解本节的基础,同时也是你学习其他算法的基础如强化学习、自然语言处理等。本节的安排是先对比一下受限玻尔兹曼机和玻尔兹曼机的区别,然后使用形式化语言讲一下学习过程和使用过程,最后 我们在逐一展开详细讲解,本节需要大家有点数学和概率论的基础当然矩阵知识也是需要一点的,这里的快速学习算法是CD(对比散度)算法,我们下面都会讲解到,废话不多说,下面开始:

    受限玻尔兹曼机的结构特点

    受限波尔兹曼机(Restricted Boltzmann Machines,RBM)是一类具有两层结构、对称连接且无自反馈的随机神经网络模型,层间全连接,层内无连接。我们知道玻尔兹曼机的是全连接的,这里我们对比一下看看:

    这里先简单的说一下区别,然后再次介绍一下二者的工作原理,然后详细深入介绍背景,二者最大的区别在输入层和隐层的连接方式上,BM模型是全连接的而RBM是相互独立的,他们的区别就在这里,那么为什么计算量会差别那么大呢?在概率中我们知道BM模型的输入和隐层的概率计算肯定是联合概率,因为他们各自有联系而RBM的概率虽然函数联合概率,但是因为独立,可以单独计算每个神经元的概率,然后相乘,进而达到计算量小的目的,另外就是RBM的学习算法是对比散度即CDCD算法,学习速度很快,我们后面讲,那么二者的深入异同点是什么呢?这里还是先了解他们的学习机制在谈会更好,这里引用hinton论文里的文章的图进行讲解《Training Products of Experts by MinimizingContrastive Divergence》:                         

    上图需要说明的是,上面的网络其实就是RBM的模型结构,只是说他这个训练过程为了让大家更清晰,所有展开了,那么我们来看看,他这里到底是怎么训练的,这里以手写体数字1和2来说明,首先我希望RBM能够记住我这个手写体的数字1和2,那么当我拿个新的1和2时,他可以准确的识别出来,因此这里在可见层输入数据data(例如手写体数字1和2)如上图的\large v_{1},刚开始网络的权值和偏置值会初始化一个值,快速学习算法就会根据这些权值计算在可见层已知的情况下(可见层此时的神经元要么为0要么为1,由手写体1或者2决定)每个隐层的神经元为1或者为0 的概率,此时我就得到了所有隐层神经元的值\large h_{1}(要么为0要么为1,这是通过计算的),此时我们就知道了隐层的神经元的每个值,我们这时候把可见层当做是未知的,根据类似的求概率的方法求出可见层神经元的值\large v_{2}或者说是重构出\large v_{2},此时我们的学习算法根据\large v_{1}-v_{2}(暂且这样理解吧,大家到后面就知道了),得到了他们的差值,然后根据这个差值进行调整权值和偏置值(这个权值和偏置值调整不简单我们稍后讲),这就是一次权值调整了,然后我们把\large v_{2}看做已知的,按照上面类似的求法继续求出\large h_{2},然后再次求出\large v_{3},,此时在和\large v_{1}相减,得到误差信号,重新调整权值,然后不断的这样迭代,随着迭代的次数增加,整个系统就会达到热平衡状态,此时系统就收敛了,或者说就训练好了,我们拿一个新的手写图片1或者2从输入层输入进去就可以识别出这图片的数字了。整个学习过程就是这样,好,到这里大家一定要有这个清晰的认识,否则后面会晕的,切记,我们下面就开始正式从背景说起了:

            在诸多人工神经网络模型中,波尔兹曼机(Boltzmann Machine是Hinton和Sejnowski于1986年提出的一种根植于统计力学的随机神经网络。这种网络中的神经元是随机神经元,神经元的输出只有两种状态(未激活、激活):一般用二进制的0和1表示,状态的取值根据概率统计法则决定。从功能上讲,BM是由随机神经元全连接组成的反馈神经网络,且对称连接,无自反馈:包含一个可见层和一个隐层的BM模型如图(a)所示。

    BM具有强大的无监督学习能力,能够学习数据中复杂的规则。但是,拥有这种学习能力的代价是其训练(学习)时间非常长。此外,不仅无法确切地计算BM所表示的分布:甚至得到服从BM所表示分布的随机样本也很困难。为克服这一问题Smolensky[引入了一种限制的波尔兹曼机(Restricted Boltzman Machine , RBM),RBM具有一个可见层,一个隐层,层内无连接,其结构如图1(b)所示。RBM具有很好的性质:在给定可见层单元状态〔输入数据)时,各隐单元的激活条件独立,反之,在给定隐单元状态时,可见层单元的激活亦条件独立。这样一来,尽管RBM所表示的分布仍无法有效计算,但通过Gibbs采样(Gibbssampling)可以得到服从RBM所表示分布的随机样本。此外:Roux和Bengio同从理论上证明,只要隐单元的数目足
    够多,RBM能够拟合任意离散分布。

    2006年,Hinton等人提出了一种深度信念网络(Deep BeliefNets,DBN),并给出了该模型的一个高效学习算法。这个算法成为了其后至今深度学习算法的主要框架。在该算法中,一个DBN模型被视为由若干个RBM堆叠在一起:训练时可通过从低到高逐层训练这些RBM来实现:

           (1)   底部RBM以原始输入数据训练;

         (2)将底部RBM抽取的特征作为顶部RBM的输入训练;

         (3)过程(1)、(2)可以重复来训练所需要的尽可能多的层数。

    由于RBM可以通过CD快速训练,这一框架绕过了直接从整体上训练DBN的高复杂度,从而将其化简为对多个RBM的
    训练问题题。Hinton建议,经过这种方式训练后,可以再通过传统的学习算法〔如反向传播算法)对网络进行微调,从而使模型收敛到全局最优解。这种学习算法,本质上等同于先通过逐层RBM训练将模型的参数初始化为全局最优解范围附近,再通过传统学习算法进一步训练。这样一来,不仅解决了模型训练速度慢的问题,而且计算量也降低了。大量试验结果也表明,这种方式能够产生非常好的参数初始值,从而大大提升了模型的建模能力。自此,机器学习领域又产生了一个新的研究方向-----深度学习(Deep learning),明确提出了面向人工智能的机器学习算法的设计目标。因此本节过后我们将正式进入深度学习。下面就开始深入讲解受限玻尔兹曼机,会使用大量的公式,大家做好心理准备。

    受限玻尔兹曼机的基本模型

          RBM也可以被视为一个无向图(undirected graph)模型,如下图所示。\large v为可见层,用于表示观测数据,\large h为隐层,可视为一些特征提取器(feature detectors),\large W为两层之间的连接权重。Welling指出,RBM中的隐单元和可见单元可以为任意的指数族单元〔即给定隐单元(可见单元),可见单元(隐单元)的分布可以为任意的指数族分布),如softmax单元、高斯单元、泊松单元等等。这里,为了讨论方便起见,我们假设所有的可见单元和隐单元均为二值变量,即\large \forall i,j,v_i\in \left \{ 0,1 \right \},h_j\in \left \{ 0,1 \right \}

           如果一个RBM有n个可见单元和m个隐单元,用向量\large v\large h分别表示可见单元和隐单元的状态,如上图所示,其中,\large v_i表示第\large i个可见单元的状态,\large h_j与表示第\large j个隐单元的状态。那么,对于一组给定的状态\large (v,h),RBM作为一个系统所具备的能量定义为:                       

    上式中,\large \theta = \left \{ W_{ij},a_i,b_j \right \}是RBM的参数,他们均为实数,其中\large W_{ij}表示可见层单元 \large i与隐单元\large j的神经元连接权重,\large a_{i}表示可见单元神经元\large i的偏置(bias),\large b_j表示隐层单元\large j的偏置。当参数确定时,基于该能量函数,我们可以得到\large (v,h)的联合概率密度分布:                      

    其中\large Z(\theta )为归一化因子即所有可能情况下的能量和,概率的形成就是某一个状态的能量除以总的可能状态能量和。需要解释一下的是,为什么根据能量函数就可以得到上面的式子 ,因为能量函数是符合玻尔兹曼分布的,不懂的建议查看我前面几节的基础知识,因此可以写成玻尔兹曼分布的形式,又因为是两层即可见层(输入层)和隐层,按照我们上面的学习过程,可知我们需要不断的计算这里两层的概率,又因为两层是有联系的因此需要写成联合概率密度,这个概率密度可以解释为在\large \theta(其中\large \theta就是待调整的权值和偏置值w,a,b)的条件下\large v\large h的联合概率密度。这点需要大家理解。

               对于一个实际问题,我们关心的是由RBM所定义的关于观测数据\large v的分布\large P(v|\Theta ),即在训练好的权值的情况下能正确在可见层识别出内容概率的分布,如何求这个概率分布呢?很简单,对(2)式求边缘分布即可,如下:

                                          

       为了确定该分布,需要计算归一化因子 \large Z(\theta ),这需要计算\large 2^{m+n}次计算(因为可见单元和隐层单元他们是全连接的,又因为可见单元为n个,隐单元为m个),计算量很大,因此,即使通过训练可以得到模型的参数  \large W_{ij},a_i,b_j,我们任然无法计算出这些参数所确定的分布。

           但是,由于RBM的特殊结构(即层间连接,层内连接)可知:当给定可见单元的状态时,各隐单元的激活状态之间是条件独立的。此时,第j个隐单元的激活概率为:

     其中 为sigmod激活函数。

             由于RBM的结构是对称的,当给定隐单元的状态时,各可见单元的激活状态之间也是条件独立的,即第\large i个可见单元的激活概率为:

                                                             

    这里大家需对(4)、(5)两式有清晰的认识其中 \large b_j\large a_{i}为对应的偏置值,如(4)式对隐层的某个神经元j的状态等于1的概率大小就等于把所有可见层的单元和权值相乘在相加然后加上偏置值取sigmod函数就是概率了,(5)式类似。

    RBM学习算法

                学习RBM的任务是求出参数\large \theta的值,大家要时刻记住\large \theta = \left \{ W_{ij},a_i,b_j \right \},使用训练数据去训练\large \theta,然后参数\large \theta可以通过最大化RBM在训练集(假设包含T个样本)上的对数释然函数学习得到,即:

    这里大家需要明确的是最大释然函数是做什么的,有什么样意义?这里我简单的提一下不懂的建议停下来研究一下释然函数的意义,所谓释然函数就在某些参数的情况下使其对应的概率达到最大,如上式(6)就是在参数\large \theta 的情况下,使其概率概率达到最大,那么(6)式代表什么意思呢?在训练样本的情况下,我们调整参数使其最大概率的复现这个训练数据,根据我们上面的模型图我们可以知道从输入数据层(可见层)到隐层,在从隐层到可见层这是一次训练,此时的可见层的概率尽肯能的和输入时相同,就是这个目的,无线逼近样本的概率,这就是学习原则了,当有新的数据时就可以识别了。那么我们解一下释然函数为什么是这样的,这里以手写体为例,有十种手写体,我们有T个样本,我们都进可能的去复现每个样本,即每个样本是概率尽量都是最大化,因此所以的概率相乘就好了,但是乘积不容易后面的计算,又因为我们最概率的最大值这个数不感兴趣,我们只对使概率最大化的参数\large \theta感兴趣,因此取对数就容易求导了,同时乘积就是求和了,最后就和(6)式一样了,上面只是简单的代表,我把上式具体化:

     其实就是把(6)式展开了,把(3)式带进去即可得到上式,我们知道\large p(v,h|\theta )是联合概率密度,而\large p(v|\theta )是联合概率密度的边缘密度,通过概率论我们知道,求联合概率密度的边缘密度,就是把另一个求和即可,因此上式对\large h求和就得到\large p(v|\theta )了,这里大家需要理解,不理解的去查概率书籍,后面很多都是这样使用的,然后(2)(3)带进去就可以得到了,上式的最后一行是利用log的性质,即相除可以写成相减。

     为了获得最优的\large \theta ^*参数,我们使用梯度上升进行求\small L(\theta ) = \sum_{t=1}^{T}logP(v^{(t)},h|\theta )的最大值,其中关键步骤是计算\small logP(v^{(t)},h|\theta )关于各个模型参数的偏导数,下面的求导中的\large \theta是代表w、a、b,因为他们的求导形式一样的,因次我们使用\large \theta代替进行求导,求出后使用对于的w、a、b替换\large \theta就好了,下面开始求偏导:

    求偏导以前先给大家介绍一下期望的求法,如下期望的定义:

                定义  设离散型随机变量\large X的分布律为:

                                       \large P(X=x_k) = p_k,k=1,2,3,4,...

                 则随机变量的数学期望为记为E(X).即:

                                       \large E(X) = \sum_{k=1}^{\infty }x_kp_k

    下面对对数释然函数关于\large \theta求偏导可得:

                                        

    上面的式子是考验大家的数学和概率基础的时候了,别害怕他,看起来很长很麻烦,其实理清思路还是很简单的,大家需要克服对数学的恐惧,拿下他你会很有成就感的,好,下面我们开始分析,首先这是对数求偏导 ,且还是对复合函数的求导,因此基本的求导大家还是懂的这些就是①式和②式他们连为一起,他们求导原理是一样的,现在我们来看看①式,大家要搞明白求和是对谁的,最外面的那个求和t=1到T的大家应该都懂,那么\tiny \sum_{h}^{}是求导出来相当于求期望的求和公式,那么红色中括号的乘号左边的是概率的表达式(因为分母是对所有h的能量求和而分子是其中某一个h的能量,他们相比就是概率),乘号右边的就是对应的随机变量h的能量值(这里大家需要好好理解为什么是期望,对比定义式深入理解,以后类似的就都懂了),我们知道此时①式的v是已知的情况下对h求和,因此正好符合期望公式,同时对应的分布概率为P(h|v^{t},\theta ),即他求的是边缘的期望。②式求的是联合的期望,因此需要全部求和,且分布概率为P(v,h|\theta ),难理解的就是如何转换为求期望的,主要原因是和求期望的形式是一样的,大家好好理解①式,那个概率,是对某个隐层除上所有的隐层和不就是概率吗?而乘号后面对应的就是隐层对应的能量值,大家好好理解一下,为什么这样,自己动手推一边就出来了,好,最后我们得到③式,代表的就是均值且分别符合各自分布的均值,下面从整体介绍一下(8)式:

     其中:\left \langle \bullet \right \rangle序表示求关于分布P的数学期望。P(h|v^{(t)},\theta )表示在可见单元限定为己知的训练样本v^{(t)}时:隐层的概率分布,故式〔8)中的前一项比较容易计算。P(v,h|\theta )表示可见单元与隐单元的联合分布,由于归一化因子\large Z(\theta )的存在,该分布很难取,导致我们无法直接计算式〔8)中的第二项,只能通过一些采样方法(如Gibbs采样)获取其近似值。值得指出的是,在最大化似然函数的过程中:为了加快计算速度,上述偏导数在每一迭代步中的计算一般只基于部分而非所有的训练样本进行,关于这部分内容我们将在后面讨论RBM的参数设置时详细阐述。

    我们根据(1)式,以w_{ij}为具体参数,带进去(8)式,把(1)式拿到这里:

    如果能量对 w_{ij}求偏导,(8)式第一项我们发现前两项为0,后面只剩下关于v_i,h_j的参数,这时是针对P(h|v^{(t)},\theta )概率分布来求的期望,同样第二项的结果也是只剩下关于v_i,h_j的参数,此时是针对P(v,h|\theta )概率分布来的。能量函数对另外两个求偏导,可分别求得对对应的偏导,如下:

         下面,假设只有一个训练样本,我们分别用“data”和“model”来简记P(h|v^{(t)},\theta )P(v,h|\theta )这两个概率分布,则对数释然函数关于连接权重W_{ij}、可见层单元的偏置a_i和隐层单元的偏置b_j的偏导数分别为:

    通过上面我们知道了学习函数,以及学习函数的难点在哪里,我们知道学习函数的难点在求均值时归一化因子 \large Z(\theta )的计算量很大即整个模型的期望,计算量是2^{m+n},无法求解,但是我们引入了Gibbs采样解决这个问题,即我通过采样去逼近这个均值,因为分布函数我们知道。只是计算量很大,因此使用统计的方法进行处理可以很好的解决问题,这就是我们前面几节的内容就在这里用上了,但是问题是计算Gibbs采样的计算量还是很大,如下图,他需要迭代很多次才能达到热平衡状态,效率还是很低,这时候的问题是 \left \langle \cdot \right \rangle_{model}通过Gibbs采样还是很大  怎么办呢?所以引入快速学习算法。

    基于对比散度的快速学习算法

    2002年,Hinton[7]提出了RBM的一个快速学习算法,即对比散度(Contrastive Divergence,CD),与Gibbs采样不同,Hinton指出当使用训练数据初始化v_0时,我们仅需要使用k(通常k=1)步吉布斯采样便可以得到足够好的近似。也就是本来Gibbs采样按照上面的方法需要n步迭代才能收敛,但是我现在就迭代一次,即在可见层v_1输入数据后,计算h_1的激活概率,然后通过h_1在反计算可见层,此时为v_2,然后调整权值,这就是一次迭代,做到这里以后再计算一下h_2,这样就可以得到均值了,这就是牛逼之处了,本来需要n步迭代才能收敛,现在只需要一步迭代就可以收敛,你说牛叉不,计算量当然降低了,什么原因呢?稍后讲解。(这里需要强调的 是上图是为了大家看权值更新的过程才这样画的,但是真实的其实就两层,就是上面受限玻尔兹曼机的基本模型,只是先通过输入层(可见层)数据计算隐层值,然后把可见层看做未知的,通过隐层计算可见层,就这样不停的迭代达到热平衡状态,就可以采样了)

    在CD算法一开始,可见单元的状态被设置成一个训练样本,并利用式(4)计算所有隐层单元的二值状态。在所有隐层单元的状态确定之后,根据式(5)来确定第i个可见单元取值为1的概率,进而产生可见层的一个重构(reconstruction),这样在使用随机梯度上升法最大化对数释然函数在训练数据上的值时,各参数的更新准则为:   

    其中\epsilon是学习率,\left \langle \cdot \right \rangle_{recon}表示一步重构后模型定义的分布。 我们先介绍一下权值更新的伪代码,最后在介绍一步迭代的合理性。

    在RBM中,可见单元数一般等于训练数据的特征维数,而隐单元数需要事先给定。为了与前文记号一致,假设可见单元数和隐单元数分别为n和m。令W表示可见层与隐层间的连接权重矩阵(m×n阶),a(n维列向量)和b〔m维列向量)分别表示可见层与隐层的偏置向量。RBM的基于CD的快速学习算法主要步骤可描述如下:

    • 输入:一个训练样本x_0;隐层神经元个数m;学习率\epsilon;最大训练周期T
    • 输出:连接权重矩阵W、可见层的偏置向量a、隐层的偏置向量b
    • 训练阶段

            初始化:令可见层单元的初始状态v_1= x_0;W,a,b为随机较小的值。

            For   t=1,2,3,...T

                     For   j=1,2,3,...m(对所有隐神经元)

                               计算P(h_{1j}=1|v_1),即P(h_{1j}=1|v_1) = \sigma (b_j + \sum_{i}v_{1i}w_{ij})

                                从条件分布P(h_{1j}|v_1)中抽取h_{1j}\in \left \{ 0,1 \right \}

                       EndFor

                       For i = 1,2,3,....,n(对所有可见单元)

                                 计算P(v_{2j}=1|h_1),即P(v_{2i}=1|h_1) = \sigma (a_i + \sum_jW_{ij}h_1j)

                                 从条件分布P(v_{2i}|h_1)中抽取v_{2i}\in \left \{ 0,1 \right \}

                        EndFor

                     

                        For   j=1,2,3,...m(对所有隐神经元)

                                 计算P(h_{2j}=1|v_2),即P(h_{2j}=1|v_2) = \sigma (b_j + \sum_{i}v_{2i}w_{ij})

                        EndFor

                      按下式更新各个参数:

                       W \leftarrow W+\epsilon \left [ P(h_1=1|v_1)v_1^T -P(h_2=1|v_2)v_2^T)]

                        a \leftarrow a+\epsilon (v_1-v_2)

                         b \leftarrow b+\epsilon [P(h_1=1|v_1)-P(h_2=1|v_2)]

                         EndFor

    这里需要和大家明确的是参数更新是按照下面的式子来的,同时简单的解释一下:

    a向量的更新,输入的期望其实就是他本身数据的期望,而根据(8)式我们知道,需要在P(h|v^{(t)},\theta )这个分布下求均值,但是这是个隐层的的分布,基本上和输入没什么关系,隐层可以单独计算输入的均值,而重构出来的就是v_2,隐层计算矩阵即可。

    b向量的更新,我们从下面的公式可以看到是求h_j的期望,而h_j的期望就等于h_j=1的概率,为什么,因为h_j要么取0,要么取1,因此1的概率和期望是相等的。

    W的更新就是按照下面更新的。

     上面大家应该可以看懂的,看伪代码会发现我刚开始就是按照这个伪代码思路来讲,目的就是希望大家从整体把握他,然后在细节深入,不要思路乱了,只有你的思路很清晰的情况下,才能说深入理解,我们下面说说为什么Hinton认为一步就可以迭代成功。 

    对比散度(cd)算法(Contrastive Divergence)

         什么是对比散度,大家可以自己研究一下,这里就不展开说了,我简单的说一下它有什么用,对比散度是衡量两个统计分布的相似度,和我们的相关性系数差不多,只是相关性衡量的是两个数据的相似度,而对比散度是衡量两个统计分布的相似性,有兴趣的可以自行了解一下。如果两个分布很相近,那么KL距离接近0,如果相差很远的话,KL距离很大,例如两个分布P(X),Q(X),那么二者的对比散度使用D(P||Q)表示,下面:我根据hinton的论文解释一下为什么一步迭代就合理了:

    假设,吉布斯采样的开始的概率分布为P^0,迭代一次后分布为P^1,不停的迭代后直到收敛我们称为:P_\theta ^\infty\theta表示和参数取值的关系),我们把P^0P_\theta ^\infty做对比散度为P^0||P_\theta ^\infty如下:

       同理 P^1P_\theta ^\infty也做对比散度P^1||P_\theta ^\infty,当然他们肯定不会为0,其中 P^0||P_\theta ^\infty应该是一个大点的数,而P^1||P_\theta ^\infty应该也是大一点的数,但是   P^1||P_\theta ^\infty应该比P^0||P_\theta ^\infty要小,因为迭代一次后接近了一点,这些还是可以接受的,现在有一个情况就是,如果我们选择了一些参数\theta,使的 P^0||P_\theta ^1很小,可以近似为0了,说明了什么呢?说明了  P^0=P^1,同时也说明了此时 P^0=P^\infty_\theta,因为一旦  P^0=P^1说明已经达到稳定了,因此会有P^0=P^\infty_\theta。此时就有一个优化目标:

           就是说此时我使用对比散度的差值作为优化目标,找到适合的参数\theta使的对比散度最小,因此求梯度就可以了。hinton论文里说上式的第三项可以忽略,因为值很小,给的理由有点牵强,说是根据大量数据的统计得到,可以省略,给了两图:

    这里没有给出严格的数学证明,但是大家都默认可行,那就可行吧?.?

    省略之后就得到了下面的式子:

    上面的式子就是我们的下面的了,牛叉吧。

     目前大家都还使用这个思想。对比散度呢就是来源上面的两个散度的差,相对比。这个算法很好的解决计算量大的问题。也因此得到了广泛的应用,下一节就讲一下hinton的另一篇大作: 《Reducing the Dimensionality of Data with Neural Networks》

    展开全文
  • 受限玻尔兹曼机(RBM)原理总结

    万次阅读 多人点赞 2018-08-12 20:28:00
    授权转发自:刘建平《受限玻尔兹曼机(RBM)原理总结》 地址:http://www.cnblogs.com/pinard/p/6530523.html   前 言 本文主要关注于这类模型中的受限玻尔兹曼机(Restricted Boltzmann Machine,以下简...

    https://blog.csdn.net/l7H9JA4/article/details/81463954

     

    授权转发自:刘建平《受限玻尔兹曼机(RBM)原理总结》

    地址:http://www.cnblogs.com/pinard/p/6530523.html


     

    前  言

    本文主要关注于这类模型中的受限玻尔兹曼机(Restricted Boltzmann Machine,以下简称RBM),RBM模型及其推广在工业界比如推荐系统中得到了广泛的应用。

    章节目录
     

    • RBM模型结构

    • RBM概率分布

    • RBM模型的损失函数与优化

    • RBM在实际中应用方法

    • RBM推广到DBM

    • RBM小结

     

     

    01

    RBM模型结构

    玻尔兹曼机是一大类的神经网络模型,但是在实际应用中使用最多的则是RBM。RBM本身模型很简单,只是一个两层的神经网络,因此严格意义上不能算深度学习的范畴。不过深度玻尔兹曼机(Deep Boltzmann Machine,以下简称DBM)可以看做是RBM的推广。理解了RBM再去研究DBM就不难了,因此本文主要关注于RBM。

    回到RBM的结构,它是一个个两层的神经网络,如下图所示:

    640?wx_fmt=jpeg

    上面一层神经元组成隐藏层(hidden layer), 用h向量隐藏层神经元的值。下面一层的神经元组成可见层(visible layer),用v向量表示可见层神经元的值。隐藏层和可见层之间是全连接的,这点和DNN类似, 隐藏层神经元之间是独立的,可见层神经元之间也是独立的。连接权重可以用矩阵W表示。和DNN的区别是,RBM不区分前向和反向,可见层的状态可以作用于隐藏层,而隐藏层的状态也可以作用于可见层。隐藏层的偏倚系数是向量b,而可见层的偏倚系数是向量a。

    常用的RBM一般是二值的,即不管是隐藏层还是可见层,它们的神经元的取值只为0或者1。本文只讨论二值RBM。

    总结下RBM模型结构的结构:主要是权重矩阵W, 偏倚系数向量a和b,隐藏层神经元状态向量h和可见层神经元状态向量v。

     

    02

    RBM概率分布

    RBM是基于基于能量的概率分布模型。怎么理解呢?分两部分理解,第一部分是能量函数,第二部分是基于能量函数的概率分布函数。

    对于给定的状态向量h和v,则RBM当前的能量函数可以表示为:

    640?wx_fmt=png

    有了能量函数,则我们可以定义RBM的状态为给定v,h的概率分布为:

    640?wx_fmt=png

    其中Z为归一化因子,类似于softmax中的归一化因子,表达式为:

    640?wx_fmt=png

    有了概率分布,我们现在来看条件分布P(h|v):

    640?wx_fmt=png

    其中Z′为新的归一化系数,表达式为:

    640?wx_fmt=png

      同样的方式,我们也可以求出P(v|h),这里就不再列出了。

    有了条件概率分布,现在我们来看看RBM的激活函数,提到神经网络,我们都绕不开激活函数,但是上面我们并没有提到。由于使用的是能量概率模型,RBM的基于条件分布的激活函数是很容易推导出来的。我们以P(hj=1|v)为例推导如下。

    640?wx_fmt=png

    从上面可以看出, RBM里从可见层到隐藏层用的其实就是sigmoid激活函数。同样的方法,我们也可以得到隐藏层到可见层用的也是sigmoid激活函数。即:

    640?wx_fmt=jpeg

    有了激活函数,我们就可以从可见层和参数推导出隐藏层的神经元的取值概率了。对于0,1取值的情况,则大于0.5即取值为1。从隐藏层和参数推导出可见的神经元的取值方法也是一样的。

     

     

    03

    RBM模型的损失函数与优化

     

    RBM模型的关键就是求出我们模型中的参数W,a,b。如果求出呢?对于训练集的m个样本,RBM一般采用对数损失函数,即期望最小化下式:

    640?wx_fmt=png

    对于优化过程,我们是首先想到的当然是梯度下降法来迭代求出W,a,b。我们首先来看单个样本的梯度计算, 单个样本的损失函数为:−ln(P(V)), 我们先看看−ln(P(V))具体的内容:

    640?wx_fmt=png

    注意,这里面V表示的是某个特定训练样本,而v指的是任意一个样本。

    我们以ai的梯度计算为例:

    640?wx_fmt=png

     其中用到了:

    640?wx_fmt=png

    同样的方法,可以得到W,b的梯度。这里就不推导了,直接给出结果:

    640?wx_fmt=png

    虽然梯度下降法可以从理论上解决RBM的优化,但是在实际应用中,由于概率分布的计算量大,因为概率分布有2^nv+nh种情况, 所以往往不直接按上面的梯度公式去求所有样本的梯度和,而是用基于MCMC的方法来模拟计算求解每个样本的梯度损失再求梯度和,常用的方法是基于Gibbs采样的对比散度方法来求解,对于对比散度方法,由于需要MCMC的知识,这里就不展开了。对对比散度方法感兴趣的可以看参考文献中2的《A Practical Guide to Training Restricted Boltzmann Machines》,对于MCMC,后面我专门开篇来讲。

     

    04

    RBM在实际中应用方法

    大家也许会疑惑,这么一个模型在实际中如何能够应用呢?比如在推荐系统中是如何应用的呢?这里概述下推荐系统中使用的常用思路。

    RBM可以看做是一个编码解码的过程,从可见层到隐藏层就是编码,而反过来从隐藏层到可见层就是解码。在推荐系统中,我们可以把每个用户对各个物品的评分做为可见层神经元的输入,然后有多少个用户就有了多少个训练样本。由于用户不是对所有的物品都有评分,所以任意样本有些可见层神经元没有值。但是这不影响我们的模型训练。在训练模型时,对于每个样本,我们仅仅用有用户数值的可见层神经元来训练模型。

    对于可见层输入的训练样本和随机初始化的W,a,我们可以用上面的sigmoid激活函数得到隐藏层的神经元的0,1值,这就是编码。然后反过来从隐藏层的神经元值和W,b可以得到可见层输出,这就是解码。对于每个训练样本, 我们期望编码解码后的可见层输出和我们的之前可见层输入的差距尽量的小,即上面的对数似然损失函数尽可能小。按照这个损失函数,我们通过迭代优化得到W,a,b,然后对于某个用于那些没有评分的物品,我们用解码的过程可以得到一个预测评分,取最高的若干评分对应物品即可做用户物品推荐了。

    如果大家对RBM在推荐系统的应用具体内容感兴趣,可以阅读参考文献3中的《Restricted Boltzmann Machines for Collaborative Filtering》

     

    05

    RBM推广到DBM

    RBM很容易推广到深层的RBM,即我们的DBM。推广的方法就是加入更多的隐藏层,比如一个三层的DBM如下:

    640?wx_fmt=png

    当然隐藏层的层数可以是任意的,随着层数越来越复杂,那模型怎么表示呢?其实DBM也可以看做是一个RBM,比如下图的一个4层DBM,稍微加以变换就可以看做是一个DBM。

    640?wx_fmt=png

    将可见层和偶数隐藏层放在一边,将奇数隐藏层放在另一边,我们就得到了RBM,和RBM的细微区别只是现在的RBM并不是全连接的,其实也可以看做部分权重为0的全连接RBM。RBM的算法思想可以在DBM上使用。只是此时我们的模型参数更加的多,而且迭代求解参数也更加复杂了。

     

    06

    RBM小结

     

    RBM所在的玻尔兹曼机流派是深度学习中三大流派之一,也是目前比较热门的创新区域之一,目前在实际应用中的比较成功的是推荐系统。以后应该会有更多类型的玻尔兹曼机及应用开发出来,让我们拭目以待吧!

     

     

     

     

     640?wx_fmt=gif

    END

     

     

     

     

     

    展开全文
  • 受限玻尔兹曼机(RBM)理解

    万次阅读 2018-02-23 11:31:59
    受限玻尔兹曼机(RBM)多见深度学习,不过笔者发现推荐系统也有相关专家开始应用RBM。实际上,作为一种概率图模型,用在那,只要场景和数据合适都可以。有必要就RBM做一个初步了解。1、 RBM定义RBM记住三个要诀:1)...

    受限玻尔兹曼机(RBM)多见深度学习,不过笔者发现推荐系统也有相关专家开始应用RBM。实际上,作为一种概率图模型,用在那,只要场景和数据合适都可以。有必要就RBM做一个初步了解。

    1、 RBM定义

    RBM记住三个要诀:1)两层结构图,可视层和隐藏层;2)同层无边,上下层全连接;3)二值状态值,前向反馈和逆向传播求权参。定义如下:

    RBM包含两个层,可见层(visible layer)和隐藏层(hidden layer)。神经元之间的连接具有如下特点:层内无连接,层间全连接,显然RBM对应的图是一个二分图。一般来说,可见层单元用来描述观察数据的一个方面或一个特征,而隐藏层单元的意义一般来说并不明确,可以看作特征提取层。RBM和BM的不同之处在于,BM允许层内神经元之间有连接,而RBM则要求层内神经元之间没有连接,因此RBM的性质:当给定可见层神经元的状态时,各隐藏层神经元的激活条件独立;反之当给定隐藏层神经元的状态是,可见层神经元的激活也条件独立


    如图给出了一个RBM网络结构示意图。其中:n_{v},n_{h}分别表示可见层和隐藏层中包含神经元的数目,下标v,h代表visible和hidden;v=(v_{1},v_{2},...,v_{n_{v}},)^{T}表示可见层的状态向量;h=(h_{1},h_{2},...,h_{n_{h}},)^{T}表示隐藏层的状态向量;a=(a_{1},a_{2},...,a_{n_{v}},)^{T}表示可见层的偏置向量;b=(b_{1},b_{2},...,b_{n_{h}},)^{T}表示隐藏层的偏置向量;W=(w_{i,j})\in \Re ^{n_{h}\times n_{v}}表示隐藏层和可见层之间的权值矩阵,w_{i,j}表示隐藏层中第i个神经元与可见层中第j个神经元之间的连接权重。记\theta =(W,a,b)表示RBM中的参数,可将其视为把W,a,b中的所有分量拼接起来得到的长向量。

    RBM的求解也是基于梯度求对数自然函数。

    给定训练样本,RBM的训练意味着调整参数\theta,从而拟合给定的训练样本,使得参数条件下对应RBM表示的概率分布尽可能符合训练数据。

    假定训练样本集合为S=\{v_1,v_2,...,v^{n_s}\},其中n_s为训练样本的数目,v^i=(v_1^i,v_2^i,...,v_{n_v}^i)^T,i=1,2,...,n_s,它们是独立同分布的,则训练RBM的目标就是最大化如下似然L_{\theta,S}=\prod_{i=1}^{n_s}P(v^i),一般通过对数转化为连加的形式,其等价形式:lnL_{\theta,S}=ln\prod_{i=1}^{n_s}P(v^i) =\sum_{i=1}^{n_s}lnP(v^i)。简洁起见,将L_{\theta,S}简记为L_S

    最大化L_S常用的数值方法是梯度上升法(Gradient Ascent),通过迭代的方法进行逼近,迭代形式:\theta:=\theta+\eta\frac{\partial lnL_S}{\partial\theta},其中\eta>0表示学习速率。其关键就是计算梯度\frac{\partial lnL_S}{\partial\theta}lnL_S关于各个参数的偏导数\frac{\partial lnL_S}{\partial w_{i,j}}\frac{\partial lnL_S}{\partial a_i},\frac{\partial lnL_S}{\partial b_i})。一般采用MCMC采样来估计,但由于常规的MCMC需要经过许多步的状态转移才能保证采集到的样本符合目标分布。若我们以训练样本作为起点,就可以仅需要很少次的状态转移抵达RBM的分布。Hinton教授2002年基于这个上想法发明了对比散度(Contrastive Divergence,CD)算法,目前已经成为训练RBM的标准算法。
    2、RBM DEMO

    引自很好的一个介绍RBM文章,还有python demo,参考:

    http://blog.echen.me/2011/07/18/introduction-to-restricted-boltzmann-machines/

    为怕链接失效,还是复制过来比较靠谱。

    Introduction to Restricted Boltzmann Machines

    Suppose you ask a bunch of users to rate a set of movies on a 0-100 scale. In classical factor analysis, you could then try to explain each movie and user in terms of a set of latent factors. For example, movies like Star Wars and Lord of the Rings might have strong associations with a latent science fiction and fantasy factor, and users who like Wall-E and Toy Story might have strong associations with a latent Pixar factor.

    Restricted Boltzmann Machines essentially perform a binary version of factor analysis. (This is one way of thinking about RBMs; there are, of course, others, and lots of different ways to use RBMs, but I’ll adopt this approach for this post.) Instead of users rating a set of movies on a continuous scale, they simply tell you whether they like a movie or not, and the RBM will try to discover latent factors that can explain the activation of these movie choices.

    More technically, a Restricted Boltzmann Machine is a stochastic neural network (neural network meaning we have neuron-like units whose binary activations depend on the neighbors they’re connected to; stochastic meaning these activations have a probabilistic element) consisting of:

    • One layer of visible units (users’ movie preferences whose states we know and set);
    • One layer of hidden units (the latent factors we try to learn); and
    • A bias unit (whose state is always on, and is a way of adjusting for the different inherent popularities of each movie).

    Furthermore, each visible unit is connected to all the hidden units (this connection is undirected, so each hidden unit is also connected to all the visible units), and the bias unit is connected to all the visible units and all the hidden units. To make learning easier, we restrict the network so that no visible unit is connected to any other visible unit and no hidden unit is connected to any other hidden unit.

    For example, suppose we have a set of six movies (Harry Potter, Avatar, LOTR 3, Gladiator, Titanic, and Glitter) and we ask users to tell us which ones they want to watch. If we want to learn two latent units underlying movie preferences – for example, two natural groups in our set of six movies appear to be SF/fantasy (containing Harry Potter, Avatar, and LOTR 3) and Oscar winners (containing LOTR 3, Gladiator, and Titanic), so we might hope that our latent units will correspond to these categories – then our RBM would look like the following:

    RBM Example

    (Note the resemblance to a factor analysis graphical model.)

    State Activation

    Restricted Boltzmann Machines, and neural networks in general, work by updating the states of some neurons given the states of others, so let’s talk about how the states of individual units change. Assuming we know the connection weights in our RBM (we’ll explain how to learn these below), to update the state of unit i

    :

    • Compute the activation energy ai=jwijxj
    of unit i, where the sum runs over all units j that unit i is connected to, wij is the weight of the connection between i and j, and xj is the 0 or 1 state of unit j. In other words, all of unit i’s neighbors send it a message, and we compute the sum of all these messages.Let pi=σ(ai), where σ(x)=1/(1+exp(x)) is the logistic function. Note that pi is close to 1 for large positive activation energies, and pi is close to 0 for negative activation energies.We then turn unit i on with probability pi, and turn it off with probability 1pi
    • .
    • (In layman’s terms, units that are positively connected to each other try to get each other to share the same state (i.e., be both on or off), while units that are negatively connected to each other are enemies that prefer to be in different states.)

    For example, let’s suppose our two hidden units really do correspond to SF/fantasy and Oscar winners.

    • If Alice has told us her six binary preferences on our set of movies, we could then ask our RBM which of the hidden units her preferences activate (i.e., ask the RBM to explain her preferences in terms of latent factors). So the six movies send messages to the hidden units, telling them to update themselves. (Note that even if Alice has declared she wants to watch Harry Potter, Avatar, and LOTR 3, this doesn’t guarantee that the SF/fantasy hidden unit will turn on, but only that it will turn on with high probability. This makes a bit of sense: in the real world, Alice wanting to watch all three of those movies makes us highly suspect she likes SF/fantasy in general, but there’s a small chance she wants to watch them for other reasons. Thus, the RBM allows us to generate models of people in the messy, real world.)
    • Conversely, if we know that one person likes SF/fantasy (so that the SF/fantasy unit is on), we can then ask the RBM which of the movie units that hidden unit turns on (i.e., ask the RBM to generate a set of movie recommendations). So the hidden units send messages to the movie units, telling them to update their states. (Again, note that the SF/fantasy unit being on doesn’t guarantee that we’ll always recommend all three of Harry Potter, Avatar, and LOTR 3 because, hey, not everyone who likes science fiction liked Avatar.)

    Learning Weights

    So how do we learn the connection weights in our network? Suppose we have a bunch of training examples, where each training example is a binary vector with six elements corresponding to a user’s movie preferences. Then for each epoch, do the following:

    • Take a training example (a set of six movie preferences). Set the states of the visible units to these preferences.
    • Next, update the states of the hidden units using the logistic activation rule described above: for the j
    th hidden unit, compute its activation energy aj=iwijxi, and set xj to 1 with probability σ(aj) and to 0 with probability 1σ(aj). Then for each edge eij, compute Positive(eij)=xixj (i.e., for each pair of units, measure whether they’re both on).Now reconstruct the visible units in a similar manner: for each visible unit, compute its activation energy ai, and update its state. (Note that this reconstruction may not match the original preferences.) Then update the hidden units again, and compute Negative(eij)=xixj for each edge.Update the weight of each edge eij by setting wij=wij+L(Positive(eij)Negative(eij)), where L
    • is a learning rate.
    • Repeat over all training examples.

    Continue until the network converges (i.e., the error between the training examples and their reconstructions falls below some threshold) or we reach some maximum number of epochs.

    Why does this update rule make sense? Note that

    • In the first phase, Positive(eij)
    measures the association between the ith and jth unit that we want the network to learn from our training examples;In the “reconstruction” phase, where the RBM generates the states of visible units based on its hypotheses about the hidden units alone, Negative(eij)
    • measures the association that the network itself generates (or “daydreams” about) when no units are fixed to training data.

    So by adding Positive(eij)Negative(eij)

    to each edge weight, we’re helping the network’s daydreams better match the reality of our training examples.

    (You may hear this update rule called contrastive divergence, which is basically a fancy term for “approximate gradient descent”.)

    Examples

    I wrote a simple RBM implementation in Python (the code is heavily commented, so take a look if you’re still a little fuzzy on how everything works), so let’s use it to walk through some examples.

    First, I trained the RBM using some fake data.

    • Alice: (Harry Potter = 1, Avatar = 1, LOTR 3 = 1, Gladiator = 0, Titanic = 0, Glitter = 0). Big SF/fantasy fan.
    • Bob: (Harry Potter = 1, Avatar = 0, LOTR 3 = 1, Gladiator = 0, Titanic = 0, Glitter = 0). SF/fantasy fan, but doesn’t like Avatar.
    • Carol: (Harry Potter = 1, Avatar = 1, LOTR 3 = 1, Gladiator = 0, Titanic = 0, Glitter = 0). Big SF/fantasy fan.
    • David: (Harry Potter = 0, Avatar = 0, LOTR 3 = 1, Gladiator = 1, Titanic = 1, Glitter = 0). Big Oscar winners fan.
    • Eric: (Harry Potter = 0, Avatar = 0, LOTR 3 = 1, Gladiator = 1, Titanic = 1, Glitter = 0). Oscar winners fan, except for Titanic.
    • Fred: (Harry Potter = 0, Avatar = 0, LOTR 3 = 1, Gladiator = 1, Titanic = 1, Glitter = 0). Big Oscar winners fan.

    The network learned the following weights:

    Weights

    Note that the first hidden unit seems to correspond to the Oscar winners, and the second hidden unit seems to correspond to the SF/fantasy movies, just as we were hoping.

    What happens if we give the RBM a new user, George, who has (Harry Potter = 0, Avatar = 0, LOTR 3 = 0, Gladiator = 1, Titanic = 1, Glitter = 0) as his preferences? It turns the Oscar winners unit on (but not the SF/fantasy unit), correctly guessing that George probably likes movies that are Oscar winners.

    What happens if we activate only the SF/fantasy unit, and run the RBM a bunch of different times? In my trials, it turned on Harry Potter, Avatar, and LOTR 3 three times; it turned on Avatar and LOTR 3, but not Harry Potter, once; and it turned on Harry Potter and LOTR 3, but not Avatar, twice. Note that, based on our training examples, these generated preferences do indeed match what we might expect real SF/fantasy fans want to watch.

    Modifications

    I tried to keep the connection-learning algorithm I described above pretty simple, so here are some modifications that often appear in practice:

    • Above, Negative(eij)

    was determined by taking the product of the ith and jth units after reconstructing the visible units once and then updating the hidden units again. We could also take the product after some larger number of reconstructions (i.e., repeat updating the visible units, then the hidden units, then the visible units again, and so on); this is slower, but describes the network’s daydreams more accurately.Instead of using Positive(eij)=xixj, where xi and xj are binary 0 or 1 states, we could also let xi and/or xj be activation probabilities. Similarly for Negative(eij).We could penalize larger edge weights, in order to get a sparser or more regularized model.When updating edge weights, we could use a momentum factor: we would add to each edge a weighted sum of the current step as described above (i.e., L(Positive(eij)Negative(eij)) and the step previously taken.Instead of using only one training example in each epoch, we could use batches of examples in each epoch, and only update the network’s weights after passing through all the examples in the batch. This can speed up the learning by taking advantage of fast matrix-multiplication algorithms.

    文中demo地址:https://github.com/echen/restricted-boltzmann-machines


    3、RBM预备知识

    理解RBM,需要一些预备知识:

    • sigmiod函数,神经网络中常用的激活函数之一,sigmoid(x)=\frac{1}{1+e^{-x}}
    • Bayes定理,P(A|B)=\frac{P(A,B)}{P(B)}P(B|A)=\frac{P(A,B)}{P(A)}推出P(A|B)=P(A)\frac{P(B|A)}{P(B)}P(A)先验概率(Prior probability)、P(A|B)后验概率(Posterior probability),\frac{P(B|A)}{P(B)}可能性函数(Likelyhood)。
    • 二分图(bipartite graph),图论中一种特殊模型,如果无向图中顶点可分割为两个互不相交的子集,而且图中的每条边关联的两个顶点分别属于这两个不同的顶点集。
    • MCMC,蒙特卡罗方法最初用于通过随机化的方法计算积分,假设计算\int_{a}^{b} h(x)dx,如果无法通过数学推导直接求出解析解,一般不可能对区间(a,b)上所有的x值进行枚举,我们可以将h(x)分解为某个函数f(x)和一个定义在(a,b)上的概率密度函数p(x)的乘积,则整个积分可以写成\int_{a}^{b}h(x)dx=\int_{a}^{b}f(x)p(x)dx=E_{p(x)}[f(x)],这样原积分等同于f(x)在p(x)这个分布上的均值。这时,如果我们从分布p(x)上采集大量的样本点,这些样本符合分布p(x),即有\frac{x_{i}}{\sum_{i=1}^{n}x_{i}}\approx p(x_{i})。那么我们就可以通过这些样本来逼近这个均值\int_{a}^{b}h(x)dx=\int_{a}^{b}f(x)p(x)dx=E_{p(x)}[f(x)]\approx \frac{1}{n}\sum_{i=1}^{n}f(x_{i}),这就是蒙特卡罗方法的基本思想。蒙特卡罗方法的核心问题是如何从分布上随机采集样本,一般采用马尔可夫链蒙特卡罗方法(Markov Chain Monte Carlo,MCMC)产生指定分布下的样本。
    • 马尔可夫链,离散时间上随机变量随时间变化的转移概率仅仅依赖于当前值的序列,MCMC建立的理论基础:如果我们想在某个分布下采样,只需要模拟以其为平稳分布的马尔科夫过程,经过足够多次转移之后,我们的样本分布就会充分接近于该平稳分布,也就意味着我们近似地采集目标分布下的样本。
    • 正则分布,统计力学的一个基本结论:当系统与外界达到热平衡时,系统处于状态i的概率p_{i}具有以下形式p_{i}=\frac{1}{Z_{T}} e^{-\frac{E_{i}}{T}},其中Z_{T}=\sum_{i}{e^{-\frac{E_{i}}{T}}}被称作归一化常数,T为正数,表示系统所处的温度,这种概率分布的形式叫做正则分布。
    • Metropolis-Hasting采样,MCMC算法中,为了在一个指定的分布上采样,先从系统的任意一个状态出发,然后模拟马尔可夫过程,不断进行状态转移,根据马尔可夫的性质,经过足够的转移次数之后,我们所处的状态即符合目标分布,此时的状态就可以作为一个采集到的样本。算法的关键就是设计出合理的状态转移过程。Metropolist-Hastings是一个非常重要的MCMC采样算法,并且对于设计状态转移过程建立了统一的框架。
    对于采样的特定数据场景还是需要进一步理解的。


    展开全文
  • 玻尔兹曼机 / 受限玻尔兹曼机

    千次阅读 2018-08-08 20:58:01
    玻尔兹曼机 / 受限玻尔兹曼机 是一种基于能量的模型,即能量最小化时网络模型达到理想状态。 网络结构上分两层: 显层用于数据的输入与输出,隐层则被理解为数据的内在表达。可见玻尔兹曼机的神经元状态都由0,1...

    玻尔兹曼机 / 受限玻尔兹曼机 是一种基于能量的模型,即能量最小化时网络模型达到理想状态。

    网络结构上分两层: 显层用于数据的输入与输出,隐层则被理解为数据的内在表达。可见玻尔兹曼机的神经元状态都由0,1组成。 

    受限玻尔兹曼机:

    数据集为,(本质上,玻尔兹曼机和受限玻尔兹曼机为自编码网络,是一种无监督学习方式),关于受限(同一层的单元互相不连接)玻尔兹曼机建立的能量函数为:

    基于能量函数,可以建立v,h的联合分布函数:

    以上是受限玻尔兹曼机工作。下面是玻尔兹曼机:

    展开全文
  • 受限玻尔兹曼机,简称RBM(下文中统一用RBM表示)。写这篇博客的原因是,下午看到吴恩达在Coursera上的Deep Learning课程中,跟Hinton的40分钟的采访,问Hinton他在AI中最令人惊喜的发现是什么,Hinton说就是他和...
  • 这篇写的主要是翻译网上一篇关于受限玻尔兹曼机的tutorial,看了那篇博文之后感觉算法方面讲的很清楚,自己收获很大,这里写下来作为学习之用。 原文网址为:...
  • 受限玻尔兹曼机RBM最通俗易懂的教程

    万次阅读 多人点赞 2017-08-04 00:59:34
    本人来到CSDN已经有一段时间了,写文章也写了好几篇了,本人最喜欢的风格就是用白话讲解一些通俗易懂的东西,在之前,我讲了不少东西,也不知道...我们这次要讲的东西是受限玻尔兹曼机,英文名字是Restricted Boltzmann
  • 受限玻尔兹曼机的分类效果怎么样?(对于很多种分类的分类效果如何?)
  • 受限玻尔兹曼机

    千次阅读 2017-09-29 16:58:28
    受限玻尔兹曼机 梯度下降法(以及相关的L-BFGS算法等)在使用随机初始化权重的深度网络上效果不好的技术原因是:梯度会变得非常小。具体而言,当使用反向传播方法计算导数的时候,随着网络的深度的增加,反向传播的...
  • 玻尔兹曼机和受限玻尔兹曼机

    千次阅读 2019-04-17 09:57:06
    文章目录Boltzmann Machines起源Boltzmann Machines的结构Boltzmann Machines的搜索问题Boltzmann Machines的学习问题不含隐藏层的学习包含隐藏层的学习学习速度不同类型的Boltzmann MachinesHigh-Order Boltzmann ...
  • 去年 6 月份写的博文《Yusuke Sugomori 的 C 语言 Deep Learning 程序解读》是囫囵吞枣地读完一个关于 DBN 算法的开源代码后的笔记,当时对其中涉及的算法原理基本不懂。近日再次学习 RBM,觉得有必要将其整理成笔记...
  • 受限玻尔兹曼机(RBM)与其在Tensorflow的实现

    万次阅读 多人点赞 2018-12-15 20:01:45
    受限玻尔兹曼机是一种无监督,重构原始数据的一个简单的神经网络。 受限玻尔兹曼机先把输入转为可以表示它们的一系列输出;这些输出可以反向重构这些输入。通过前向和后向训练,训练好的网络能够提取出输入中最重要...
  • 受限玻尔兹曼机和深度置信网络

    千次阅读 2018-06-28 15:03:29
    受限玻尔兹曼机和深度置信网络 引言 梯度弥散一直是困扰着深度神经网络的发展,那么如何解决梯度弥散问题呢?多伦多大学的Geoff Hinton提出了设想:受限玻尔兹曼机(Restricted Boltzmann Machines, RBM),即...
  • 生成式模型 生成式模型的理念大同小异,几乎都是用一个模型产生概率分布来拟合原始的数据分布情况,计算两个概率分布的差异使用KL散度,优化概率模型的方法是最小化对数...受限玻尔兹曼机 RBM模型是一种很早被提出...
  • 去年 6 月份写的博文《Yusuke Sugomori 的 C 语言 Deep Learning 程序解读》是囫囵吞枣地读完一个关于 DBN 算法的开源代码后的笔记,当时对其中涉及的算法原理基本不懂。近日再次学习 RBM,觉得有必要将其整理成笔记...
  • 重构但在本教程中,我们将重点关注受限玻尔兹曼机如何在无监督情况下学习重构数据(无监督指测试数据集没有作为实际基准的标签),在可见层和第一隐藏层之间进行多次正向和反向传递,而无需加大网络的深度。...
  • 受限玻尔兹曼机

    2018-11-11 11:10:44
    限制波尔兹曼RBM使用方法 限制波尔兹曼RBM能量模型 从能量模型到概率 求解极大似然 用到的抽样方法 马尔科夫蒙特卡罗简介 参考文献 原文链接: https://blog.csdn.net/mytestmy/article/det...
  • 受限玻尔兹曼机(RBM)学习笔记(七)RBM 训练算法

    万次阅读 多人点赞 2014-02-18 22:53:54
    去年 6 月份写的博文《Yusuke Sugomori 的 C 语言 Deep Learning 程序解读》是囫囵吞枣地读完一个关于 DBN 算法的开源代码后的笔记,当时对其中涉及的算法原理基本不懂。近日再次学习 RBM,觉得有必要将其整理成笔记...
  • 本篇文章主要写受限玻尔兹曼机、Gibbs求解方法、CD对比散度求解方法和深度信念网络。
  • 本文摘自机器之心公众号,原文地址:一起读懂传说中的经典:受限玻尔兹曼机 侵删一起读懂传说中的经典:受限玻尔兹曼机2018-05-07 机器之心选自DL4J机器之心编译参与:Nurhachu Null、思源尽管性能没有流行的生成...
1 2 3 4 5 ... 20
收藏数 2,725
精华内容 1,090
关键字:

受限玻尔兹曼机