• EBM读书笔记(A Tutorial on Energy-Based Learning杂记)


    注:本文大部分是A Tutorial on Energy-Based Learning的部分内容翻译,也还有部分自己的理解。因此起名杂记。其中措辞和理解有可能不够严谨。

    在物理学中,能量最低的状态认为是最稳定的,也可以认为是事物本来的状态。那么模式识别可以这样理解:把准则(判别函数)放在一个输入和各个模式上,如果输入在某个模式上的能量最小,就认为输入属于这个模式的可能性最大。判别函数有好有坏,评价的指标就是损失

    能量的定义:


    标定


    对于一些决策任务,只简单的取最低能量的系统参数就可以了,而有的时候一个系统输出需要作为另一个系统的输入,因此能量需要被标定。最简单的方法就是Gibbs 分布:

    (P(Y|X)=frac{e^{-eta E(Y,X)}}{int_{y in mathbb {Y}} e^{-eta E(Y,X)}})

    需要注意的是,上式中的 (  mathbb{Y})应该涵盖各种情况。而且积分必须收敛。

    基于能量的训练过程


    训练过程:为每个X找到最好的Y值,也就是对一个函数集进行操作:

    (  epsilon = { E(W,X,Y):W in mathbb{W}} )

    我们需要一个指标来评价哪个能量函数最合适。这个评价的指标我们叫损失函数:

    (   W^*= min_{W in mathbb{W}}{mathbb{L}(W,S)}   )

    大多数情况下,损失函数这样定义:

    (mathbb{L}(E,S)=frac{1}{P} sum_{i=1}^{P}L(Y^i,E(mathbb{W},mathbb{Y},X^i))+R(W) )

    其中(L(Y^i,E(mathbb{W},mathbb{Y},X^i)))是单样品损失函数,而(R(W))是一个正则化矩阵,可以加入我们的先验知识,比如我们更倾向于哪个能量函数。

    设计一个损失函数


    训练过程必须调整能量面,使需要的Y值比其他的Y值具有更低的能量。如下图是一个离散情况和连续情况的训练说明图:

    图中:(Y^i)表示希望的Y值,(overline{Y}^i)表示最不希望的Y值。

    2.2损失函数的例子

    2.2.1能量损失


    最简单直接的损失函数就是能量损失函数,比如对于单样品损失简单的定义为如下形式:

    ( L_{energy}(y^i,E(W,mathbb{Y},X^i))=E(W,Y^i,X^i). )

    这种损失函数虽然在回归和神经网络训练过程中非常流行,但不能用来训练大部分结构。这个损失函数可以降低目标答案处的能量,不会提升任何其他的能量值,在一些能量为常数0的结构中,会造成崩溃。这个能量损失只有对那些当你降低(E(W,Y^i,X^i))时其他能量弧自动变高的结构有作用。

    2.2.2广义的感知器损失


    对于训练样本((X^i,Y^i))来说,广义的感知器损失被定义为:

    (L_{perceptron}(Y^i,E(W,mathbb{Y},X^i))=E(W,Y^i,X^i)-min_{y in mathbb{Y}}E(W,Y,X^i).)

    这个损失永远为正数,因为第二项是第一项的下界。最小化这个损失既可以降低(E(W,Y^i,X^i)),又可以提高由模型产生的答案的能量值

    它的最大缺点是:没有任何机制可以产生一个对错答案间的能量差。因此如果机制允许,感知器损失会产生一个能量平面。在这种机制里,这种算法无能为力。

    2.2.3能量限度损失


    讨论之前要做如下定义:

    定义1:让(Y)是一个离散的变量,则最让人不爽的错误答案(overline{Y}^i)定义为所有错误答案中的能量最低的:

    (overline{Y}^i=argmin_{Y in mathbb{Y}\, and \,Y e Y^i}(W,Y,X^i))

    如果(Y)是连续的,那么最让人不爽的错误答案的最简单的定义方式如下.

    定义2:(overline{Y}^i=argmin_{Y in mathbb{Y}\, ,\,||Y-Y^i||>epsilon}(W,Y,X^i))

    那么能量限度损失可以定义如下:

    (L_{margin}(W,Y^i,X^i)=Q_{m}(E(W,Y^i,X^i),E(W,overline{Y}^i,X^i)))

    其中,(m)是一个正参量表示margin,而 (Q(e_1,e_2))表示一个凸函数。换句话说,当(E(W,Y^i,X^i)-E(W,overline{Y}^i,X^i)>m)时,损失平面会向(E(W,Y^i,X^i))的低处倾斜,同时也向(E(W,overline{Y}^i,X^i))的高处倾斜。

    下面给出典型例子。

    Hinge损失:被用于支持向量机中的线性参化数能量和二次正则化矩阵的融合

    (L_{hinge}(W,Y^i,X^i)=max(0,m+E(W,Y^i,X^i)-E(W,overline{Y}^i,X^i)))

    他的差是-m。而且Hinge损失只关注能量差,而对于个体的能量取值没有任何约束。

    Log损失:Hinge损失的变体就是Log损失,它可以看做是“软化”的hinge损失,定义如下:

     (L_{log}(W,Y^i,X^i)=log(1+e^{E(W,Y^i,x^i)-E(W,overline{Y}^i,X^i)}))

    还有诸如LVQ2损失和MCE损失等

     负对数似然损失


    负对数似然函数来源于概率建模:

    (L_{nll}(W,Y^i,X^i)=E(W,Y^i,X^i)+mathcal{F}_{eta}(W,mathbb{Y},X^i)))

     其中(mathcal{F})是总体的自由能量:

    ( mathcal{F}_{eta}(W,mathcal{Y},X^i)=frac{1}{eta}log(int_{y in mathcal{Y}}exp(-eta E(W,y,X^i)))

    其中(eta)是一个正常数,代表温度的倒数。上式只有在可积的时候才有用。

    假设独立,则条件概率:

    ( P(Y^1,...,Y^P|X^1,...X^P,W)=prod_{i=1}^{P}P(Y^i|x^i,W))

    根据最大似然估计的原则,我们要找到对应上面概率最大值的W值。

    或者最小化上式的负对数:

    (-logprod_{i=1}^{P}P(Y^i|X^i,W)=sum_{i=1}^{P}-logP(Y^i|X^i,W))

    利用Gibbs分布,我们可以得到:

    (-logprod_{i=1}^{P}P(Y^i|X^i,W)=sum_{i=1}^{P}-log frac{e^{- eta E(W,Y^iX^i)}}{int_{y in mathcal{y}}e^{-eta E(W,Y^i,X^i)}}=sum_{i=1}{P}eta E(W,Y^i,X^i)+logint_{y in mathcal{Y}}e^{-eta E(W,Y^i,X^i)}.)

    上式除以P和(beta)就得到了负对数似然函数的最终形式(这个操作对于最小值是没有影响的):

    (mathcal{L}_{nll}(W,mathcal{S})=frac{1}{P}sum_{i=1}^{P}(E(W,Y^i,X^i)+frac{1}{eta}logint_{y in mathcal{Y}}e^-eta E(W,y,X^i)).)

    上式对参数W求梯度:

    (egin{equation}egin{aligned}  frac{partial L_{nll}(W,mathcal{S})}{partial W}&=frac{partial E(W,Y^i,X^i)}{partial W}+frac{1}{eta}frac{partial (int_{Y in mathcal{Y}}e^{-eta E(W,y,X^i)})/partial W}{int_{y in mathcal{Y}}e^{-eta E(W,y,X^i)}}\&=frac{partial E(W,Y^i,X^i)}{partial W}-int_{Y in mathcal{Y}} frac{partial E(W,Y,X^i}{partial W}P(Y|X^i,W)  end{aligned}  end{equation})

    其中(P(Y|X^i,W))是通过Gibbs分布得到的:

    (P(Y|X^i,W)=frac{e^{-eta E(W,Y,X^i)}}{int_{Y in mathcal{Y}}e^{-eta E(W,y,X^i}})

     对于很多模型来说,计算后面的积分非常困难,如何求解这个积分是研究的主要问题。

    非常有趣的是,当(eta o infty)时(温度趋于0的时候),NLL损失退化为一般感知器损失;而当(mathcal{Y})只有两个元素时(比如二值分类),NLL损失退化为log损失。

    停下来总结下:问题逆推:根据输入X找到相对应的Y值<--寻找一个函数,使得输入X对应的Y值除具有最小值<---评价函数哪个函数需要用到损失的概念(如果采用某个函数,损失越大表示函数越差

    停下来总结下:损失函数又可分为  能量损失、广义感知器损失、能量限度损失和负对数似然损失。

    图C表示了限度损失,他考虑了(Y^i)和(overline{Y}^i)两处的能量,他应该是一个凸函数,并且梯度应该和[1,-1]的点乘具有一个正的点乘。

    3. 简单架构


    为了证实到目前为止讲述的思路。本节将会展示用EBM来进行分类和回归是多么的容易。好的坏的损失函数都会被讨论,随后也会给出改进方案。

    图6:EBM的简单模型(a)一个回归元:能量是回归函数和待预测值的差值。(b)一个简单的两类分类器:可能的答案为({-1,+1}),最好的推理是(Y^*=sign(G_W(X)).(c)一个多类的分类器:判别函数为每一个类产生一个值。答案可以控制“位置开关”,决定着判别函数的哪个输出可以连接到能量函数。最好的推理是(G_W(X))的最小输出。

    3.1回归

    本节思路:(回归函数G_W(X) mapsto 能量函数 E(W,Y,X) mapsto 损失函数 mathcal{L} mapsto W的最佳值就是损失函数最小值时对应的W值)

    图6(a)展示了一个最简单的回归模型。能量函数是回归函数输出和带预测值之间的方差:

    (E(W,Y,X)=frac{1}{2}||G_W(X)-Y||^2)

    问题是:最小的能量经常等于0.当使用这个模型时,能量损失,感知器损失和负自然对数模型全部相等,因为感知器损失的对比模块式0,对于NLL损失来说就是一个常数(它是一个常量的高斯积分):

    (mathcal{L}_{energy}(W,mathcal{S})=frac{1}{P}sum_{i=1}^{P}E(W,Y^i,X^i)=frac{1}{2P}sum_{i=1}^{P}||G_W(X^i)-Y^i||^2)

    这个相当于一个均方差的标准回归。

    当(G)是参数的线性函数时,很流行下面的回归形式:

    (G_W(X)=sum_{k=1}^{N}w_k phi_k(X)=W^TPhi(X))

    (Phi_k(X))是N个特征的集合,(w_k)是N维参数向量的(W)的一部分。像这样参数化之后,能量损失的训练就简化为一个简单的可解的最小二乘最小化问题,而且是凸形的。

    (W^*=argmin_W[frac{1}{2P}sum_{i=1}^{P}||W^TPhi(X^i)-Y^i||^2])

    在简单的模型里,特征函数是设计者手工制作的,或者是从未标签的数据中分离的训练得来的。在核心方法的相双重形式里,它们被定义为(phi_k(X)=K(X,X^k),k=1...P),其中K表示核心函数。在像多层神经网络等更复杂的模型里,(phi)会参数化并进行训练,回归函数不再是线性函数,因此,损失函数将不再是凸函数。

    3.2两类分类器

    基本思路和之前一样:(回归函数G_W(X) mapsto 能量函数 E(W,Y,X) mapsto 损失函数 mathcal{L} mapsto W的最佳值就是损失函数最小值时对应的W值)

    图6(b)展示了一个简单的两类分类器。被预测的变量是一个二元的:(mathcal{Y}={-1,+1}),能量函数被定义为如下:

    (E(W,Y,X)=-YG_W(X))

    其中,(G_W(X))是一个 被W参数化的标量判别函数。推理很简单:

    (Y^*=argmin_{Yin {-1,+1}}-YG_W(X)=sign(G_W(X)))

    训练过程可以通过各种不同的损失函数来完成,包括感知器损失,Hinge损失,和负对数似然损失。

    对于感知器模型:

    (egin{equation}egin{aligned}mathcal{L}_{perceptron}(W,mathcal{S})&=frac{1}{P}sum_{i=1}^{P}(Y^*-Y^i)G_W(X)\&=frac{1}{P}sum_{i=1}^{P}(sign(G_W(X)-Y^i)G_W(X)end{aligned}end{equation})

     4.潜藏变量的结构

     有些时候我们需要利用利用隐藏变量来进行预测。比如人脸识别过程中,人脸的尺度和姿势是不可用的。对于这些问题,推理过程除了X和Y还要加入隐藏的Z.

    (E(Y,X)=min_{Z in mathcal{Z}}E(Z,Y,X))

    在某些场景中,模型的某些特征能够被观察但很难被预测,这个时候隐藏变量就能起到大作用。一个例子就是识别问题。例如,人脸识别中人的性别和人脸的方向,如果知道这些信息,识别将会更容易。类似的,在识别不变物体的时候,物体的姿态和光照都可以看做隐藏变量。而在某些问题中,连续数据的分割必须和识别同步进行,这时候隐藏变量就非常关键。语音识别就是非常好的例子。在语音识别中,句子划分为单词,单词划分为发音的过程 必须和识别同步进行。类似的还有手写字体的识别。

    4.1一个隐藏变量结构的例子

    为了描述隐藏变量的概念,我们考虑人脸探测的例子。开始我们只解决简单问题:判断画面中是否有人脸。假设我们有一个人脸探测函数(G_{face}(X)),它把一个小图像窗口作为输入,输出一个标量。当人脸充满输入图像内的时候,它输出一个小的值,否则大值。一个基于能量的人脸探测器如图8所示。变量y控制着二元开关的位置(1=有脸,0=没脸)。输出的能量当y=1的时候等于(G_{face}(X))当Y=0时等于一个固定的阈值T:

    (E(Y,X)=YG_{face}(X)+(1-Y)T)

    当最小化这个能量函数时,如果(G_{face}(X)<T),Y就会变成1;否则就是0。

    再复杂一些,让我们判断一副图像里面人脸的位置,把图像分成好多小图,求出最小的能量值的位置即可。能量函数能写成下满的形式:

    (E(Z,Y,X)=Y[sum_{k-1}^{K}delta(Z-k)G_{face}(X_k)]+(1-Y)T)

    其中(X_k)是图形窗口,改变Y,Z最小化上式的值就可以得到得分最佳的位置。此时的Y值代表是否有人脸,而Z值表示了在什么位置。(delta(ullet))当括号中为0时结果为1,而非0时结果为0。

     4.2概率隐藏变量

    当隐藏变量的最佳值模糊不清时,很多人可能会想到通过边缘化隐藏变量的方式来求解,而不是最小化这些变量。

    当给出隐藏变量之后,通过Gibbs分布得出Y和Z的联合条件概率分布为:

    (P(Z,Y|X)=frac{e^{-eta E(Z,Y,X)}}{int_{y in mathcal{Y},z in mathcal{Z}}e^{-eta E(y,z,X}})

     边缘化Z:

    (P(Y|X)=frac{int_{z in mathcal{Z}}e^{-eta E(Z,Y,X)}}{int_{y in mathcal{Y},zin mathcal{Z}}e^{-eta E(y,z,X)}})

    所以最佳的Y值为:

    (Y^*=argmin_{Y in mathcal{Y}}-frac{1}{beta}logint_{z in mathcal{z}}e^{-eta E(z,Y,X)})

    实际上就是一个传统的基于能量的推断,只不过把能量函数从(E(Z,Y,X))变为了(mathcal{F}(mathcal{Z})=-frac{1}{eta}logint_{zinmathcal{Z}}e^{-eta E(z,Y,X)}),实际上也就是集合({E(z,Y,X},zin Z})的自由能量。当(eta o infty)时(也就是温度为0时)就退化为前者。

  • 相关阅读:
    Git: git tag 使用小结(给发布版本打标记,切换并修改某个历史版本)
    android: Android水波纹点击效果
    Flutter: 运行新项目报错
    FFmpeg编译:mac下编译iOS平台的FFmpeg库(支持armv7, arm64, i386, x86_64)
    Xcode: Xcode中Command Line Tools的安装方法
    win10: windows+E 改回打开我的电脑
    DialogFragment: DialogFragment的一些理解
    Android Studio: 查看SDK源代码
    HandlerThread: HandlerThread的理解
    Looper: Looper,Handler,MessageQueue三者之间的联系
  • 原文地址:https://www.cnblogs.com/Iknowyou/p/3642118.html
Copyright © 2020-2023  润新知