文章末尾,有cd算法的详细介绍。
DBN 在训练模型的过程中主要分为两步:
第 1 步:分别单独无监督地训练每一层 RBM 网络,确保特征向量映射到不同特征空间时,都尽可能多地保留特征信息;
第 2 步:在 DBN 的最后一层设置 BP 网络,接收 RBM 的输出特征向量作为它的输入特征向量,有监督地训练实体关系分类器.而且每一层 RBM 网络只能确保自身层内的 权值对该层特征向量映射达到最优,并不是对整个 DBN 的特征向量映射达到最优,所以反向传播网络还将错误信息自顶向下传播至每一层 RBM,微调整个 DBN 网络.RBM 网络训练模型的过程可以看作对一个深层 BP 网络权值参数的初始化,使DBN 克服了 BP 网络因随机初始化权值参数而容易陷入局部最优和训练时间长的缺点.
上述训练模型中第一步在深度学习的术语叫做预训练,第二步叫做微调。最上面有监督学习的那一层,根据具体的应用领域可以换成任何分类器模型,而不必是BP网络。
关于贝叶斯网络“解去”(explaining away)
当我们建立多因一果的BN结构时,如果其中一个原因已经确定了结果的形成,那其他原因就应该忽略。
Oliver Woodford:Notes on Contrastive Divergence(google可下载)
CD(Contrastive Divergence)算法由Geoffrey Hinton提出,用于求ML(Maximum-Likelihood)问题的近似解。
问题描述
假设模型为,
为模型参数,则
的概率可以表示为
假设训练集是
ML问题求解
- 假如模型为单高斯分布,即
,则
. 显然,此时
。分别对(3)求
和
求偏导,由导数等于零可以求出解析解,概率统计或者统计信号的书都会有详细的求解。
- 若模型为多个高斯分布的和(混合高斯模型),即
. 此时,
. 同样可以通过求偏导得出解析解,但是模型参数之间是互相依赖的(偏导中包含了其他参数),并不能简单地通过导数等于零解出参数。这时候可以用GD(Gradient Descent)和Line Search找到局部最小点。
- 若模型为多个高斯分布的乘积,即
. 此时
不再是常数(取几个特殊指即可知)。因此能量值只能通过积分计算,然后再通过GD寻找最小值。但对于高维的数据或者参数空间来说,计算这个积分显然是相当耗时的。CD算法的作用就在于此,即使对于无法准确计算的能量函数,CD也可以提供有效的梯度计算方法,用于求解模型参数。
CD算法原理
对能量函数(3)求偏导
其中,最后一项即为给定
即分布
假设
实际使用中MCMC并不需要无限步,因为随着不断迭代,输入数据的分布与目标分布会越来越接近。Hinton进一步指出,即使每次只做一步MCMC,ML问题同样可以收敛。因此,使用Gradient Descent,每一次迭代,参数更新为
其中,