zoukankan      html  css  js  c++  java
  • 详解信息瓶颈理论中的信息压缩

    讲述信息瓶颈理论的核心:信息压缩 之前,需要熟悉交互信息与泛化误差两个概念,不熟悉的建议回顾一下之前的文章

    从信息论的角度分析DNN的工作原理 以及 信息在DNN马尔科夫链结构上的变化

    信息压缩主要是指在DNN的训练过程中,会在全部特征层,或是一部分特征层,尤其是靠近输出端的特征层上,在训练大部分后期I(T;Y)提升缓慢的阶段时,可能发生的I(X;T)减少的现象。

    信息压缩为什么会存在?最简单的解释如下:

    考虑一个对一批28x28像素的二值化图片进行4分类,描述输入变量需要的bit数H(X)=784,描述输出需要的bit数H(Y)=ln(4)=2,这里说的输出是指softmax输出之后argmax得到的4种可能one hot。

    面对784下降到2,存在782个bit的压缩。当然这只是简化之后的二值化结果,真实一般是256值三通道,结果就算是softmax输出离散化不经过argmax,也可以看出从X转化到Y,需要舍弃很多信息。

    再通俗点讲,比如对猫狗猪羊四种动物分类,就可以舍弃所有背景的信息,也可以舍弃“具有四条腿”这个信息。这些信息对于最终结果并没有影响,他们可能被包含在浅层的交互信息I(X;T)里,但是会在训练过程中在某一层开始被遗忘。而是否有胡须、是否有毛绒材质这类的信息,就明显会被包含在输入与目标的交互信息I(X;Y)里,因为他们对分类结果会产生影响。而我们训练到收敛之后得到的I(Y;$hat{mathrm{Y}}$)希望包含了尽可能多的这样对分类起决定因素的信息,同时尽量不包含其他不重要的信息。信息压缩也有利于减少泛化误差避免过拟合,如果特征层描述了太多猫的细节,而如果这10个细节对于某只不太一样的狗有8个是吻合的,而关键决定性因素恰好是另外两个细节,那么就无法突出这只狗与猫不同的地方,容易导致过拟合。这只是个概念描述,数学论证下面会展示。

    那么DNN是怎样控制训练过程来完成信息压缩的呢?

    有两种机制,一是通过网络结构,比如每层神经元个数、dropout的使用、特征值离散化(argmax)、max pooling、非线性激活函数,等等技巧,降低特征层可以承载的信息量上限。另一方面从神经网络拟合任意函数的角度考虑,在进行坐标变换时,任意不可逆操作或是降维,都必然导致信息损失,比如PCA的原理就是一个很好的例子。

    二是训练时使用SGD引入噪音,让噪音的熵来帮助压缩I(T;X)。这一点的压缩效果受到了一些人的质疑,取而代之的压缩原理是tanh激活函数带来的梯度消失,但理论上SGD是能够压缩信息的。实质上无论SGD的噪音还是tanh的梯度消失,都是在降低信噪比。

    首先来详细分析一下网络结构信息压缩:

    从左到右三张图依次代表输入层X、隐藏层T以及最终输出层$hat{mathrm{Y}}$的信息量覆盖图。

    以前面的二值化图片4分类为例子:

    • 左图输入层代表一张28x28的二值化输入图片的信息量。灰色面积代表所有2784种可能的图片输入包含的信息量,其中只有一部分像素取值排列组合包含了真正有意义的信息(是否有胡须、毛发之类的),其他的像素排列组合都是无关紧要的可以被遗忘的信息。因为是二值化输入,所以有用信息量等同于中间不规则形状的面积,完整信息量等于整体大椭圆的面积。一个像素/输入神经元可以控制的信息量只有ln2=1(因为二值化输入)。所以一个神经元对应一个激活响应区域,就是左图中的面积为1的一种颜色的着色区域。颜色太多无法完全画出,会覆盖所有灰色面积,实际上应该是一张彩色雪花图。输入层的完整信息量是I(X;X)=H(X),需要这些个bit数来描述变量X,而特征层可能的输入排列组合数|H|=|X|=2H(X),对应的泛化误差$epsilon=sqrt{frac{ln|H|+ln(2/delta)}{2m}}$也会非常大。这里注意熵H与特征值排列组合个数|H|并不是同一个东西,只是变量名正好重复了,这里要加以区分。所以暂时把所有的熵都以S代替,H代表隐藏层变量,等同于T。
    • 中图代表了中间某一个隐藏层的信息覆盖,这层特征T包含的信息与输入X包含的信息的公共部分既交互信息I(T; X)=S(X)-S(X|T)被画出染色了,面积比输入层的S(X)减少了很多。-S(X|T)代表了从左图到中图的信息遗忘量。同时神经元个数减少,所以颜色数量也减少了。一个神经元一种颜色,能够激活的区域也变大变多变离散了,这是因为从低层抽象到高层抽象的描述中,使用逻辑门排列组合导致了响应区域的分割以及重组,具体参见之前的逻辑门组合内容。这些响应区域仍然会覆盖一些不重要信息,比如图中“重要信息”区域之外的一些信息。中图所有染色面积代表的信息I(T; X)能够产生的特征值排列组合数是2I(T; X),对比左图的排列组合个数显著减少,所以泛化误差在相同样本数m的情况下也减小了,模型的泛化能力得到了增强。注意结构推导出的该层的熵S(Nfree_dim)实际上是I(T;X)的上限,I(X;T)=S(T)-S(T|X)=S(X)-S(X|T),而因为训练时权重W实际上限制了一部分自由度Nfree_dim,一部分排列组合的值是不可能取得的,所以泛化误差公式$epsilon=sqrt{frac{ln|H|+ln(2/delta)}{2m}}$里的可取隐藏层值的数量对数ln|H|实际上是小于该层的熵的,而且取决于权重W:I(X;T)=ln|H(W)| <= S(Nfree_dim)。无论是从结构上降低上限S(Nfree_dim),还是更新W降低ln|H(W)|,实际上都降低了I(X;T),从而减小泛化误差。 
    • 右图代表最终输出层,这时候信息压缩已经将不重要的信息基本都遗忘了,使得在保证I($hat{mathrm{Y}}$;Y)不下降的情况下(因为监督loss要求它被最大化),I($hat{mathrm{Y}}$;X)被尽量减小。最终输出的泛化误差也被|H|=|$hat{mathrm{Y}}$|=2I($hat{mathrm{Y}}$;X)决定。最终响应区域也变成4个,4种颜色,对应4个分类,瓜分了信息地图上I(X;Y)区域里所有的有用信息。这里因为softmax的机制,允许I($hat{mathrm{Y}}$;X)达到结构上限S(Nfree_dim),输出层的Nfree_dim=4,这样每个输出bit才都具有含义。

     上面针对特征层包含信息的逐层分析,都是基于训练已经收敛之后,分析每层特征层的信息量得出的。是由网络结构设计导致的信息压缩。

    可以看出交互信息I(Hi;Y)每一层大致一样,I(Hi;X)会在中间特征层内逐渐衰减。

    I(X;Y) >= I(H1;Y) >= I(H2;Y) ...... >= I(HL;Y) >= I($hat{mathrm{Y}}$;Y)

    H(X) = I(X; X) >= I(H1;X) >= I(H2;X) ...... >= I(HL;X) >= I($hat{mathrm{Y}}$;X)

    总结一下结构压缩的原理以及作用:

    • 结构决定了一层神经元能够承载信息量的上限,但是随着训练进行,权重的更改使得一部分特征值的排列组合永远无法达到,所以通过改变结构,降低2S(Nfree_dim) >= |T|=2I(T; X)的上限熵S(Nfree_dim)达到降低泛化误差上限的效果。自由度Nfree_dim取决与下面要列出的一串要素。另外要让低层抽象变成高层抽象概念,也必然需要借助信息压缩。
    • 通过减少神经元个数、max pooling或是dropout,减少特征层值可能的排列组合个数上限。
    • 通过数据离散化(argmax),减少特征层可能的排列组合数上限。
    • 通过非线性映射,使多个离散化区间被映射到同一个离散化区间,比如范围(-10 ,+10)区间,离散化采用间隔0.1,如果使用ReLU激活函数映射成(0, +10),则成功地把原本200个区间压缩到了100个,而如果使用sigmoid映射成(0, 1),则把原本200个压缩到了10个。由此达成的排列组合个数上限压缩效果是指数量级的。

    注意到有人实验用ReLU替换tanh之后,观察到的信息压缩现象减弱了很多,甚至在前面几层特征层基本观察不到信息压缩,如下图所示:左图tanh,右图ReLU

    个人感觉原因就在于Relu只压缩了一半的离散化区间,量级仍是O(n),而tanh压缩得更多,固定范围的压缩量级是O(1)

    每一层特征层的I(X;T)都被网络结构限定了一个天花板最大值,既该层特征值所有排列组合数的对数,既该层的熵S

    在训练结束之前,I(X;T)就已经触碰到tanh压缩后的信息承载天花板了,之后就被SGD引入的噪音导致开始压缩I(X;T)了。

    而使用ReLU+BGD的这组实验,本身I(X;T)天花板就很高,收敛之前能不能碰到首先是一个问题。如果触碰到了,也不会被SGD的噪音导致压缩,只会受限于最终层使用argmax结构降低的天花板,所以压缩现象只存在于输出层,而非前面的隐藏层。而且ReLU的天花板看上去也比tanh的高,某种程度证明了压缩量级不同的理论。

    前面都有意识地忽略了更改权重W导致的信息压缩,现在要讨论I(X;T(W))是如何随着训练,在结构限制的天花板之下变化的。

    这里使用了Naftali Tishby教授提出的SGD噪音压缩的理论:

    之前的文章,SGD与收敛速度提到了在收敛的中后期,噪音带来的熵(不确定性)会随着时间改变:

    $Sproptoexpleft(-etamathbb{E}left[( abla E(W))^{2} ight])t ight)$

    其中E(W)代表损失函数,半衰期与当前损失函数平方的预期以及信号/噪音比$eta$有关。

    边界条件要求t=0时,熵等于初始Loss混乱度S0,所以$S=S_{0}expleft(-etamathbb{E}left[( abla E(W))^{2} ight])t ight)$

    对时间求导,假设收敛阶段$mathbb{E}left[( abla E(W))^{2} ight]$是短期内比较稳定的值,得到$frac{partial S}{partial t}=-etamathbb{E}left[( abla E(W))^{2} ight]S_{0}expleft(-etamathbb{E}left[( abla E(W))^{2} ight])t ight)$

    让新常量k = $etamathbb{E}left[( abla E(W))^{2} ight]$

    该公式只在收敛中后期信噪比与Loss的预期值都比较稳定(一步$Delta t$之内不会改变太多)的时候适用,前期信号与信噪比都很高的时候,该公式的推导假设是有问题的所以不成立。

    当完全收敛后,k基本上为0,$Delta S=frac{partial S}{partial t}Delta t$也停止引入熵了。

    $Delta S(W)$因为W的改变而产生,而I(X;T(W)) = S(X) - S(X|T(W)),当Ti被上一层的Wi-1改变而改变时,$Delta S(W_{i-1})=Delta S(X|T_{i}(W_{i-1}))$

    $I(X;T_{i}(W_{i-1}^{(t+1)}))=I(X;T_{i}(W_{i-1}^{(t)}))+Delta S(W_{i-1})$

    而$Delta S=frac{partial S}{partial t}Delta t=-etamathbb{E}left[E(W)^{2} ight]S_{0}expleft(-etamathbb{E}left[E(W)^{2} ight])t ight)Delta t<0$ 

    所以在压缩阶段,也就是收敛的中后期,I(X;T)会逐渐减少,达到噪音压缩信息的效果,而且噪音压缩也会随着训练接近完结k值趋近于0,效果越来越弱。

     

    每一层被SGD更新的权重都会造成信息压缩,压缩的速度取决于当前信号噪音比以及梯度平方的预期值。

    所以增加神经网络的层数,也就增加了噪音引入的速度,因为每层在迭代时都会引入一个独立的$Delta S$,这样大大增添加了高层I(TL;Y)的信息压缩的速度,如下图所示。

    到此信息瓶颈理论对于DNN的很多原理以及现象都做出了解释,并且都比较符合实际训练时的经验结果。

    信息瓶颈理论解释了以下的问题:

    1. 模型训练的速度往往是开始收敛得很快,越到后面越慢,因为信息压缩花费的时间到后期指数增加了。
    2. 在样本不足的情况下,DNN往往表现出比预期要好一些的泛化能力,因为压缩I(X;T)使得泛化误差减小了。每压缩一半的bit数,维持相同泛化误差所需的样本数也减半。
    3. 从低层到高层,使用一些更改结构信息承载能力上限的技巧,可以达到压缩I(X;T)上限的效果。减少神经元个数(包括max pooling以及降维,还有临时性的drop out)、减少离散化数据的枚举数量(包括使用非线性激活函数、归一化、使用argmax),都在一定程度上减小了泛化误差。
    4. 无论是SGD还是dropout引入到网络中的噪音/不确定性,都增加了对应那一层的熵H(X|Ti(Wi-1),导致在训练过程中,I(X;T)被进一步压缩。当信号噪声比变小时,也就是训练到了中后期,随机熵导致的压缩会非常明显。然后当收敛趋于停止时,压缩效果也随之减弱,最终哪怕时间指数增加了,压缩量也会逐渐减小。
    5. 增加神经网络层数可以加快收敛速度,因为每一层随机权重都在进行信息压缩,相当于对噪音导致的信息压缩过程开了多线程。
    6. 每上升一层神经网络特征,因为信息压缩的现象,所以信息承载上限最好也随之降低,超出所需的I(X;T)比特数,并不会帮助提升预测效果,只会拖累计算速度。有时候需要借助结构改变来减少信息承载上限,从而强制进行不同层间的信息压缩。
    7. 当I(Y;X) < H(Y)的时候,Y存在X无法描述的固有随机性,存在准确率上限,无论任何模型训练得再完美,都无法让准确率超过这个上限。
    8. 训练收敛后,如果是能够比较好预测的模型,I(Y;Ti)在每一层都会比较接近于H(Y),这样假设无论从那一层切开,中间重新输入特征值T代替原本的输入X,都能够准确预测出Y。这为逐层解析DNN的特征值含义,提供了一扇分析的窗口。

     

     

     

     

  • 相关阅读:
    es6学习笔记
    vue.js项目目录结构说明
    js 数组操作总结
    js 数组去重方法
    HTTP协议三次握手过程
    MVC与MVVM模式对比
    谱面编辑器
    LL谱面分析和难度标定
    SLP的模块结构
    LL基本姿势
  • 原文地址:https://www.cnblogs.com/ws12345/p/8036710.html
Copyright © 2011-2022 走看看