注:本文大部分是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时)就退化为前者。