FCN(4)——Mean Field Variational Inference

本文收录在无痛的机器学习第一季


上一篇我们介绍了DenseCRF的形式,我们已经了解了denseCRF,下面我们花一点时间了解下denseCRF的求解方式——Mean Field Variational Inference

Variational Inference入坑

前面我们在介绍Variational autoencoder的时候刚刚提到过这种求解复杂模型的方法,不过在VAE那里我们只是借着它的坑做了一个简单的展开,而且VAE的计算和Variational Inference的关系并不算特别密切。而这一次我们就要用心了,因为——

上面的pairwise特征确实有点多……

另外,在前面一篇文章中我们说过,对于无向图模型,我们要先求出模型整体的联合变量,才能再做其他的打算。也就是说我们要同时把所有的像素的类别解出来,这个解空间实在有点大,如果我们想用暴力的方法求解,恐怕要吃苦头——比方说MCMC。

于是我们这里采用Mean field variational approximation的方法求解。那么什么是Mean field呢?其实我对这个高深的物理理论也不是特别了解(说实话,我读的本科专业没有大学物理课,所以物理水平基本停留在高中水平,勿喷……),但是我们可以用一个稍微形象的方式来理解。

通过前面的学习,我们知道无向图模型中的一些类似概率的表示可以用factor或者feature表示。由于我们每一对像素之间都有一条边相连,如果我们把每一条边用一个factor表示出来,那么这张无向图上就会布满factor。我们假设一个像素的energy发生了变化,那么所有与它相连的像素点——当然就是剩下的所有像素点都有可能随着这个像素点发生变化。

于是乎,可怕的蝴蝶效应就开始了。所有的像素点中,可能有些像素点的energy伴随着发生了变化,那么所有连着它们的像素点——抱歉,这回又是所有像素点,会跟着它们继续发生变动,于是这个过程会持续不断地进行,直到它们都玩累了,玩不动了,enregy保持不变了,这个游戏才算结束。

下面这个问题就抛给我们了——我们建立的模型具有非常强大的建模能力,但是也具有如此有尿性的能量传播特性,如果让我们自己去把这些energy传导的过程模拟出来,感觉是要死人的……没错是要死人的……

我们可以把所有的连接两个像素点的factor想象成一根弹簧,把像素点想象成可以有一定限度位移的小球。当有一个小球稍微动了一下,所有连着它的弹簧会发生震动,那么弹簧另一边的小球也会跟着动,于是顺着弹簧,所有球都被传导起来,大家一起动起来……好吧,我是希望用一个更容易想象出来、有画面感的例子让大家感受一下这个复杂模型的恐怖性。

下面我们就要祭出我们的Mean field大招了。我们的Mean field approximation帮助我们把这个问题进行了简化,问题变成了这个样子——

我们要将每一个小球受到别的小球的弹簧力一次性计算完。

这话说得实在有些抽象,我们用更加详细的语言表达一下。我们刚才描述了那个混乱的力传导的场景,下面由上帝出马来调节这些力,上帝喊口号,所有小球听从指挥,准备!

第一步,小球如果你想动,你就动一下。注意!你的动作先别传递到弹簧上,上帝我这有一个小本本,我先记下来,一会儿我会按本子上记录的计量用我的魔法施加到这些弹簧上的。放心,你的力会原封不动的送上去,不会打折扣的。

第二步,上帝施展分解大法,把整个模型拆解开来,有多少个小球就有多少个子模型。在每一个子模型里,只有一个小球是主角,所有和这个小球相连的弹簧可以保留,所有和这个小球无关的弹簧全部被上帝拆掉。


第三步,上帝拿出刚才的小本本,把每个球的力施加到每一个子模型的弹簧上。听上去好像要做的工作很多,不过谁让他是上帝呢,能者多劳嘛。

第四步,不用说这个时候,每个子模型的主角——那个集万千弹簧于一身的小球受到了成吨的力,OK,尽情地享受弹簧传来的力道吧!

第五步,这些主角在享受完弹簧传来的力道,心想来而不往非礼也,我也得传点力回去啊,于是准备扭扭屁股动动身子传点力回去的。这时候上帝突然出现,放出大招,这些主角竟然无法把自己受到的力传回去。说好的雨露均沾呢,我得把力传回去啊,上帝你不能管得太多啊。不过上帝知道,在它们的另一个平行世界——也就是别的子模型中,自己最初移动产生的力也已经传递给别的“主角”了。

第六步,上帝施展大法,将所有的子模型合成原来的模型。这样我们的一次力的传递过程就结束了。不过瘾,还想再来一波?好,那我们回到第一步……

我们花了这么多笔墨,将这个过程大概讲了一遍,如果回来在看前面那句话——

我们要将每一个小球受到别的小球的弹簧力一次性计算完。

没错,每一次每个小球给别的小球传的力一次性传完,别的小球的力也一次性接受完。那些二次传导的事情再我们的Mean Field中就没有了。大家瞬间感到了一丝轻松,听上去这个模型有解出来的希望了啊。

好了,那么Variational Inference的目标,就是用这个简化后的这个模型尽可能地靠近原来那个复杂的模型。如果两个模型能完全一样,那就太好了,我们有简单的模型来手,还要复杂的模型干啥?赶紧扔了。

那么下面的目标就是定义一个目标函数,目标是让这个简单模型和复杂模型靠近。前面我们在介绍VAE的时候曾经提到过——没错,就是KL散度。下面我们同样用KL散度来表示这个目标函数。

时间不早了,下一回我们来看看这个算法的真面目。

广告时间

更多精彩尽在《深度学习轻松学:核心算法与视觉实践》

编辑于 2017-11-22 12:54