The wake-sleep algorithm for unsupervisedneural networks

摘要

本文介绍一种在随机神经元组成的多层网络上的无监督学习算法。自下而上的“认知”连接把输入转化成后续隐层的表示(representation),自上而下的“生成”连接利用前一层的表示来重构数据。在wake过程,神经元用认知权值来驱动,并调整生成权值来增加下一层重构正确数据的概率。在sleep过程,神经元用生成权值来驱动,并调整认知权值来增加上一层产生正确数据的概率。

内容

多层神经网络的监督学习算法面临两个问题:需要一个“老师”指出网络的预期输出,需要一个方法把错误(偏差、残差)信息告诉所有的连接。WS(wake-sleep)算法避免了这些问题。没有外界指导信号相匹配时,需要一些别打目标来强迫隐藏节点提取潜在的结构。在WS算法中,目标就是学习容易描述但能够使输入精确重构的表示(recognition)。我们可以量化这个目标,想象一个交互游戏,每个输入向量与接受者进行通信,第一次发送隐藏的表示,然后发送原始输入向量和他从隐藏表示中获取的的TD(top-down)重构之间的差异。学习的目标是最小化“描述长度”,就是用这种方法与输入向量通信需要的总数据位数。实际上并没有进行交互,但最小化必需的描述长度迫使网络学习经济的(开销少的)表示,并能够捕捉数据中的规律。

这个神经网络有两组不同的连接。自下而上的“认知”连接是用来把输入向量转化成一层或多层隐藏节点中的表示。然后,自上而下的“生成”连接是用来从隐含的表示当中重构一个输入向量的近似。对这两组连接的训练算法可用于多种随机神经元,但简单起见,我们只用二元随机节点,只有0和1两种状态。节点                         的状态是 ,概率如下所示:

 

是节点的偏置, 是与节点 的连接权值。有时候节点由生成权值驱动,有时候由认知权值,但都用这同一个公式(图1)。

在“wake”阶段,节点自下而上驱动,使用认知权重,在第一隐层产生一个输入向量的表示,在第二隐层产生第一隐层的数据的表示…。所有层的表示合起来叫做输入数据的“总体表示”,在总体表示 中隐藏节点 的二元状态表示为 。这个总体表示可以用来把输入向量 传达给接受者。根据香农编码定理,如果发送者和接受者约定的分布中某事件的概率为 ,则传输他需要 位数据。我们假设接受者知道自上而下的生成权重,因而这就可以建立一个传达需要的约定概率分布。首先,顶层隐藏层的节点 的活动被告知使用分布 ,这是通过对节点 的单独的生成偏置权重套用公式1所得的。然后,下面各层的节点的活动被告知使用分布 ,这是通过对上层已有的状态 和生成权重 套用公式1得到的。节点 的二元状态的描述长度是:

 

使用表示 的输入数据 的描述长度就是所有隐藏层隐层状态的开销加上给定隐层状态后描述输入向量的开销。

 

是 层隐层的序号, 是输入节点的序号,其状态是 。

因为隐层节点状态是随机的,所以输入数据的表示并不总是一致的。在“wake”阶段,认知权重决定了一个总体表示上的条件概率分布 。然而,如果认知权值确定了,有一个简单的在线方法可以修改生成权值,来最小化 ,这是用随机选取的总体表示描述输入向量的期望开销。用认知权值选择一个总体表示后,每个生成权值都被按比例调整到公式3的导数,通过使用纯局部delta规则:

 

是 学习速率。尽管节点是用认知权值驱动的,在wake阶段训练的却仅仅是生成权值。训练使得总体表示中的每一层都能更好的重构下一层的活动(激活状态、数据)。

对 最小的 ,看起来认知权值似乎应该被调整到使它的概率最大。但这是错的。当有很多方法来描述输入向量时,能够设计一个随机的编码方案,该方案利用各种表示的熵。那么,开销(cost)就是:

 

第二项就是认知权值分配给不同的表示的分布的熵。比如,如果有两个表示,每个开销是4bit,如果我们用相同的概率使用他们,联合开销只有3bit(为啥这么定义?)。这就类似物理系统中不同状态的能量联合起来抑制整个系统Helmholtz自由能的方法。在物理中,当状态的概率和他们在玻耳兹曼分布(温度为1)下的开销呈指数关系时, 被最小化。

 

所以,与其调整认知权值使所有概率都集中在最低耗的表示上面。我们更应该尝试让认知分布 尽量与玻耳兹曼分布 类似,对于给定数据和网络的生成模型,它(玻耳兹曼分布)是表示(recognition)的后验概率。精确计算 是指数级的复杂度,但有一个简单的方法计算近似正确的隐藏节点的目标状态,从而可以训练自下而上的认知权值的分布 。

我们撇下认知权值,用生成权值来驱动整个网络,从顶层开始,向下一直运行到输入节点。因为节点是随机的,重复这个过程通常会在输入节点产生很多不同的“fantasy”向量。这些向量提供了一个生成模型关于世界的无偏采样。生成一个fantasy之后,我们随后调整认知权值来最大化重现生成fantasy的隐层状态的对数概率。

 

