[DeepLearning]如何使用对比散度(How to use Contrastive Divergence)
2016-01-20 14:47
274 查看
假设可见层和隐藏层单元都是二值的。学习的目的是针对训练数据构建一个好的生成模型。
p(hj=1)=σ(bj+∑iviWij)
随机生成一个均匀分布的0到1之间的值,如果该值大于概率,则隐藏层单元状态置为1,否则为0。
使用二值而非概率作为隐藏层状态是相当重要的。如果使用概率作为隐藏层的状态,在重建可见层的时候,每个隐藏层单元就是一个实数值,这违反了information bottleneck,因为隐藏层单元平均最多只能表达一位。这个information bottleneck是一个强的正则化。
而最后一次更新隐藏层的状态时,则应该使用概率作为隐藏层的状态。因为不再需要使用隐藏层的状态来重建可见层了。所以直接使用概率来避免不必要的采样的噪音。当使用CDn时,只有最后一次隐藏层单元的更新使用概率。
pi=p(vi=1)=σ(ai+∑jhjwij
但是通常直接使用概率而非随机二值作为重建可见层的状态。
<pihj>data or <pipj>data
pj是隐藏层的概率,hj是隐藏层的随机二值表示
使用hj更接近于RBM的数学模型。而实用pj通常能够减少采样的误差,能够学的更快。
假设可见层使用逻辑函数。对于数据和重建都使用实数概率。
当为学习权重或偏置收集pairwise statics时,使用概率而非二值状态。保证权重有一个随机的初始值。
更新隐藏层
假设隐藏层单元是二值的,而且使用的是CD1,隐藏层单元在通过数据向量驱动得到时应该具有随机的二值状态。隐藏层单元置为1的概率为p(hj=1)=σ(bj+∑iviWij)
随机生成一个均匀分布的0到1之间的值,如果该值大于概率,则隐藏层单元状态置为1,否则为0。
使用二值而非概率作为隐藏层状态是相当重要的。如果使用概率作为隐藏层的状态,在重建可见层的时候,每个隐藏层单元就是一个实数值,这违反了information bottleneck,因为隐藏层单元平均最多只能表达一位。这个information bottleneck是一个强的正则化。
而最后一次更新隐藏层的状态时,则应该使用概率作为隐藏层的状态。因为不再需要使用隐藏层的状态来重建可见层了。所以直接使用概率来避免不必要的采样的噪音。当使用CDn时,只有最后一次隐藏层单元的更新使用概率。
更新可见层
在更新可见层状态时,正确的做法是根据以下概率随机选择将可见层单元置为0或1。pi=p(vi=1)=σ(ai+∑jhjwij
但是通常直接使用概率而非随机二值作为重建可见层的状态。
收集学习需要的统计数据
假设可见层使用实数概率而非随机二进制值。有两种收集positive static的方法。可见层单元i,隐藏层单元j。<pihj>data or <pipj>data
pj是隐藏层的概率,hj是隐藏层的随机二值表示
使用hj更接近于RBM的数学模型。而实用pj通常能够减少采样的误差,能够学的更快。
CD1学习的建议
当隐藏层是由数据驱动时,总是使用随机的二值状态。当它们由重建驱动时,总是使用概率而不进行采样。假设可见层使用逻辑函数。对于数据和重建都使用实数概率。
当为学习权重或偏置收集pairwise statics时,使用概率而非二值状态。保证权重有一个随机的初始值。
相关文章推荐
- CUDA搭建
- 稀疏自动编码器 (Sparse Autoencoder)
- 白化(Whitening):PCA vs. ZCA
- softmax回归
- 卷积神经网络初探
- 图像识别和图像搜索
- 卷积神经网络
- 深度学习札记
- 图像智能打标签‘神器’-AlchemyVision API
- ubuntu theano 安装成功,windows theano安装失败
- 【Deep learning vs BPL】思考:complex => simple => rich
- 卷积神经网络知识要点
- 1.linear Regression
- 1.linear Regression
- SURF项目总结 - deepdream
- Deep learning: autoencoders and sparsity
- Windows7+Anaconda+Theano+Pylearn2深度学习环境搭建
- 2015年12月5日
- 开设博客初衷