1、受限波尔兹曼机简介,机器学习研究的主要任务是设计和开发计算机可以智能地根据实际数据进行“学习”的算法,从而使这些算法可以自动地发现隐藏在数据中的模式和规律。,2,1 RBM的使用说明,RBM网络结构,RBM网络结构有m个可视节点和n个隐藏节点,RBM网络有几个参数,一个是可视层与隐藏层之间的权重矩阵Wnm,一个是可视节点的偏移量b=(b1,b2bn),一个是隐藏节点的偏移量c=(c1,c2cm),这几个参数决定了RBM网络将一个n维的样本编码成一个什么样的m维的样本。,RBM网络的功能,首先为了描述容易,先假设每个节点取值都在集合0,1中,即i,j,vi 0,1,j 0,1 。一个训练样本x过
2、来了取值为x=(x1,x2xn),根据RBM网络,可以得到这个样本的m维的编码后的样本y=(y1,y2ym),这m维的编码也可以认为是抽取了m个特征的样本。隐藏节点的第j个特征的取值为1的概率为其中的v取值就是x,hj的取值就是yj。,生成yj的过程就是: 先利用公式 ,根据x的值计算概率p(hj=1|v),其中vi的取值就是xi的值。 然后产生一个0到1之间的随机数,如果它小于p(hj=1|v) , yj的取值就是1,否则就是0。 反过来,现在知道了一个编码后的样本y,想要知道原来的样本x,即解码过程,跟上面也是同理,过程如下: 先利用公式 ,根据y的值计算概率p(hj=1|v),其中hj的
3、取值就是yj的值。 ii)然后产生一个0到1之间的随机数,如果它小于p(vi=1|h),hi的取值就是1,否则就是0。,深度信念网络(Deep Belief Nets,DBN),在该算法中,一个DBN被视为由若干个RBM堆叠在一起,训练时可通过由低到高逐层训练这些RBM来实现。 (1) 底部RBM以原始输入数据训练; (2) 将底部RBM抽取的特征作为顶部RBM的输入训练; (3) 过程(1)和(2)可以重复来训练所需要的尽可能多的层数。 Hinton建议,经过这种方式训练后,可以再通过传统的全局学习算法(如反向传播算法)对网络进行微调,从而使模型收敛到局部最优点。,1 受限波尔兹曼机RBM的
4、基本模型,RBM也可以被视为一个无向图模型。v 为可见层,用于表示观测数据,h 为隐层,可视为一些特征提取器,W 为两层之间的连接权重。假设所有的可见单元和隐单元均为二值变量,即,如果一个RBM有n个可见单元和m个隐单元,用向量v和h分别表示可见单元和隐单元的状态。其中,vi表示第i个可见单元的状态,hj表示第j个隐单元的状态。对于一组给定的状态(v; h), RBM作为一个系统所具备的能量定义为,当参数确定时,基于该能量函数,我们可以得到(v; h)的联合概率分布:对于一个实际问题,我们最关心的是由RBM所定义的关于观测数据v的分布,即联合概率分布的边际分布,也称为似然函数:,由RBM的特殊
5、结构(即层间有连接,层内无连接)可知:当给定可见单元的状态时,各隐单元的激活状态之间是条件独立的。此时,第j个隐单元的激活概率为,RBM的结构是对称的,当给定隐单元的状态时,各可见单元的激活状态之间也是条件独立的,即第i个可见单元的激活概率为,2 基于对比散度的RBM快速学习算法,学习RBM的任务是求出参数 的值,以拟合给定的训练数据。参数可以通过最大化RBM在训练集(假设包含T个样本)上的对数似然函数学习得到,即,下面,假设只有一个训练样本,我们分别用“data”和“model” 来简记和这两个概率分布,则对数似然函数关于连接权重Wij、可见层单元的偏置ai 和隐层单元的偏置bj 的偏导数分
6、别为,2.1 RBM中的Gibbs采样,Gibbs是一种基于马尔可夫链蒙特卡罗策略的采样方法。对于一个K维随机向量X =(X1;X2; ;XK),假设我们无法求得关于X的联合分布P(X),但我们知道给定X的其他分量时,其第k个分量Xk的条件分布:,那么我们可以从X的一个任意状态开始,利用上述条件分布,迭代地对其分量依次采样,随着采样次数的增加,随机变量的概率分布将以n的几何级数的速度收敛于X的联合概率分布P(X)。换句话说,我们可以在未知联合概率分布P(X)的条件下对其进行采样。,随机模拟的基本思想和常用采样方法,现在假设我们有一个矩形的区域R(大小已知),在这个区域中有一个不规则的区域M(即
7、不能通过公式直接计算出来),现在要求取M的面积? 怎么求?近似的方法很多,例如:把这个不规则的区域M划分为很多很多个小的规则区域,用这些规则区域的面积求和来近似M,另外一个近似的方法就是采样的方法,我们抓一把黄豆,把它们均匀地铺在矩形区域,如果我们知道黄豆的总个数S,那么只要我们数数位于不规则区域M中的黄豆个数S1,那么我们就可以求出M的面积:M=S1*R/S。,MCMC方法是关联采样,即下一个样本与这个样本有关系,从而使得采样效率高。MCMC方法的基本思想是:通过构建一个markov chain使得该markov chain的稳定分布是我们所要采样的分布f(x)。如果这个markov cha
8、in达到稳定状态,那么来自这个chain的每个样本都是f(x)的样本,从而实现抽样的目的。,Gibbs采样算法的步骤,1. 给定一个初始样本X0=x10,x20,.,xn0 2.已知一个样本Xi=x1i,x2i,.,xni,对于x1_i+1进行抽样, x1_i+1 p(x1|Xi_-1) 3. 对于x2_i+1进行抽样,x2_i+1 p(x2|x1_i+1, x3i,.xni) 4.对于xn_i+1进行抽样, xn_i+1 p(xn|x1_i+1, x2_i+1,. x_n-1_i+1) 5.步骤24可以得到X的一个样本,然后重复步骤24可以不断地得到X的样本。,基于RBM模型的对称结构,以及
9、其中神经元状态的条件独立性,我们可以使用Gibbs采样方法得到服从RBM定义的分布的随机样本。在RBM中进行k步吉布斯采样的具体算法为:用一个训练样本(或可见层的任何随机化状态)初始化可见层的状态v0,交替进行如下采样:,在采样步数k足够大的情况下,我们可以得到服从RBM所定义的分布的样本。此外,使用Gibbs采样我们也可以得到式RBM中第二项的一个近似。,2.2 基于对比散度的快速学习算法,与吉布斯采样不同,Hinton指出当使用训练数据初始化v0时,我们仅需要使用k(通常k =1)步吉布斯采样便可以得到足够好的近似。 CD算法一开始,可见单元的状态被设置成一个训练样本,并利用计算所有隐层单
10、元的二值状态。,在所有隐层单元的状态确定之后,根据式来确定第i个可见单元vi取值为1的概率,进而产生可见层的一个重构。 各参数的更新准则为,在RBM中,可见单元数一般等于训练数据的特征维数,而隐单元数需要事先给定。假设可见单元数和隐单元数分别为n和m。令W表示可见层与隐层间的连接权重矩阵(m*n阶),a(n维列向量)和b(m维列向量)分别表示可见层与隐层的偏置向量。,RBM的基于CD的快速学习算法,CD的学习算法是针对RBM的可见单元和隐层单元均为二值变量的情形提出。但很容易推广到可见层单元为高斯变量、可见层和隐层单元均为高斯变量等其他情形。,使用 RBM 的过程,假设我们现在已经得到一个训练
11、好的 RBM,每个隐元与显元间的权重用矩阵W表示,其中Wij代表从第i个显元到第j个隐元的权重,M代表显元的个数,N代表隐元的个数。,当我们把一条新来的数据,首先,将每个隐元的激励值 (activation) 计算出来:,然后,将每个隐元的激励值都用 S 形函数进行标准化,变成它们处于开启状 (用 1 表示) 的概率值:,至此,每个隐元hj开启的概率被计算出来了。其处于关闭状态 (用 0 表示) 的概率,那么到底这个元开启还是关闭,我们需要将开启的概率与一个从 0, 1 均匀分布中抽取的随机值,进行如下比较,然后开启或关闭相应的隐元。 给定隐层,计算显层的方法是一样的。,训练 RBM,RBM
12、的训练过程,实际上是求出一个最能产生训练样本的概率分布。也就是说,要求一个分布,在这个分布里,训练样本的概率最大。由于这个分布的决定性因素在于权值W ,所以我们训练 RBM 的目标就是寻找最佳的权值。,对比散度 (CD) 的学习算法,对于训练集中的每一条记录,深度信念网络,DBN 是由多层 RBM 组成的一个神经网络,它既可以被看作一个生成模型,也可以当作判别模型,其训练过程是:使用非监督贪婪逐层方法去预训练获得权值。,训练过程,1. 首先充分训练第一个 RBM; 2. 固定第一个 RBM 的权重和偏移量,然后使用其隐性神经元的状态,作为第二个 RBM 的输入向量; 3. 充分训练第二个 RB
13、M 后,将第二个 RBM 堆叠在第一个 RBM 的上方; 4. 重复以上三个步骤任意多次;,5. 如果训练集中的数据有标签,那么在顶层的 RBM 训练时,这个 RBM 的显层中除了显性神经元,还需要有代表分类标签的神经元,一起进行训练: a) 假设顶层 RBM 的显层有 500 个显性神经元,训练数据的分类一共分成了 10 类; b) 那么顶层 RBM 的显层有 510 个显性神经元,对每一训练训练数据,相应的标签神经元被打开设为 1,而其他的则被关闭设为 0。 6. DBN 被训练好后如下图,训练好的深度信念网络。图中的绿色部分就是在最顶层 RBM 中参与训练的标签。,调优过程 (Fine-
14、Tuning),生成模型使用 Contrastive Wake-Sleep 算法进行调优,其算法过程是: 1. 除了顶层 RBM,其他层 RBM 的权重被分成向上的认知权重和向下的生成权重; 2. Wake 阶段:认知过程,通过外界的特征和向上的权重 (认知权重) 产生每一层的抽象表示 (结点状态) ,并且使用梯度下降修改层间的下行权重 (生成权重) 。也就是“如果现实跟我想象的不一样,改变我的权重使得我想象的东西就是这样的”。,3. Sleep 阶段:生成过程,通过顶层表示 (醒时学得的概念) 和向下权重,生成底层的状态,同时修改层间向上的权重。也就是“如果梦中的景象不是我脑中的相应概念,改
15、变我的认知权重使得这种景象在我看来就是这个概念”。,3 RBM的参数设置,RBM的训练通常是基于CD的方法,但如何设置其中的一些参数,如隐单元个数、学习率、参数的初始值等是需要有一定经验的。,小批量数据及其容量,对于连接权重、可见层和隐层偏置的更新,虽然可以基于一个训练样本进行(类似于在线学习的方式),但计算量将很大。将训练集事先分成包含几十或几百个样本的小批量数据进行计算将更高效;同时为了避免在小批量数据的样本容量发生改变时,学习率也必须做相应的修改,通常的做法是在参数的更新过程中,使用参数的平均梯度(即总梯度除以数据容量),这里,B 表示小批量数据的容量,其值不应设得太大。B =1表示参数
16、更新以在线学习的方式进行,而B =T则表示传统的批处理方式。一般而言,若训练集是包含来自不同类(具有同等概率)的样本,理想的B 应为总类数,使得每批数据中都包含来自每个类的一个样本,以减小梯度估计的抽样误差。,学习率,学习率若过大,将导致重构误差急剧增加,权重也会变得异常大。设置学习率的一般做法是先做权重更新和权重的直方图,令权重更新量为权重的10-3 倍左右。如果有一个单元的输入值很大,则权重更新应再小一些,因为同一方向上较多小的波动很容易改变梯度的符号。相反,对于偏置,其权重更新可以大一些。,隐单元个数如果我们关心的主要目标是避免过拟合而不是计算复杂度,则可以先估算一下用一个好的模型描述一
17、个数据所需的比特数,用其乘上训练集容量。基于所得的数,选择比其低一个数量级的值作为隐元个数。如果训练数据是高度冗余的,比如数据集容量非常大,则可以使用更少一些的隐元。,4 RBM的评估算法,对于一个已经学习得到或正在学习中的RBM,应通过何种指标评价其优劣呢?最简单的指标就是该RBM在训练数据上的似然度,而这个值是无法通过数学方法直接解析得到的,重构误差,所谓“重构误差”就是以训练数据作为初始状态,根据RBM的分布进行一次Gibbs采样后所获样本与原数据的差异(一般用一范数或二范数来评估),退火式重要性采样,利用蒙特卡罗方法估计RBM对数据的似然度,只不过没有使用MCMC,而是通过一种叫做“重要性采样”的算法进行逼近。,