RBM原理:
玻尔兹曼机最初是作为一种广义的“联结主义”引入,用来学习向量上的任意概率分布。联结主义(connectionism)的中心思想是,当网络将大量简单计算单元连接在一起时可以实现智能的行为。分布式表示(distributed representation)认为系统每个输入应该由许多特征表示的,并且每个特征应参与多个可能输入的表示。
特别在不是所有变量都能被观察到时,具有隐藏单元的玻尔兹曼机不再局限于线性关系会十分强大,用处在于学习一组数据的“内在表示”,因此可以看到它没有输出层的概念。其实玻尔兹曼机也很符合大脑神经的工作,比如连接两个随机变量的轴突和树突只能通过观察他们物理上实际接触的细胞的激发模式来学习,而且经常被同时激活的两个单元之间的连接会被加强。
玻尔兹曼机也是这样,如上图所示,RBM由两层组成,一层是可视层,一层是隐藏层。此时假设所有的节点都是随机二值变量节点(只能取0或1),而且对于向量v,h假设全概率分布基于能量Boltzmann分布:
其中a,b是偏倚系数,而W是权重矩阵。有了能量函数,v,h的联合概率分布为:
其中Z是被称为配分函数的归一化常数:
由于 配分函数Z的难以处理,所以必须使用最大似然梯度来近似。首先从联合分布中导出条件分布:
为了推导方便将无关值归于Z’中:
可以容易的得到在给定可视层v的基础上,隐层第j个节点为1或者为0的概率为:
可以看到就是相当于使用了 sigmoid激活函数,现在可以写出关于隐藏层的完全条件分布:
基于此可以得到RBM的对数损失函数:
然后求导可得:
推导了这么久,其实RBM就是可以被看做是一个自编码器。从可见层到隐藏层的输入样本,W,a然后用Sigmoid激活得到0,1值的过程就是编码,而从隐藏层到可见层的神经元值和W,b的过程就是解码,然后优化期望差距尽可能小,迭代最后得到模型。然后通过解码过程可以对测试集进行预测。
梯度下降计算量太大?
可以采用基于MCMC(Markov Chain Monte Carlo and Gibbs Sampling的方法来模拟计算求解每个样本的梯度损失再求梯度和。而Gibbs的作用是用来估计负梯度似然函数和在训练完模型之后进行采样,来看模型对数据的拟合以及网络中间隐含层的抽象效果。
加深层数!
加深RBM的层数后,可以变成Deep Boltzmann Machine(DBM)
联合概率变为:
能量函数变为:
但是其实对于全相连玻尔兹曼来说,DBM也可以变成一个“限制”的二分图,奇数一侧,偶数一侧,这就使得DBM能更加的高效
主要参考:
bengio deep learning