55
66本节的所有代码都可以在[ 这里] ( http://deeplearning.net/tutorial/code/rbm.py ) 下载。
77
8- ### 基于能量模型(Energy-Based Models)
8+ ## 基于能量模型(Energy-Based Models)
99基于能量的模型(EBM)把我们所关心变量的各种组合和一个标量能量联系在一起。训练模型的过程就是不断改变标量能量的过程,使其能量函数的形状满足期望的形状。比如,如果一个变量组合被认为是合理的,它同时也具有较小的能量。基于能量的概率模型通过能量函数来定义概率分布:
1010
1111![ energy_fun] ( /images/7_ebm_1.png )
2020
2121其中随机梯度为![ gradient] ( /images/7_ebm_4.png ) ,其中theta为模型的参数。
2222
23- #### 包含隐藏单元的EBMs
23+ ### 包含隐藏单元的EBMs
2424
2525在很多情况下,我们无法观察到x样本的全部分布,或者我们需要引进一些没有观察到的变量,以增加模型的表达能力。因而我们考虑将模型分为2部分,一个可见部分(x的观察分布)和一个隐藏部分h,这样得到的就是包含隐含变量的EBM:
2626
4747通常我们很难精确计算这个梯度,因为式中第一项涉及到可见单元与隐含单元的联合分布,由于归一化因子Z(θ)的存在,该分布很难获取。 我们只能通过一些采样方法(如Gibbs采样)获取其近似值,其具体方法将在后文中详述。
4848
4949
50- ### 受限波尔兹曼机(RBM)
50+ ## 受限波尔兹曼机(RBM)
5151
5252波尔兹曼机是对数线性马尔可夫随机场(MRF)的一种特殊形式,例如这个能量函数在它的自由参数下是线性的。为了使得它们能更强力的表达复杂分布(从受限的参数设定到一个非参数设定),我们认为一些变量是不可见的(被称为隐藏)。通过拥有更多隐藏变量(也称之为隐藏单元),我们可以增加波尔兹曼机的模型容量。受限波尔兹曼机限制波尔兹曼机可视层和隐藏层的层内连接。RBM模型可以由下图描述:
5353
@@ -68,7 +68,7 @@ RBM的能量函数可以被定义如下:
6868![ prob_rbm] ( /images/7_rbm_4.png )
6969
7070
71- #### 二进制单元的RBMs
71+ ### 二进制单元的RBMs
7272在使用二进制单元(v和h都属于{0,1})的普通研究情况时,概率版的普通神经激活函数表示如下:
7373
7474![ activation_fun] ( /images/7_rbm_binary_units_1.png )
@@ -80,15 +80,15 @@ RBM的能量函数可以被定义如下:
8080![ free_energy_binary] ( images/7_rbm_binary_units_1.png )
8181
8282
83- #### 二进制单元的更新公式
83+ ### 二进制单元的更新公式
8484
8585我们可以获得如下的一个二进制单元RBM的对数似然梯度:
8686
8787![ equations] ( /images/7_update_e_b_u_1.png )
8888
8989这个公式的更多细节推倒,读者可以阅读[ 这一页] ( http://www.iro.umontreal.ca/~lisa/twiki/bin/view.cgi/Public/DBNEquations ) ,或者[ Learning Deep Architectures for AI] ( http://www.iro.umontreal.ca/%7Elisa/publications2/index.php/publications/show/239 ) 的第五节。在这里,我们将不使用这些等式,而是通过Theano的` T.grad ` 来获取梯度。
9090
91- ### 在RBM中进行采样
91+ ## 在RBM中进行采样
9292
9393p(x)的样本可以通过运行马尔可夫链的汇聚、Gibbs采样的过渡来得到。
9494
@@ -109,20 +109,20 @@ p(x)的样本可以通过运行马尔可夫链的汇聚、Gibbs采样的过渡
109109在这个理论里面,每个参数在学习进程中的更新都需要运行这样几个链来趋近。毫无疑问这将耗费很大的计算量。一些新的算法已经被提出来,以有效的学习p(v,h)中的样本情况。
110110
111111
112- ### 对比散度算法(CD-k)
112+ ## 对比散度算法(CD-k)
113113
114114对比散度算法,是一种成功的用于求解对数似然函数关于未知参数梯度的近似的方法。它使用两个技巧来技术采样过程:
115115* 因为我们希望p(v)=p_train(v)(数据的真实、底层分布),所以我们使用一个训练样本来初始化马尔可夫链(例如,从一个被预计接近于p的分布,所以这个链已经开始去收敛这个最终的分布p)。
116116* 对比梯度不需要等待链的收敛。样本在k步Gibbs采样后就可以获得。在实际中,k=1时就可以获得惊人的好的效果。
117117
118118
119- #### 持续的对比散度
119+ ### 持续的对比散度
120120
121121持续的对比散度[ Tieleman08] ( http://deeplearning.net/tutorial/references.html#tieleman08 ) 使用了另外一种近似方法来从p(v,h)中采样。它建立在一个拥有持续状态的单马尔可夫链上(例如,不是对每个可视样例都重启链)。对每一次参数更新,我们通过简单的运行这个链k步来获得新的样本。然后保存链的状态以便后续的更新。
122122
123123一般直觉的是,如果参数的更新是足够小相比链的混合率,那么马尔科夫链应该能够“赶上”模型的变化。
124124
125- ### 实现
125+ ## 实现
126126
127127![ RBM_impl] ( /images/7_implementation_1.png )
128128
@@ -426,21 +426,21 @@ class RBM(object):
426426 return monitoring_cost, updates
427427```
428428
429- ### 进展跟踪
429+ ## 进展跟踪
430430
431431RBMs的训练是特别困难的。由于归一化函数Z,我们无法在训练的时候估计对数似然函数log(P(x))。因而我们没有直接可以度量超参数优化与否的方法。
432432
433433而下面的几个选项对用户是有用的。
434434
435- #### 负样本的检查
435+ ### 负样本的检查
436436
437437在训练中获得的负样本是可以可视化的。在训练进程中,我们知道由RBM定义的模型不断逼近真实分布,p_train(x)。负样例就可以视为训练集中的样本。显而易见的,坏的超参数将在这种方式下被丢弃。
438438
439- #### 滤波器的可视化跟踪
439+ ### 滤波器的可视化跟踪
440440
441441由模型训练的滤波器是可以可视化的。我们可以将每个单元的权值以灰度图的方式展示。滤波器应该选出数据中强的特征。对于任意的数据集,这个滤波器都是不确定的。例如,训练MNIST,滤波器就表现的像“stroke”检测器,而训练自然图像的稀疏编码的时候,则像Gabor滤波器。
442442
443- #### 似然估计的替代
443+ ### 似然估计的替代
444444
445445此外,更加容易处理的函数可以被用于做似然估计的替代。当我们使用PCD来训练RBM的时候,可以使用伪似然估计来替代。伪似然估计(Pseudo-likeihood,PL)更加简于计算,因为它假设所有的比特都是相互独立的,因此有:
446446
@@ -449,11 +449,11 @@ RBMs的训练是特别困难的。由于归一化函数Z,我们无法在训练
449449
450450
451451
452- ### 主循环
452+ ## 主循环
453453
454454
455455
456- ### 结果
456+ ## 结果
457457
458458
459459
0 commit comments