能量模型与softmax和RBM以及正态分布的关联
上面一篇文章中探讨了玻尔兹曼分布的起源:
在不清楚目标的真实分布,也不知道样本分布的时候,假设任意输入与输出组合都是同样可能发生的,这样是最公平,最无偏的先验。
因为无法直接统计出给定任意一种输入x,各种y出现的概率,所以把题目转换一下,与其直接求p(y|x),不如假设概率都是由一个能量函数E来决定,之后拟合E(x),同时调查p(y|E)需要满足怎样的形式。
softmax函数中,E是由最后一层特征经过线性变换W·u得来的,因为神经网络的通用拟合性,可以看做能量E(x)实际上可以满足任何函数形式。
上一篇文章对于正则系统的构建可能解释得不是很清楚,而是专注于公式的推导,这里抛去数学推导,重新把逻辑梳理一遍。
使用正则系统(canonical ensemble)对分类问题进行分析:
- 首先在热力学里,一个粒子的状态与能量会一刻不停地发生改变,因为与其他粒子碰撞,可以改变它的状态与能量。这里我们对一条独立数据样本也使用类似的设定,既该样本的(x, y)值其实也在时刻不停地改变,随机x遵循真实分布而非采样分布,并且允许y在不同的候选项之间切换,直到我们采样的时刻,它的(x, y)才被观测到并且确定下来,并且记录到训练集里。实际上就是量子力学里波函数坍塌的过程看做是采样了。
- 假设我们有办法观测一个样本的(x, y),但不进行采样,允许它继续演化。有充足的一段时间让该样本演化让它自己改变(x, y)值,这时我们可以观测它的x值与y值非常非常多次。
- 现在我们在采样之前对这个样本观测了很多次,那么把每次观测到的(x, y)当做一个虚拟样本,这些基于同一个独立样本的虚拟样本集构成一个封闭系统,不依赖于任何其他独立样本。
- 虚拟样本集会尽量覆盖各种(x, y)的排列组合,在一个通用的分类问题框架下,由于不知道真实样本分布,只考虑当前的独立样本,没有其他独立样本的知识,最公平的假设自然是任何(x, y)的排列组合都是同等概率出现的。
- 把每一种y的可能取值看做一个篮子,每个篮子里可能出现不同数量的虚拟样本,因为之前假设每个虚拟样本出现的概率相同,而这些虚拟样本又是观测自同一个独立样本,那么可以认为该独立样本属于不同分类(篮子)的概率正比于这些篮子里的虚拟样本个数。
- 现在将这个独立样本的能量,看做是它所有篮子里虚拟样本的能量的预期值,尽管量子不确定性法则限制了我们不可能在短时间内确定一个粒子的预期能量,但是只要观测时间足够长(观测到的虚拟样本数量足够多),那么我们就可以认为采样得到的样本具有的能量预期是比较平稳的一个数值E。上面才得到了该独立样本属于每种分类的概率分布,这里又得到了该独立样本的能量预期,所以我们可以得到该独立样本在所有分类上的概率 pi(E) ,i循环所有可能的分类。
- 虚拟样本的正式名称叫做微正则系统(microcanonical ensumble),独立样本所拥有的分类概率分布以及能量构成了巨正则系统(macrocanonical ensumble)
以上描述的所有观测、推理流程,都是脑补出的一个虚拟过程,实际操作不可能,因为要观测的次数必须是天文数字,才能统计足够的虚拟样本,算出独立样本的概率分布与能量。所以微正则系统我们无法直接观测与统计,能观测统计的只有巨正则系统。
那么有没有什么方法可以绕过对微正则系统的观测,直接计算巨正则系统呢?
答案是有的,方法是通过以下几个假设:
- 能量守恒,给定固定的观测次数时,封闭系统的总能量=独立样本预期能量 * 观测次数 = 常量
- 概率必须归一化:分类概率 = 该分类篮子内微正则系统个数 / 所有篮子内微正则系统总数
- 每个虚拟样本j拥有能量E(xj),允许虚拟样本从一个篮子“跳槽”到另一个,当然对应的y值也更改,跳槽时连同它的能量一起携带。所以不同篮子之间可以交换能量,以及虚拟样本数量。
- 热力学第二定律成立,封闭系统熵总值不断增大,直到系统处于稳定热平衡状态时系统熵最大化。
因为微正则我们不关心它的x和y的值分别是多少,我们只关心每种y拥有的微正则个数,所以直接建模用Ω代指,并且假设每个篮子里Ωi(Ei)取决于该篮子拥有的能量。
根据上篇文章里提到的熵的几个等价定义,不同篮子之间的温度必然在热平衡时相等,这时系统熵最大化,各个篮子之间交换能量与概率的效率相等,再之后使用separating variable方法算出的概率分布就是玻尔兹曼分布。
数学推导部分主要在上篇文章里完成了,这里就不复述了。
梳理清楚正则系统之后,就可以看出使用能量模型的合理性了。
首先任何类似softmax函数类型的,拥有指数归一化操作的操作,输入都可以看作是能量,产生的都是波尔茨曼分布下的概率。这类构造的另一个明显例子就是RMB,这个会在稍后对比分析。
神经网络经过多层非线性变换之后本应该得到样本在最终坐标系内的坐标值,但是一维坐标值向量(向量长度=分类数量)是无法直接变成概率的。
所以通常会在最后一层特征与一个二维矩阵计算相乘,得到每个分类下的能量(当然也不排除使用其他更复杂的能量计算函数的情况),之后再使用玻尔兹曼分布算出每个分类在当前能量时出现的概率。
波尔茨曼分布的基础就是模拟对每个实际样本构建一个巨正则系统,然后假设一个巨正则系统是由无数无法实际完整观测的微正则系统构成,微正则集合代表了该实际样本所有的理论可能排列组合。
熵最大化翻译成容易理解的解释,就是要让未来可能采样到的样本的不确定性最大化,所有已经采样到的、尚未采样到的(x, y)排列组合数,尽可能增大。
在满足能量和概率守恒的条件,以及尽量公平无偏的条件下,推算出玻尔兹曼分布。
Restricted Boltzmann Machine:
RBM的能量函数形式如下:
\[E(x,h)=-\sum\limits_{i}{{{a}_{i}}{{x}_{i}}}-\sum\limits_{j}{{{b}_{j}}{{h}_{j}}}-\sum\limits_{i,j}{{{w}_{ij}}{{x}_{i}}{{h}_{j}}}\]
它所对应的物理模型是能够描述指南针阵列的能量的ising模型,感兴趣的可以自己搜。
总而言之就是假设存在一个外部场,让输入层x与隐藏层h的取值与外部场之间产生的能量$E(x)=-\sum\limits_{i}{{{a}_{i}}{{x}_{i}}}$与$E(h)=-\sum\limits_{j}{{{b}_{j}}{{h}_{j}}}$尽量低,同时还要考虑到x与h之间相互作用产生的能量$E(x,h)=-\sum\limits_{i}{{{a}_{i}}{{x}_{i}}}-\sum\limits_{j}{{{b}_{j}}{{h}_{j}}}-\sum\limits_{i,j}{{{w}_{ij}}{{x}_{i}}{{h}_{j}}}$。
用指南针的模型来理解的话,就可以把x与h分别考虑成两排指南针,放在一个外部磁场内(可能不规律)。忽略同一排指南针内的相互作用力,只考虑两排指南针之间两两作用力,最终每个指南针都会有一个稳定的指向。
这里我们能观测到的巨正则系统只有输入值x,微正则系统是所有x与h的可能排列组合,同样是天文数字所以没法统计概率。不同x取值的体系之间交换能量与熵,最终在热平衡时,任何两个体系之间的温度既能量与熵之间的汇率趋于一致,这时熵最大化。
对比DNN使用多层非线性感知器来拟合能量函数,RBM的能量函数定义就死板得多,所以把多层RMB叠在一起,构成Deep Belief Network,可以一定程度弥补单层ising模型对能量函数拟合能力的不足。
当然二者追求的目标也不一样,DNN分类关注的是找出boltzmann分布里的概率,而RMB只需要将联合概率最大化,关注的是权重值本身,进而用它来计算h特征值。虽然都是能量函数一棵树上长出来的,一个是花一个是叶,功能不同。
最后让我们用同样的眼光审视一下正态分布$p(x)\propto {{e}^{-k{{(\mu -x)}^{2}}}}$ :
一眼辨认出能量函数部分$E(x)=-k{{(\mu -x)}^{2}}$
这不就是弹性势能嘛,然后对应一个二分类系统,既 y=发生or不发生 两种情况,能量E(x)决定了概率p(y=发生)。
离平均值越远,回弹的力度越大,将x值拉回平均值附近,x与平均值的差距与回弹的力度成正比,使用这样简单粗暴的E(x)建模之后,得到的boltzmann分布就变成了正态分布。
我们知道sigmoid其实就是softmax在二分类情况下的形式,线性回归中能量函数的计算就更加简单粗暴了,直接线性:E=wx,所以LR的能量拟合效果也就可想而知了(笑)。
能量模型与softmax和RBM以及正态分布的关联的更多相关文章
- yii2 AR模型使用exists添加子查询与父查询关联
有A,B两个表对应A_AR,B_AR两个模型B表interval_id对应A表id现在要查a表的数据,且没有code为a的子数据要求使用yii2的AR模型写查询: A_AR::find()->w ...
- 深度学习读书笔记之RBM(限制波尔兹曼机)
深度学习读书笔记之RBM 声明: 1)看到其他博客如@zouxy09都有个声明,老衲也抄袭一下这个东西 2)该博文是整理自网上很大牛和机器学习专家所无私奉献的资料的.具体引用的资料请看参考文献.具体的 ...
- DNN原理探究系列之目录与序章篇
序言: 神经网络结构,作为最成功的机器学习模型之一,其工作原理一直被埋藏得比较深,其解释性以至于被称为黑盒. 自己对于DNN的理解也只能算刚踏入了门槛,对于人脑的原理与DNN原理之间的互通性,一直是非 ...
- Softmax回归——logistic回归模型在多分类问题上的推广
Softmax回归 Contents [hide] 1 简介 2 代价函数 3 Softmax回归模型参数化的特点 4 权重衰减 5 Softmax回归与Logistic 回归的关系 6 Softma ...
- 《动手学深度学习》系列笔记—— 1.2 Softmax回归与分类模型
目录 softmax的基本概念 交叉熵损失函数 模型训练和预测 获取Fashion-MNIST训练集和读取数据 get dataset softmax从零开始的实现 获取训练集数据和测试集数据 模型参 ...
- 从item-base到svd再到rbm,多种Collaborative Filtering(协同过滤算法)从原理到实现
http://blog.csdn.net/dark_scope/article/details/17228643 〇.说明 本文的所有代码均可在 DML 找到,欢迎点星星. 一.引入 推荐系统(主要是 ...
- RBM(受限玻尔兹曼机)和深层信念网络(Deep Brief Network)
目录: 一.RBM 二.Deep Brief Network 三.Deep Autoencoder 一.RBM 1.定义[无监督学习] RBM记住三个要诀:1)两层结构图,可视层和隐藏层:[没输出层] ...
- 前馈网络求导概论(一)·Softmax篇
Softmax是啥? Hopfield网络的能量观点 1982年的Hopfiled网络首次将统计物理学的能量观点引入到神经网络中, 将神经网络的全局最小值求解,近似认为是求解热力学系统的能量最低点(最 ...
- 受限玻尔兹曼机(RBM)
能量模型 RBM用到了能量模型. 简单的概括一下能量模型.假设一个孤立系统(总能量$E$一定,粒子个数$N$一定),温度恒定为1,每个粒子有$m$个可能的状态,每个状态对应一个能量$e_i$.那么,在 ...
随机推荐
- java中对list进行分页显示数据到页面
http://blog.csdn.net/Tang_Mr/article/details/76212184#10006-weixin-1-52626-6b3bffd01fdde4900130bc5a2 ...
- sys模块学习记录
import sys s = sys.argv #命令行参数List,第一个元素是程序本身路径 #sys.exit() #退出程序,正常退出时exit(0) s = sys.version #获取Py ...
- Servlet中response、request乱码问题解决
Java Web(二) Servlet中response.request乱码问题解决 三月不减肥,五月徒伤悲,这就是我现在的状态,哈哈~ 健身.博客坚持. --WH 一.request请求参数出现 ...
- JSON Web Token(缩写 JWT) 目前最流行的跨域认证解决方案
一.跨域认证的问题 互联网服务离不开用户认证.一般流程是下面这样. 1.用户向服务器发送用户名和密码. 2.服务器验证通过后,在当前对话(session)里面保存相关数据,比如用户角色.登录时间等等. ...
- OpenCV4.0学习笔记
1.读取显示图像 #include<opencv2/opencv.hpp> #include<iostream> using namespace cv; using names ...
- 史上最全最详细的环境搭建教程,行百里者手把手教你在windows下搭建Anaconda+pycharm+库文件(TensorFlow,numpy)环境搭建
我是在搭建TensorFlow开发环境的道路上走了很多弯路 掉了很多头发,为了让广大同学们不在受苦受累 下面我将手把手教你学习如特快速搭建python环境 快速导入numpy,PIL,pillow,等 ...
- C语言作业04-数组
1.本章学习总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 通过本章的学习,学会了几种用于循环的语句,能够利用循环解决复杂的问题,但对于几种循环的使用并不熟练,其中对于c ...
- jqgrid点击搜索无法重置参数问题
var searchClick=false;//判断是否是第一次点击搜索 //当搜索按钮被单击时触发 function searchData(){ //创建jqGrid组件 console.log(' ...
- Saving custom fields in production order
In additional data screen 1.PPCO0012->EXIT_SAPLCOKO1_001->ZXCO1U11 ci_aufk-zxxx = i_caufvd ...
- Mybatis 接口代理的实现(BeanDefinitionRegistryPostProcessor+FactoryBean)
相信在开发中,尤其是mybatis 配置操作中,我们只需要提供一个mapper 接口,然后注入到service 中,就可以进行调用. 按我们的一般逻辑来说,我们并没有进行接口的实现,应该会报空指针异常 ...