zoukankan      html  css  js  c++  java
  • 能量模型与softmax和RBM以及正态分布的关联

    上面一篇文章中探讨了玻尔兹曼分布的起源:

    在不清楚目标的真实分布,也不知道样本分布的时候,假设任意输入与输出组合都是同样可能发生的,这样是最公平,最无偏的先验。

    因为无法直接统计出给定任意一种输入x,各种y出现的概率,所以把题目转换一下,与其直接求p(y|x),不如假设概率都是由一个能量函数E来决定,之后拟合E(x),同时调查p(y|E)需要满足怎样的形式。

     softmax函数中,E是由最后一层特征经过线性变换W·u得来的,因为神经网络的通用拟合性,可以看做能量E(x)实际上可以满足任何函数形式。

    上一篇文章对于正则系统的构建可能解释得不是很清楚,而是专注于公式的推导,这里抛去数学推导,重新把逻辑梳理一遍。

    使用正则系统(canonical ensemble)对分类问题进行分析:

    1. 首先在热力学里,一个粒子的状态与能量会一刻不停地发生改变,因为与其他粒子碰撞,可以改变它的状态与能量。这里我们对一条独立数据样本也使用类似的设定,既该样本的(x, y)值其实也在时刻不停地改变,随机x遵循真实分布而非采样分布,并且允许y在不同的候选项之间切换,直到我们采样的时刻,它的(x, y)才被观测到并且确定下来,并且记录到训练集里。实际上就是量子力学里波函数坍塌的过程看做是采样了。
    2. 假设我们有办法观测一个样本的(x, y),但不进行采样,允许它继续演化。有充足的一段时间让该样本演化让它自己改变(x, y)值,这时我们可以观测它的x值与y值非常非常多次。
    3. 现在我们在采样之前对这个样本观测了很多次,那么把每次观测到的(x, y)当做一个虚拟样本,这些基于同一个独立样本的虚拟样本集构成一个封闭系统,不依赖于任何其他独立样本。
    4. 虚拟样本集会尽量覆盖各种(x, y)的排列组合,在一个通用的分类问题框架下,由于不知道真实样本分布,只考虑当前的独立样本,没有其他独立样本的知识,最公平的假设自然是任何(x, y)的排列组合都是同等概率出现的。
    5. 把每一种y的可能取值看做一个篮子,每个篮子里可能出现不同数量的虚拟样本,因为之前假设每个虚拟样本出现的概率相同,而这些虚拟样本又是观测自同一个独立样本,那么可以认为该独立样本属于不同分类(篮子)的概率正比于这些篮子里的虚拟样本个数。
    6. 现在将这个独立样本的能量,看做是它所有篮子里虚拟样本的能量的预期值,尽管量子不确定性法则限制了我们不可能在短时间内确定一个粒子的预期能量,但是只要观测时间足够长(观测到的虚拟样本数量足够多),那么我们就可以认为采样得到的样本具有的能量预期是比较平稳的一个数值E。上面才得到了该独立样本属于每种分类的概率分布,这里又得到了该独立样本的能量预期,所以我们可以得到该独立样本在所有分类上的概率 pi(E) ,i循环所有可能的分类。
    7. 虚拟样本的正式名称叫做微正则系统(microcanonical ensumble),独立样本所拥有的分类概率分布以及能量构成了巨正则系统(macrocanonical ensumble)

    以上描述的所有观测、推理流程,都是脑补出的一个虚拟过程,实际操作不可能,因为要观测的次数必须是天文数字,才能统计足够的虚拟样本,算出独立样本的概率分布与能量。所以微正则系统我们无法直接观测与统计,能观测统计的只有巨正则系统。

    那么有没有什么方法可以绕过对微正则系统的观测,直接计算巨正则系统呢?

    答案是有的,方法是通过以下几个假设:

    1. 能量守恒,给定固定的观测次数时,封闭系统的总能量=独立样本预期能量 * 观测次数  = 常量
    2. 概率必须归一化:分类概率 = 该分类篮子内微正则系统个数 / 所有篮子内微正则系统总数
    3. 每个虚拟样本j拥有能量E(xj),允许虚拟样本从一个篮子“跳槽”到另一个,当然对应的y值也更改,跳槽时连同它的能量一起携带。所以不同篮子之间可以交换能量,以及虚拟样本数量。
    4. 热力学第二定律成立,封闭系统熵总值不断增大,直到系统处于稳定热平衡状态时系统熵最大化。

    因为微正则我们不关心它的x和y的值分别是多少,我们只关心每种y拥有的微正则个数,所以直接建模用Ω代指,并且假设每个篮子里Ωi(Ei)取决于该篮子拥有的能量。

    根据上篇文章里提到的熵的几个等价定义,不同篮子之间的温度必然在热平衡时相等,这时系统熵最大化,各个篮子之间交换能量与概率的效率相等,再之后使用separating variable方法算出的概率分布就是玻尔兹曼分布。

    数学推导部分主要在上篇文章里完成了,这里就不复述了。

     

    梳理清楚正则系统之后,就可以看出使用能量模型的合理性了。

    首先任何类似softmax函数类型的,拥有指数归一化操作的操作,输入都可以看作是能量,产生的都是波尔茨曼分布下的概率。这类构造的另一个明显例子就是RMB,这个会在稍后对比分析。

    神经网络经过多层非线性变换之后本应该得到样本在最终坐标系内的坐标值,但是一维坐标值向量(向量长度=分类数量)是无法直接变成概率的。

    所以通常会在最后一层特征与一个二维矩阵计算相乘,得到每个分类下的能量(当然也不排除使用其他更复杂的能量计算函数的情况),之后再使用玻尔兹曼分布算出每个分类在当前能量时出现的概率。

    波尔茨曼分布的基础就是模拟对每个实际样本构建一个巨正则系统,然后假设一个巨正则系统是由无数无法实际完整观测的微正则系统构成,微正则集合代表了该实际样本所有的理论可能排列组合。

    熵最大化翻译成容易理解的解释,就是要让未来可能采样到的样本的不确定性最大化,所有已经采样到的、尚未采样到的(x, y)排列组合数,尽可能增大。

    在满足能量和概率守恒的条件,以及尽量公平无偏的条件下,推算出玻尔兹曼分布。

    Restricted Boltzmann Machine:

     RBM的能量函数形式如下:

    [E(x,h)=-sumlimits_{i}{{{a}_{i}}{{x}_{i}}}-sumlimits_{j}{{{b}_{j}}{{h}_{j}}}-sumlimits_{i,j}{{{w}_{ij}}{{x}_{i}}{{h}_{j}}}]

    它所对应的物理模型是能够描述指南针阵列的能量的ising模型,感兴趣的可以自己搜。

    总而言之就是假设存在一个外部场,让输入层x与隐藏层h的取值与外部场之间产生的能量$E(x)=-sumlimits_{i}{{{a}_{i}}{{x}_{i}}}$与$E(h)=-sumlimits_{j}{{{b}_{j}}{{h}_{j}}}$尽量低,同时还要考虑到x与h之间相互作用产生的能量$E(x,h)=-sumlimits_{i}{{{a}_{i}}{{x}_{i}}}-sumlimits_{j}{{{b}_{j}}{{h}_{j}}}-sumlimits_{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的能量拟合效果也就可想而知了(笑)。

  • 相关阅读:
    codeforces 466D
    codeforces 360B
    codeforces 383D
    codeforces 679B
    codeforces 571B
    codeforces 494B
    CodeForces 660D Number of Parallelograms(n个点所能组成的最多平行四边形数量)
    算法竞赛模板 最短路
    算法竞赛模板 string中substr函数的运用
    HDOJ 1269 迷宫城堡(tarjan模板题)
  • 原文地址:https://www.cnblogs.com/ws12345/p/7913943.html
Copyright © 2011-2022 走看看