作者苏建林

单位广州火焰信息技术有限公司

研究方向:自然语言处理、神经网络

个人主页,kexue.fm

对于NLP来说,互信息是一个非常重要的指标,衡量的是两件事情之间的本质关联。作者多次讨论互信息,我也对各种使用互信息的文章感兴趣。前段时间看到最近提出的Deep INFOMAX模型,自然对最大化互信息的无监督学习图像感兴趣。研究了一下,就有了这篇论文。

本文的整体思路来源于Deep INFOMAX的原题,但模型并没有复制原题,而是根据自己的这个思路进行了修改,并会标注在相应的位置。

那么一个好的特征编码器应该使互信息尽可能大,即:

相互信息的意义越大

应该尽可能的大,也就是说p应该比p大很多,也就是说对于每个x,编码器都可以找出哪个z属于x,这样p的概率就比随机p大很多。这样我们就有了只用z来区分原样品的能力。

注:名称为互信息,但为对数项

我们称之为“点互信息”,有时也直接称为互信息。两者的区别如下:整体关系计算,如回答“前后两个词有关系吗”的问题;它计算局部关系,比如回答“tan和te经常一起出现吗?”。

先验分布

如前所述,与自编码器相比,变分自编码器还期望隐藏变量服从标准正态分布的先验分布,这有利于使编码空更加规则,甚至有利于特征的解耦,便于后续学习。所以,我们也希望在这里加上这个约束。

在Deep INFOMAX的论文中,这种约束是通过类AAE思维通过对抗来添加的,但众所周知,对抗是一个最大化和最小化的过程,需要交替训练,不够稳定和简洁。这里还有一个更端到端的思路:设q为标准正态分布,我们将p与先验分布q之间的KL散度最小化。

当我们最大化的时候,可以达到和最大化互信息一样的效果,但是不用担心无穷大。因此,我们将公式替换为以下目标:

当然这并没有改变问题的性质和难度,JS散度还是不算。这是解决问题的最后一步。

征服相互信息

在f-GAN的介绍:GAN模型的研讨会中,我们介绍了f散度的一般局部变分推论,即那篇文章中的公式:

对于JS散度,给定的结果是:

代入p p ,p p ,得到:

你没看错,除了常数项之外,完全等同于深度INFOMAX论文中的公式。我很奇怪为什么论文的作者不使用上面那种美观直观的形式,而要做出一种令人费解的形式。

其实公式的含义很简单,就是“负抽样估计”:引入一个判别网络σ),将x及其对应的z视为正样本对,将随机选取的x和z视为负样本,然后最大化似然函数相当于最小化交叉熵。

这样,通过负采样,我们给出了一个估计JS散度的方案,进而给出了一个估计JS版本互信息的方案,从而成功地克服了互信息。现在,对应于等式,具体损失是:

现在,理论完整了,剩下的就是付诸实践了。

从全球到本地

成批中断

从实验的角度来看,公式是如何操作的。先验分布的KL散度不难,复制VAE就行了。而相互信息呢?

首先我们随机选取一张图片X,然后通过编码器得到Z的均值和方差,再通过重复参数得到zx。这样的一对构成了阳性样本。

阴性样本呢?为了减少计算量,我们直接批量对图片进行随机置乱,然后根据随机置乱顺序选择负样本。也就是说,如果X是原始批次的第四张图片,置乱后的第四张图片是X,那么是正样本,是负样本。

本地互信息

以上的做法其实是考虑了整个画面之间的相关性,但是我们知道画面的相关性更多的体现在局部。换句话说,图片的识别和分类应该是一个从局部到整体的过程。因此,需要考虑“本地互信息”。

通过CNN编码的过程一般是:

我们考虑过x和z的相关性,但是要素图和z的相关性呢?我们记得中间层的特征是{Cij|i=1,2,…,h;J=1,2,…,w}视为一组h×w向量。我们还计算了这些h×w向量与zx之间的互信息,称为“局部互信息”。

