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

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

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

能量的定义:


 

标定


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

\(P(Y|X)=\frac{e^{-\beta E(Y,X)}}{\int_{y \in \mathbb {Y}} e^{-\beta 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\ne 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}_{\beta}(W,\mathbb{Y},X^i))\)

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

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

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

假设独立,则条件概率:

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

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

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

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

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

\(-log\prod_{i=1}^{P}P(Y^i|X^i,W)=\sum_{i=1}^{P}-log \frac{e^{- \beta E(W,Y^iX^i)}}{\int_{y \in \mathcal{y}}e^{-\beta E(W,Y^i,X^i)}}=\sum_{i=1}{P}\beta E(W,Y^i,X^i)+log\int_{y \in \mathcal{Y}}e^{-\beta 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}{\beta}log\int_{y \in \mathcal{Y}}e^-\beta E(W,y,X^i)).\)

上式对参数W求梯度:

\(\begin{equation}\begin{aligned}  \frac{\partial L_{nll}(W,\mathcal{S})}{\partial W}&=\frac{\partial E(W,Y^i,X^i)}{\partial W}+\frac{1}{\beta}\frac{\partial (\int_{Y \in \mathcal{Y}}e^{-\beta E(W,y,X^i)})/\partial W}{\int_{y \in \mathcal{Y}}e^{-\beta 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^{-\beta E(W,Y,X^i)}}{\int_{Y \in \mathcal{Y}}e^{-\beta E(W,y,X^i}}\)

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

非常有趣的是,当\(\beta \to \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^T\Phi(X)\)

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

\(W^*=argmin_W[\frac{1}{2P}\sum_{i=1}^{P}||W^T\Phi(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_{Y\in \{-1,+1\}}-YG_W(X)=sign(G_W(X))\)

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

对于感知器模型:

\(\begin{equation}\begin{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(\bullet)\)当括号中为0时结果为1,而非0时结果为0。

 

 4.2概率隐藏变量

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

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

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

 边缘化Z:

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

所以最佳的Y值为:

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

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

 

posted @ 2014-04-03 08:39  I know you  阅读(2569)  评论(0编辑  收藏  举报