深度学习之DBN(一)
来源:互联网 发布:小米6陶瓷版 知乎 编辑:程序博客网 时间:2024/06/05 02:45
第一篇博客,想直入主题的,直接从第四段开始。想长期关注此博客。烦请过一下下面的两段
最近深度学习很火,个人也在学。但是学了之后总是将各种理解体会忘记了。幸好以前在学习深度学习的时候保存了不少笔记。写下博客为自己的学习做一个记录和总结。方便和大家交流和自己查阅。
接触的第一个深度学习理论应该是DBN了吧,看了吴恩达和网上的各种大牛的独到讲解。我将自己的一些小简介说一下啊吧!第一篇博客,难免有不足,希望大家指出。一般来说。我每讲一个算法都会深究一下数学原理还有代码实现。有资源会和大家共享,一些公式的推到比较习惯用纸写。然后拍照上传。言归正传。
话说DBN(深度置信网络),首先就得说一下物理当中的统计热力学的能量模型。这里关于能量模型的介绍转载一下whiteinblue《深度学习 读书笔记之RBM》当中的一段话:
能量模型是个什么样的东西呢?直观上的理解就是,把一个表面粗糙又不太圆的小球,放到一个表面也比较粗糙的碗里,就随便往里面一扔,看看小球停在碗的哪个地方。一般来说停在碗底的可能性比较大,停在靠近碗底的其他地方也可能,甚至运气好还会停在碗口附近(这个碗是比较浅的一个碗);能量模型把小球停在哪个地方定义为一种状态,每种状态都对应着一个能量,这个能量由能量函数来定义,小球处在某种状态的概率(如停在碗底的概率跟停在碗口的概率当然不一样)可以通过这种状态下小球具有的能量来定义(换个说法,如小球停在了碗口附近,这是一种状态,这个状态对应着一个能量E,而发生“小球停在碗口附近”这种状态的概率p,可以用E来表示,表示成p=f(E),其中f是能量函数),这就是我认为的能量模型。
好了,有了能量模型的一个简单明了的了解,接下来为大家介绍一下能量函数。能量函数是从玻尔兹曼分布中来的,所以首先简单介绍一下玻尔兹曼分布,具体介绍参见维基百科。
首先拉出玻尔兹曼分布当中的能量概率分布公式来,这个公式也是从维基百科当中弄过来的。如下:
这个公式描绘了处于各个状态的系统能量分布,其中Ni 是平衡温度T 时,处于状态i 的粒子数目,具有能量Ei 和简并度gi,N 是系统中的总粒子数目,k 是玻尔兹曼常数。(注意有时在上面的方程中不写出简并度gi。在这个情况下,指标i 将指定了一个单态,而不是具有相同能量Ei 的gi 的多重态。)
接下来在引入分子热力学的一段话,这个是从博主转载过来的 ,这个博主也是大神,写得文章字字珠玑。关于DBN写得很不错。
分子在高温中运动剧烈,能够克服局部约束(分子之间的一些物理约束,比如键值吸引力等),在逐步降到低温时,分子最终会排列出有规律的结构,此时也是低能量状态。受此启发,早期的模拟退火算法就是在高温中试图跳出局部最小。随机场作为物理模型之一,也引入了此方法。
大家在看到上面的这段话的时候,有一句话很重要。逐步降到低温时,分子最终会排列出有规律的结构,此时也是低能量状态。这个意思也就是说。低温状态是比较整个系统比较稳定的状态。是众多状态出现概率比较高的状态。如果放在机器学习的目标函数当中引用过来的话。能量最低的状态就是目标函数的极值。
但是如果要这样认为,还要印证一下此时真的是上面能量分布概率公式真的是否存在一个极值。如果存在这个极值,那么这个时候极值附近又有什么样的性质。我们怎么将这个想法迁移到神经网络当中。并进行求解,追究数学公式的原因就是,只要数学形式一样,后面的想法自然成立。只不过这个数学表达式或者说是思想只是从统计热力学当中迁移到了深度学习当中的DBN当中。为此,在维基百科能量均分定理当中找到了这样的一个图:
上面的这个图是速率分布图,纵坐标代表的是概率密度,横坐标代表的是各种速率,也就是各种状态,但是如果熟悉大学物理统计热力学的都应该知道。和能量概率模型图差不多。这个图形状和上面公式的图的形状很想象。所以看出,函数的确存在极值,并且在极值上导数是0,导数意味着此时状态变化率不大。
好了,上面讲的是DBN的物理意义还有数学原理,这样的话我们就可以讲注意力转移到深度学习上的DBN的 RBM上来了。不过,在此之前,还要啰嗦一下。RBM的一些其他的意义:首先是看到某大牛csdn上的一段话,当时对这段话有点感觉,看了好久,由于水平有限,无法领悟作者所在的这个层次说的这段话。
统计模式识别主要工作之一就是捕获变量之间的相关性,同样能量模型也要捕获变量之间的相关性,变量之间的相关程度决定了能量的高低。把变量的相关关系用图表示出来,并引入概率测度方式就够成了概率图模型的能量模型,其实实际中也可以不用概率表示,比如立体匹配中直接用两个像素点的像素差作为能量,所有像素对之间的能量和最小时的配置即为目标解。RBM作为一种概率图模型,引入概率就是为了方便采样,因为在CD(contrastive divergence)算法中采样部分扮演着模拟求解梯度的角色。
其实这段话说的是下面将要引入的RBM一个迁移的理由,写得字字珠玑,各位自行领悟吧!
不罗嗦,接下来为介绍一下RBM的网络结构还有能量函数
首先是RBM的网络结构,直接上盗的图:
其中v表示实际样本节点,以下叫可视节点,h表示隐藏节点数据,theta={W,b,a},W表示网络权重,b表示可视节点偏移,a表示隐藏节点偏移。这些参数是需要我们求解的,一般开始时我们随机初始化这些参数。
接下来引入能量函数,RBM能量函数如下,也是盗图:
个人的简介,分析一下这个函数,首先等式右边第一项有点类似于能量的“互能量”的概念,放在神经网络当中,这个就是神经网络的Hebbian theory。从网络的观点看,这一点是十分重要的,因为正是这一项代表了可视层和隐藏层之间的连接关系。另外两项之间就是各个节点各自的能量,有点类似于重力势能。这个是很有趣的一个现象。如果我们放在物理当中的分子能量当中去看的话,第一项代表了可以看做分子之间的引力势能,后面的两项的可以看做分子的重力势能 。从这点可以看出这个函数定义很有意义,也很有道理。发现了学科之间的迁移了有木有,有种大道值简的赶脚啊。
其实关于能量函数的看法,还可以从专家乘积系统这个角度的解读来看这个问题。
专家乘积系统主要是为了用简单的混合模型来逼近复杂的高维度模型。但是同时用简单的混合模型有着来逼近复杂的高维度模型有两种方法,一种是概率模型,这种模型本质是"加法和概率"的思想相结合的一种模型.比较典型的模型就是混合高斯模型,当时这种模型有缺陷,表现在高维度的时候,每个单个模型都要fine tune高维度的数据,但是每个个模型的表达能力是有限的(low-resolution).但是也有其他的方法,借鉴乘法的的独立的想法,这样每个专家只需要逼近高维度的一部分维度就行了。当然这些维度之间最好是相互独立的(事实上也是这样的,在RBM当中每一层都是不相互连接的)。这样的话用乘法才能起到比较好的效果。也许在进行数据预处理和特征选择的时候可以用FA和特殊的特征选择方法进行选择。关于专家乘积系统,写了一篇相关的论文。
然后专家乘积系统怎样和能量函数扯上关系的呢,这位大牛当中的一句话:不错 !
能量函数的意义是有一个解释的,叫做专家乘积系统(POE,product of expert),这个理论也是hinton发明的,他把每个隐藏节点看做一个“专家”,每个“专家”都能对可视节点的状态分布产生影响,可能单个“专家”对可视节点的状态分布不够强,但是所有的“专家”的观察结果连乘起来就够强了。具体我也看不太懂,各位有兴趣看hinton的论文吧,中文的也有,叫《专家乘积系统的原理及应用,孙征,李宁》。
这样介绍完了能量函数在物理和专家乘积系统中的概念之后,接下来就是推到数学公式了。
将上面讲的能量函数类比下面这个公式
就可以得到关于RBM状态的概率模型:
这个状态的概率是由能量函数定义的
现在我们相当于的到了一个概率分布,分母是进行归一化的。其实这个概率分布是可以叫做Gibbs分布,当然不是一个标准的Gibbs分布,而是一个特殊的Gibbs分布,这个分布是有一组参数的,就是能量函数的那几个参数w,b,c。关于Gibbs分布,这里有一篇博客。
- 深度学习之DBN(一)
- 深度学习---DBN overview
- 深度学习论文阅读笔记(三)之深度信念网络DBN
- 机器学习之DBN(Deep Belief Network,深度信念网络)
- [深度学习]RBM及DBN
- 系统学习深度学习(三) --RBM及DBN
- 机器学习:深度信念网络(DBN)原理和实现
- 深度学习DBN深度置信网络
- 深度信念网络(DBN)
- 深度信念网络(DBN)
- 深度信念网络(DBN)
- 深度信念网络(DBN)
- 深度信念网络(DBN)
- 深度信念网络(DBN)
- [深度学习]Hinton DBN code 代码分析
- [深度学习]Hinton DBN code 代码分析
- 深度学习-深度信念(置信)网络(DBN)-从原理到实现(DeepLearnToolBox)
- 深度学习-深度信念(置信)网络(DBN)-从原理到实现(DeepLearnToolBox)
- crontab设置脚本环境变量
- poj 1741 点分治论文题
- c#单例模式的简单学习
- 啥?
- 通过MathJax在页面上显示微积分等数学公式
- 深度学习之DBN(一)
- IntelliJ IDEA常用设置/操作
- Div的换行样式
- pca 特征抽取
- HDU 4418 Time travel(高斯消元+概率DP)
- logback logback.xml 常用配置详解
- CodeVS4096 点的最小化距离
- servlet&jsp的设计模式
- js中使用正则表达式(一)创建正则表达式的方式:正则对象方式和正则字面量方式