是对于特定的fantasy,隐藏节点和输入节点的状态。 是认知权值作用时,节点k为1的概率。 是下一层的概率。我们把这个叫做算法的“sleep”过程。类似wake过程,他只用到本地的信息。Sleep过程的一个潜在缺点是,我们希望认知权值能更好的拟合真实的原因(生成训练数据的),但sleep过程其实是对fantasy做最优化。在训练过程早期,fantasy和训练数据的分布很不一样。

认知权值产生的分布 在每个隐层是一个factorial(因子的,乘积的)分布,因为给定下一层的状态后,认知权值产生的各节点的状态是条件独立的。神经网络用factorial分布是自然的,因为 个可选的隐藏表示的概率分布可以用 个数字来指定而非 个。但是,这个简化会使 很难完全匹配公式6中的后验概率 。比如说,当某一层的活动向量取决于是否激活了上一层中a节点和b节点中任意一个而非同时激活他们的时候,很难捕捉到“explaining away”效果。

把 限制成factorial分布可能是一个严重的限制。但他不是个致命的缺陷,因为算法的wake过程调整生成权值以使 更接近 ,从而限制 在为非factorial分布建模时的无能导致的损失。为了说明为什么这个效果出现,我们把公式5写成另一种形式:

 

公式8的前两项就是当前生成模型下的 。最后一项,保证非负,是 和 的KL距离。 就是用 时的描述长度超出 的数量。所以,对于两个给 分配了相等概率的生成模型,给定生成权值后最小化公式8就会倾向于支持后验概率最接近 的模型。在生成模型的可能空间里,wake过程找出使近似factorial的后验概率提高的样本。

因为我们做了几个近似,所有算法必须通过效果来评估。图2显示他能训练一个正确的多层生成模型。对于一个简单的问题。此外,进过训练,公式8中的KL距离只有0.08bit,说明这个过程产生了一个有几乎完美factorial后验概率的生成模型。我们还在多变的手写数字图上测试了他产生模型的容量的两个量化方面(图3a)。训练十个不同的模型,每个数字一个,我们能够准确识别新数字,通过看那个模型给出最实惠的表示。图3b显示,当训练一个数字模型后,网络生成的fantasy很接近真实数据。我们同样对所有数字训练了一个单独的大网络,并确认了他能够像这是个单独网络一样好的压缩新的数字,而且比简单编码好两倍。

神经网络的两个广泛应用的无监督训练算法是principal components analysis和competitive learning(有时候也叫vector quantization or clustering)。他们都可以被看作只有一个隐层的最小表示程度方法的特例,而且区分认知权值和生成权值没必要,因为他们经常是相等的。其他的学习框架用分离的前馈和反馈权值。相比Adaptive Resonance Theory [8], Counter-Streams model [9],和Kawatoetal’s algorithm [10],wake-sleep算法把无监督学习的问题看作统计学——一个能精确的捕捉输入向量的结构的生成模型。Kawato的模型用前向和反向模型来表达,是我们的生成模型和认知模型的另一种表达。wake-sleep算法最接近Barlow的思想和Mumford的建议的灵魂,前者是关于可逆的阶乘表示,后者将Grenander的生成模型方法映射到大脑。

无监督学习的最小表示长度方法用来提高人工神经网络的模式识别能力。但wake-sleep学习算法的简单性使得它在生物学方面很有趣。比如,Hasselmo已经提出输入到皮层的胆碱能可以调节正在进行的活动的前馈控制的程度。有一个奇怪的巧合,使用生成模型的感知系统的想法由Helmholtz主张,所以我们把通过最小化公式5表示的自由能来配置一个数据的生成模型的神经网络都称作“Helmholtz机”。

 

图1:一个三层HM(Helmholtzmachine)。底层代表原始感官输入节点。I,J,K 层的节点都是认知连接(实现)和生成连接(虚线)的全连接节点。J层节点 的二元状态是 。 由认知权重决定, 由生成权值决定。当节点由下而上驱动, 的概率是 ,当由上而下驱动时,这个概率是 。

 

 

图2:a)4*4图像的一个生成模型。顶层决定使用水平还是竖直的条。下一层决定所选择的方向的每个可能的条是否应出现在图像中。b)一个由a中模型用移除的模糊的全白图像产生的样本图像。一个包含16个输入节点、第一层隐层有8个节点、第二个隐层有1个节点的神经网络,在用生成模型产生的2*106个随机样本上训练。训练之后,sleep阶段产生的概率分布几乎是正确的。c)进入和离开第一层隐层8个节点的连接的生成权重。正权重是白色,负权重是黑色,而且面积和幅度成比例。显示的最大权重是14.1。节点的生成偏置在每个块的右上方显示,它连接上层唯一一个节点的生成权重在左上方显示。最右边的块表示输入节点的生成偏置。为了产生一个容易解释的解决方案,输入节点的生成权重限定为正。如果允许为负的话,算法能得到正确的分布,但方法很复杂,同时也需要第二个隐层有更多的节点。

 

图3:手写数字被规格化并量化成8*8的二值图像。左边展示了每种数字的24个样例。每个数字都训练了一个单独的网络,右边展示了每个网络的24个产物。每个数字的变换都进行了很好的建模。当选择能最小化描述长度的网络作为分类结果时,错误率是4.8%。对于同样的数据,最近邻分类错误率有6.7%,BP神经网络训练一个有10个输出节点的网络错误率最小也有5.6%,哪怕我们用测试数据来最优化隐层节点数量、训练时间、和权值衰减。