前面的文章里提到了有人观测到压缩过程并不是必须的,实验中观察到信息平面图如下:
从交互信息的定义可得:
$I(X;T(oldsymbol{W}))=H(T(oldsymbol{W}))-H(T(oldsymbol{W})mid X)$
又知道任意一层神经网络结构中,结构能承载的熵存在上限,既$H(T(oldsymbol{W}))leq S_{l}(N_{ ext{free_dim}})$
意思是在第l层的结构中,存在$2^{N_{ ext{free_dim}}}$种可能的排列组合取值。
理论上讲,训练过程中改变W,随之而来的T的改变,理论上可以让$I(X;T(oldsymbol{W}))$在任何0到$S_{l}$之间的范围内变动。
训练初始,信噪比比较大,所以$H(T(oldsymbol{W})mid X)$是比较确定的,这时候基本上所有$I(X;T(oldsymbol{W}))$的改变都来自于层内学习到的信息$H(T(oldsymbol{W}))$的增加,会看到图中X轴上的值增加。
训练到后期,信噪比非常小了,所有SGD中引入W的不确定性/噪音信息实际上都变成了$H(T(oldsymbol{W})mid X)$,这时候该项不再是0或是一个缓慢增长的值,而变成了$I(X;T(oldsymbol{W}))$变化量的主要贡献来源。
训练后期,如果$H(T(oldsymbol{W}))$碰到了熵承载上限,或是训练前中期时某一层网络结构的上限很低,比如最后一层的softmax argmax,那么$H(T(oldsymbol{W}))$实际上就不会再改变了,信息平面图上我们观测到的所有$I(X;T(oldsymbol{W}))$的变化,都来自于$-H(T(oldsymbol{W})mid X)$这一项。
但凡有一点噪音信息被W的更新写入了$H(T(oldsymbol{W})mid X)$,都会造成$I(X;T(oldsymbol{W}))$的减少,既可观测到的压缩。
要想让压缩现象无法被观测到,只要确保$H(T(oldsymbol{W}))$增加的速度领先于SGD噪音熵写入的速度就可以了。
换言之,只要维持好高信噪比,同时提升上限$S_{l}$,比如使用relu代替tanh,就可以掩盖信息压缩了。
为什么说relu可以提供更高的熵承载上限呢?
假设需要分箱离散化3个实数,使用0.1的间隔,原本的输入范围从-10到+10,一共200个箱,有200^3种排列组合,熵上限ln(8e+6)。
那么套用tanh函数之后,输出被压缩到了-1到+1, 变成了20个箱,熵上限是ln(8e+3)
而套用relu函数之后,输出范围是0到+10, 100个箱,熵上限ln(1e+6)
可以看出二者在经历相同离散化操作之后,tanh的信息上限是O(1),而relu的信息上限是O(n),n是原本输入值所在分布的箱数。
另外,如果使用BGD而非SGD,其实也不能完全避免噪音,因为BGD只确保了每一步$I(T;Y)$的增加,既$H(Ymid T)$的减少(详情见这篇文章),但并没有办法推导出$H(Xmid T)$不允许增加的结论,因为只要$H(Xmid T)$增加了,I(X;T)也就减少了。
如果在信息覆盖图上画出X,Y与T的区域的话,只需要在确保增加T与Y的重叠面积,同时减少T与X的重叠面积,即可在BGD时完成I(X;T)的信息压缩。
那么只要X没有完全包含Y所有的面积,上面的操作是完全有可能达到的,既在使用BGD的情况下完成I(X;T)的压缩,因为这时噪音已经不来自于SGD,而是来自于Y本身,有一些X没法描述的信息,这种情况在现实操作中其实非常常见,因为无论是多完美的模型,对于Y标签本身存在的X无法描述的部分,既噪音,也是束手无策的。