首页 > 代码库 > [深度学习]Wake-Sleep算法
[深度学习]Wake-Sleep算法
本文翻译自2007-To recognize shapes, first learn to generate images, Geoffrey Hinton.
第五种策略的设计思想是使得高层的特征提取器能够和底层的进行通信, 同时可以很容易地使用随机二态神经元的分层网络来实现.
这些神经元的激活概率是关于总输入的一个平滑非线性方程:
其中si和sj是神经元i和j的活跃度(activity), wij是i和j的权值, bj是j的偏置.
图1
如果训练数据是使用图1中类型的多层图像模型从上到下生成的, 则被用来从上到下(top-down)生成图像的隐层神经元的二进制状态就可以被用来作为它训练从下到上(bottom-up)认知权值(reco-weights)时的期望输出.
乍一看, 这种使用从上到下生成连接(generative connections)来给隐层神经元提供期望状态的想法是毫无意义的, 因为我们现在需要学习的是一个能够产生训练数据(training data)的图模型(graphics model).
但是, 如果我们已经有了一些较好的认知连接(reco-connections), 我们就可以使用一种从下到上的传播(pass) -- 用真实数据来激活每层的神经元从而我们就可以通过尝试从前一层的活跃度信息来重建每层的活跃度, 从而学习这个生成权值.
所以这就变成一个鸡与蛋的问题: 给定生成权值(generative weights, gene-weights for short), 我们可以学习得到认知权值(recognition weights, reco-weights); 给定认知权值, 我们可以学习得到生成权值.
结果是什么? 基于少量随机值并在两种学习阶段(phases of learning)中切换, 我们竟然可以同时学习得到上述两种权值!
在清醒阶段("wake" phase), 认知权值被用来从下到上驱动神经元, 相邻层的神经元的二进制状态则可以被用来训练生成权值;
在睡眠阶段("sleep" pahse), 从上到下的生成连接则被用来驱动网络, 从而基于生成模型(generative model)产生图像(fantasies). 相邻层的神经元状态(0/1)就可以被用来学习从下到上的认知连接(Hinto et al., 1995).
学习的规则非常简单. 清醒阶段, 生成权值gkj, 根据下式进行更新:
其中神经元k在神经元j的上层, e是学习速率, pj是神经元j被使用当前生成权值的前一层神经元的当前状态驱动时的激活概率.
睡眠阶段, 认知权值wij, 根据下式进行更新:
其中qj是神经元j被使用当前认知权值的前一层神经元的当前状态驱动时的激活概率.