zoukankan      html  css  js  c++  java
  • 从信息论的角度分析DNN的工作原理

    在前面的文章里,使用神经网络的任意函数拟合性结合了一点黎曼几何的坐标系变化的知识,解释了神经网络是怎样根据输入x,计算出每个分类下的能量Ei(x)的,再之后使用能量模型推算出了概率,从而展示了理论上可以使用DNN完成一个经典的分类问题。

    然而这种解释只是最基本的可行性解释,并没有解答下列几个在训练时比较关键的问题:

    1. DNN的层数以及每层的神经元个数究竟影响了哪些能够观测到的训练属性(除了函数的拟合性之外)?这些影响是怎么产生的?
    2. 为什么训练收敛速度会变慢?
    3. 为什么收敛后继续训练可能导致overfitting
    4. 理论上DNN的权重参数数量非常大,导致所需的样本数量也会非常大才能避免过拟合,但是实际上在较小的样本集上,DNN也能训练收敛,并且结合early stop方法也可以达到不错的泛化效果,这是为什么?
    5. Dropout能够提升泛化性的原因

    很多训练过程中出现的现象,以及网络结构会如何影响训练过程,这些问题都需要使用信息瓶颈理论来进行解读。

    接下来的几篇文章,会着重探讨DNN是怎样高效地达到它的既定目标的,而不仅仅是证明DNN可以达到这些目标。

    通过解读训练过程中每一层特征层包含的信息量变化,或许可以帮助解释DNN的黑盒。

    首先需要介绍几个重要的概念:

    交互信息(Mutual Information):

    $I(X,Y)=D_{KL}left [ p(x,y)||p(x)p(y) ight ]$

    其中KL距离的定义是:假如使用分布q(x)来代替分布p(x)用来描述随机变量X (注:x可以看做X离散化后采样得到的结果),所需的bit数的预期值。

    $D_{KL}left(p(x)parallel q(x) ight)=underset{xin X}{sum}p(x)logfrac{p(x)}{q(x)}geqslant0$

     由交互信息以及KL距离的定义,可得:

    $I(X;Y)=underset{xin X}{sum}underset{yin Y}{sum}p(x,y)logfrac{p(x,y)}{p(x)p(y)}$

    $=underset{x,y}{sum}p(x,y)logfrac{p(x,y)}{p(y)}-underset{x,y}{sum}p(x,y)logp(x)$

    $=underset{y}{sum}p(y)left(underset{x}{sum}p(xmid y)logp(xmid y) ight)-underset{x}{sum}logp(x)underset{y}{sum}p(x,y)$

    $=-underset{y}{sum}p(y)H(Xmid y)-sumlimits _{x}p(x)logp(x)$

    $=-H(Xmid Y)+H(X)$

    可以看出随机变量X与Y的交互信息实际上就是 描述X所需的bit数 减去 已知Y的情况下,还需要额外的用来描述X的bit数。当X与Y的交互信息越多,已知Y时还需要用来描述X的bit数也就越少,X与Y也就越接近。极限情况下当X=Y时,交互信息取最大值,等于H(X)。

    另外也注意到交互信息满足对称交换:I(X;Y)=I(Y;X),这个可以自行验证。

     

    泛化误差(generalization error):

    根据霍夫丁不等式:

    $mathrm{P}left(left|Eleft[y ight]-frac{1}{m}sum_{i=1}^{m}y_{i} ight|>epsilon ight)leqslant2expleft(frac{-2mepsilon^{2}}{left(b-a ight)^{2}} ight)$

    我们希望回归预测的值R(y)=E[y]=真实预期

    采样样本能够计算出的预期 Remp(y)=$frac{1}{m}sum_{i=1}^{m}y_{i}$

    不止是最终输出层y存在泛化误差,实际上神经网络里任意一层特征都存在泛化误差,所以避免歧义,使用h来代替y,H代替Y,这样方便我们考虑DNN中的任意一层。

    b,a是h值的上下限,这里为了简单,取b-a=1,既每一层特征值都被归一化了。

    考虑最坏情况下h可能导致的泛化误差上限(左边),与所有情况下泛化误差的总和(右边),满足以下公式:

    $mathrm{P}left(underset{hin H}{sup}|R(h)-R_{emp}(h)|>epsilon ight)leqslantsumlimits _{hin H}mathrm{P}left(|R(h)-R_{emp}(h)|geqslantepsilon ight)$

     带入霍夫丁不等式得到

    $mathrm{P}left(underset{hin H}{sup}|R(h)-R_{emp}(h)|>epsilon ight)leqslant2|H|expleft(-2mepsilon^{2} ight)=delta$

    其中|H|代表所有可能的h取值的数量,既集合H的大小。

    当$epsilon$更大时,有更小概率$delta$出现泛化误差 R(h)-Remp(h)在改变x时的最坏情况取值大于门槛$epsilon$,我们也就有更高置信度 p=1 - $delta$ 来声明无论h取任何值时都满足 R(h)-Remp(h) < $epsilon$

    重新排列$delta$与$epsilon$:

    $epsilon=sqrt{frac{ln|H|+ln(2/delta)}{2m}}$

    所以

    $R(h)-R_{emp}(h)leqsqrt{frac{ln|H|+ln(2/delta)}{2m}}$ =泛化误差上界 generalization error bound

    我们需要每一层的泛化误差都在训练收敛后足够小,尤其是越靠近输出值y的特征层,越不能容忍高泛化误差,否则下场就是过拟合。

    $2/delta$与精度需求有关,一般都是常数,所以基本可以无视第二项,泛化误差上界主要取决于$ln|H|=S$也就是当前隐藏层的信息熵 (参见之前对于熵的定义)与样本数量m的比例。每一层特征值h,可取的值的排列组合个数的对数就是当前层的熵,也是描述该层特征所需的bit数。

     

    下一篇将详细分析信息是如何在神经网络构成的马尔科夫链中被一层层传导的,会反复使用到交互信息与泛化误差两个知识。

     

     

  • 相关阅读:
    设计模式_抽象工厂模式
    KMeans聚类算法Hadoop实现
    JDK核心JAVA源代码解析(1)
    pushlet单播与多播
    SQL 2008 R2数据库变为REPLICATION,日志不断增长并且不能截断和收缩的解决方式
    chrome插件的popup与跨域请求
    Ubuntu vim+ ctags(包括系统函数) + taglist 配置
    spring Valid @Pattern 常见的验证表达式
    spring boot 全局异常处理
    spring 事件使用
  • 原文地址:https://www.cnblogs.com/ws12345/p/8006745.html
Copyright © 2011-2022 走看看