在前面的文章里,使用神经网络的任意函数拟合性结合了一点黎曼几何的坐标系变化的知识,解释了神经网络是怎样根据输入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) \right ]$

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

$D_{KL}\left(p(x)\parallel q(x)\right)=\underset{x\in X}{\sum}p(x)log\frac{p(x)}{q(x)}\geqslant0$

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

$I(X;Y)=\underset{x\in X}{\sum}\underset{y\in Y}{\sum}p(x,y)log\frac{p(x,y)}{p(x)p(y)}$

$=\underset{x,y}{\sum}p(x,y)log\frac{p(x,y)}{p(y)}-\underset{x,y}{\sum}p(x,y)logp(x)$

$=\underset{y}{\sum}p(y)\left(\underset{x}{\sum}p(x\mid y)logp(x\mid y)\right)-\underset{x}{\sum}logp(x)\underset{y}{\sum}p(x,y)$

$=-\underset{y}{\sum}p(y)H(X\mid y)-\sum\limits _{x}p(x)logp(x)$

$=-H(X\mid 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|E\left[y\right]-\frac{1}{m}\sum_{i=1}^{m}y_{i}\right|>\epsilon\right)\leqslant2\exp\left(\frac{-2m\epsilon^{2}}{\left(b-a\right)^{2}}\right)$

我们希望回归预测的值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{h\in H}{sup}|R(h)-R_{emp}(h)|>\epsilon\right)\leqslant\sum\limits _{h\in H}\mathrm{P}\left(|R(h)-R_{emp}(h)|\geqslant\epsilon\right)$

带入霍夫丁不等式得到

$\mathrm{P}\left(\underset{h\in H}{sup}|R(h)-R_{emp}(h)|>\epsilon\right)\leqslant2|H|\exp\left(-2m\epsilon^{2}\right)=\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)\leq\sqrt{\frac{ln|H|+ln(2/\delta)}{2m}}$ =泛化误差上界 generalization error bound

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

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

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

从信息论的角度分析DNN的工作原理的更多相关文章

  1. 面试官:你分析过mybatis工作原理吗?

    Mybatis工作原理也是面试的一大考点,必须要对其非常清晰,这样才能怼回去.本文建立在Spring+SpringMVC+Mybatis整合的项目之上. 我将其工作原理分为六个部分: 读取核心配置文件 ...

  2. 从源代码角度分析ViewStub 疑问与原理

    一.提出疑问     ViewStub比較简单.之前文章都提及到<Android 性能优化 三 布局优化ViewStub标签的使用>.可是在使用过程中有一个疑惑,究竟是ViewStub上设 ...

  3. 反编译字节码角度分析synchronized关键字的原理

    1.synchronized介绍 synchronized是java关键字.JVM规范中,synchronized关键字用于在线程并发执行时,保证同一时刻,只有一个线程可以执行某个代码块或方法:同时还 ...

  4. 源码分析八( hashmap工作原理)

    首先从一条简单的语句开始,创建了一个hashmap对象: Map<String,String> hashmap = new HashMap<String,String>(); ...

  5. Android ListView工作原理完全解析,带你从源码的角度彻底理解

    版权声明:本文出自郭霖的博客,转载必须注明出处.   目录(?)[+] Adapter的作用 RecycleBin机制 第一次Layout 第二次Layout 滑动加载更多数据   转载请注明出处:h ...

  6. Android ListView工作原理全然解析,带你从源代码的角度彻底理解

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/44996879 在Android全部经常使用的原生控件其中.使用方法最复杂的应该就是 ...

  7. Tomcat 系统架构与设计模式,第 1 部分: 工作原理(转载)

    简介: 这个分为两个部分的系列文章将研究 Apache Tomcat 的系统架构以及其运用的很多经典设计模式.本文是第 1 部分,将主要从 Tomcat 如何分发请求.如何处理多用户同时请求,还有它的 ...

  8. Tomcat 系统架构与设计模式,第 1 部分: 工作原理

    简介: 这个分为两个部分的系列文章将研究 Apache Tomcat 的系统架构以及其运用的很多经典设计模式.本文是第 1 部分,将主要从 Tomcat 如何分发请求.如何处理多用户同时请求,还有它的 ...

  9. tomcat 系统架构与设计模式 第一部分 系统架构工作原理 转

    Tomcat 系统架构与设计模式,第 1 部分: 工作原理 许 令波, Java 开发工程师, 淘宝网 许令波,现就职于淘宝网,是一名 Java 开发工程师.对大型互联网架构设计颇感兴趣,并对一些开源 ...

随机推荐

  1. 将String类型的json字符串转换成java对象

    1,import com.fasterxml.jackson.databind.ObjectMapper; ObjectMapper mapper = new ObjectMapper(); Mycl ...

  2. Lightgbm 随笔

    lightGBM LightGBM 是一个梯度 boosting 框架,使用基于学习算法的决策树.它可以说是分布式的,高效的,有以下优势: 更快的训练效率 低内存使用 更高的准确率 支持并行化学习 可 ...

  3. [python]关于函数传入参数

    在传入参数时有两个特殊参数,*args,**kwargs,功能如下: def foo(*args, **kwargs): print 'args = ', args print 'kwargs = ' ...

  4. [PHP+JS]微信卡券(潦草笔记,全代码,亲测通过)

    群发卡券可以通过客服消息推送 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140547 后端代码: define('A ...

  5. 2018-2019-2 网络对抗技术 20165304 Exp4 恶意代码分析

    2018-2019-2 网络对抗技术 20165304 Exp4 恶意代码分析 原理与实践说明 1.实践目标 监控你自己系统的运行状态,看有没有可疑的程序在运行. 分析一个恶意软件,就分析Exp2或E ...

  6. python3字典练习(重要)

    #keys()返回字典里的所有的键dic = {'k1':'wcj','k2':33,'k3':[11,22,33,]}r = dic.keys()print(r) #结果为ict_keys(['k3 ...

  7. VC使用双缓冲制作绘图控件

    最近用VC做了一个画图的控件.控件在使用的时候遇到点问题.在控件里画了图之后切换到其他页面,等再切换回来的时候,发现控件里画的图都不见了.这是因为VC里面,当缩小.遮挡页面后客户区域就会失效,当再次显 ...

  8. v-for key

    key 当 Vue.js 用 v-for 正在更新已渲染过的元素列表时,它默认用“就地复用”策略.如果数据项的顺序被改变,Vue 将不会移动 DOM 元素来匹配数据项的顺序, 而是简单复用此处每个元素 ...

  9. faiss索引基于数量级和内存限制的选择

    它是一个能使开发者快速搜索相似多媒体文件的算法库.而该领域一直是传统的搜索引擎的短板.借助Faiss,Facebook 在十亿级数据集上创建的最邻近搜索(nearest neighbor search ...

  10. 计算系统中互联设备Survey

    Survey of Inter-connects in computer system 姚伟峰 http://www.cnblogs.com/Matrix_Yao/ https://github.co ...