估计方法和全局一样。每个Cij和zx拼接得到,相当于一个更大的特征图。然后,使用多个1×1卷积层作为该特征地图的局部互信息估计网络。阴性样本的选择方法也是批量随机方案。

现在,添加本地互信息的总损失是:

其他信息

事实上,还有许多其他信息可以考虑。

比如我们考虑了Cij和Z之间的互信息,也可以考虑Cij之间的互信息,即同一张图片之间的Cij应该是相关的,它们的互信息应该尽可能大,而不同图片之间的Cij应该是不相关的,它们的互信息应该尽可能小。不过我做过实验,这个项目的推广不是特别明显。

还有多尺度信息,可以在输入画面中手动放大,也可以在编码器中引入多尺度结构和注意力结构。这种操作可以引入到无监督学习中,以提高编码质量。

类似单词2vec

其实熟悉NLP中word2vec模型原理的读者应该会觉得:这个word2vec不是图中的吗?

没错,deep INFOMAX在原理和实践上与word2vec大致相同。在word2vec中,也是随机采集阴性样本,然后用鉴别器进行区分的过程。这个过程通常称为“噪声对比度估计”。如前所述,word2vec的噪声对比度估计过程的实际优化目标是互信息。详情请参考“噪声对比估计”的杂谈:曲径之美。

在word2vec中,一个窗口的大小是固定的,然后在窗口中统计单词的共现。而deep INFOMAX呢?因为只有一张图片,没有其他“文字”,它只是简单的把图片分成小块,然后以一张图片为窗口,图片的每一小块就是一个文字。当然,更准确的类比是,deep INFOMAX更像是类似于word2vec的doc2vec模型。

换个角度看,也可以这样理解:引入局部互信息相当于把每个小部分当作一个样本,相当于原来的一个样本变成1+hw样本,大大增加了样本量,所以效果可以提高。

同时这也保证了画面的每个“角”都被使用,因为低维压缩编码,比如32×32×3编码到128维,很可能是左上角的8×8×3 >:128的面积已经可以唯一区分画面,但这不能代表整个画面,所以要想办法使用整个画面。

开源和渲染

参考代码

其实以上模型的实现代码应该说比较简单,比我复制的Glow模型容易几倍。不管用哪个框架,都不难。下面是用Keras实现的一个版本:

https://github.com/bojone/infomax

来吧,放上照片

无监督算法很难定量判断,一般做大量的下游工作就能看到结果。就像在词向量非常流行的时候,如何定量衡量词向量的质量也是一个令人头疼的问题。deep INFOMAX的论文中已经做了很多相关的实验,这里就不赘述了,只看它的KNN效应。

总的来说效果并不理想。我觉得微调后做一个简单的地图搜索问题不大。原论文中的很多实验也有不错的结果,进一步印证了这个想法的威力。

CIFAR-10

每行左边第一张图片是原图,右边九张是最近的图片,使用cos相似度。按欧氏距离排序结果相似。

微型图像网

每行左边第一张图片是原图,右边九张是最近的图片,使用cos相似度。按欧氏距离排序结果相似。

全局vs本地

有必要引入本地互信息。下面比较了仅具有全球互信息的KNN和仅具有本地互信息的KNN之间的差异。

再次到终端

随着无监督学习的成功,在自然语言处理中常见的互信息概念被推广和理论化,然后应用于图像。当然,现在看来,它可以用于NLP,甚至可以用于其他领域,因为它已经被抽象化了,适用性很强。

我很喜欢deep INFOMAX整篇文章的风格:从广义的思路到估计框架再到实际模型,思路清晰,论点完整,是我心目中理想的文章风格。期待看到更多这样的文章。

引用

.通过互信息估计和最大化学习深度表征。ArXiv 1808.06670。

.https://kexue.fm/archives/6016

点击以下标题查看作者的其他文章:

关于纸质周刊

1.《互信息 深度学习中的互信息:无监督提取特征》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《互信息 深度学习中的互信息:无监督提取特征》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/caijing/1669815.html