《Neural Networks and Deep Learning》(五)笔记

神经网络可以计算任何函数的可视化证明
神经网络的一个最显著的事实就是它可以计算任何的函数,也就是说对定某种复杂而奇特的函数神经网络假设函数 神经网络模拟任意函数_深度神经网络,不管这个函数是什么样的,总会确保有一个神经网络能够对任何可能的输入神经网络假设函数 神经网络模拟任意函数_神经网络假设函数_02,其值神经网络假设函数 神经网络模拟任意函数_深度神经网络是网络的输出。




神经网络假设函数 神经网络模拟任意函数_深度学习_04

神经网络具有一种普遍性,不论我们想要计算什么样的函数,我们都确信存在一个神经网络可以计算它。这个普遍性定理甚至在我们限制了神经网络只在输入层和输出层之间存在一个中间层的情况下成立,所以即使是很简单的网络架构都极其强大。 其技术性解释参见论文:Approximation by superpositions of a sigmoidal function

地址:(http://www.dartmouth.edu/~gvc/Cybenko_MCSS.pdf)
另外一篇重要的早期论文是:Multilayer feedforward networks are universal approximators
地址:(http://www.sciencedirect.com/science/article/pii/0893608089900208)

神经网络假设函数 神经网络模拟任意函数_权重_05
深度神经网络为何很难训练?

在某些深度神经网络中, 在我们隐藏层BP的时候梯度倾向于变小. 这意味着在前面的隐藏层中的神经元学习速度要慢于后面的隐藏层. 这儿我们只在一个网络中发现了这个现象, 其实在多数的神经网络中存在着更加根本的导致这个现象出现的原因. 这个现象也被称作是消失的梯度问题(vanishing gradient problem ). 同样会产生问题——在前面的层中的梯度会变得非常大!这也叫做激增的梯度问题(exploding gradient problem),这也没比消失的梯度问题更好处理. 更加一般地说, 在深度神经网络中的梯度是不稳定的, 在前面的层中或会消失, 或会激增. 这种不稳定性才是深度神经网络中基于梯度学习的根本问题 .
三层隐藏层的神经网络



神经网络假设函数 神经网络模拟任意函数_深度神经网络_06


这里,神经网络假设函数 神经网络模拟任意函数_神经网络假设函数_07是权重,神经网络假设函数 神经网络模拟任意函数_深度学习_08是偏偏置,神经网络假设函数 神经网络模拟任意函数_深度学习_09则是某个代价函数
梯度整个表达式:神经网络假设函数 神经网络模拟任意函数_深度学习_10



神经网络假设函数 神经网络模拟任意函数_权重_11


该导数在神经网络假设函数 神经网络模拟任意函数_神经网络_12时达到最高。现在, 如果我们使用标准方法来初始化网络中的权重,那么会使用一个均值为神经网络假设函数 神经网络模拟任意函数_权重_13标准差为神经网络假设函数 神经网络模拟任意函数_神经网络假设函数_14的高斯分布。因此所有的权重通常会满足神经网络假设函数 神经网络模拟任意函数_权重_15。有了这些信息,我们发现会有神经网络假设函数 神经网络模拟任意函数_神经网络_16。并且在我们进行了所有这些项的乘积时,最终结果肯定会指数级下降:项越多,乘积的下降的越快。这里我们敏锐地嗅到了消失的梯度问题的合理解释。



神经网络假设函数 神经网络模拟任意函数_神经网络_17


两个表示式有很多相同的项。但是神经网络假设函数 神经网络模拟任意函数_深度学习_18还多包含了两个项。由于这些项都是神经网络假设函数 神经网络模拟任意函数_深度神经网络_19的。 所以神经网络假设函数 神经网络模拟任意函数_深度学习_18会是神经网络假设函数 神经网络模拟任意函数_深度神经网络_21神经网络假设函数 神经网络模拟任意函数_神经网络假设函数_22或者更小。这其实就是消失的梯度出现的本质原因。

梯度激增问题
现在看看梯度激增如何出现的。这里的例子可能不是那么自然:固定网络中的参数,来确保产生激增的梯度。但是即使是不自然,也是包含了确定会产生爆炸梯度(而非假设的可能)的特质的。
共两个步骤:首先,我们将网络的权重设置得很大,比如神经网络假设函数 神经网络模拟任意函数_深度神经网络_23。然后,我们选择偏置使得神经网络假设函数 神经网络模拟任意函数_深度神经网络_24项不会太小。这是很容易实现的:方法就是选择偏置来保证每个神经元的带权输入是神经网络假设函数 神经网络模拟任意函数_深度神经网络_25(这样神经网络假设函数 神经网络模拟任意函数_权重_26)。
比如,我们希望神经网络假设函数 神经网络模拟任意函数_神经网络_27。我们只要把神经网络假设函数 神经网络模拟任意函数_神经网络_28即可。我们使用同样的方法来获得其他的偏置。这样我们可以发现所有的项神经网络假设函数 神经网络模拟任意函数_深度神经网络_29都等于神经网络假设函数 神经网络模拟任意函数_神经网络_30。最终,我们就获得了激增的梯度。
不稳定的梯度问题: 根本的问题其实并非是消失的梯度问题或者激增的梯度问题,而是在前面的层上的梯度是来自后面的层上项的乘积。当存在过多的层次时,就出现了内在本质上的不稳定场景。唯一让所有层都接近相同的学习速度的方式是所有这些项的乘积都能得到一种平衡。如果没有某种机制或者更加本质的保证来达成平衡,那网络就很容易不稳定了。简而言之,真实的问题就是神经网络受限于不稳定梯度的问题。所以,如果我们使用标准的基于梯度的学习算法,在网络中的不同层会出现按照不同学习速度学习的情况。

消失的梯度问题普遍存在:
我们已经看到了在神经网络的前面的层中梯度可能会消失也可能会爆炸。实际上,在使用神经网络假设函数 神经网络模拟任意函数_神经网络假设函数_31神经元时,梯度通常会消失。为什么?再看看表达式神经网络假设函数 神经网络模拟任意函数_神经网络_32 。为了避免消失的梯度问题,我们需要神经网络假设函数 神经网络模拟任意函数_权重_33 。你可能会认为如果神经网络假设函数 神经网络模拟任意函数_权重_34很大的时候很容易达成。但是这比看起来还是困难很多。原因在于,神经网络假设函数 神经网络模拟任意函数_深度神经网络_35项同样依赖于神经网络假设函数 神经网络模拟任意函数_权重_34: 神经网络假设函数 神经网络模拟任意函数_权重_37,其中神经网络假设函数 神经网络模拟任意函数_深度神经网络_38是输入的激活函数。所以我们在让神经网络假设函数 神经网络模拟任意函数_权重_34变大时,需要同时不让神经网络假设函数 神经网络模拟任意函数_深度学习_40变小。这将是很大的限制了。原因在于我们让神经网络假设函数 神经网络模拟任意函数_权重_34变大,也会使得神经网络假设函数 神经网络模拟任意函数_深度神经网络_42变得非常大。看看神经网络假设函数 神经网络模拟任意函数_神经网络假设函数_43的图,这会让我们走到神经网络假设函数 神经网络模拟任意函数_神经网络假设函数_43的两翼,这里会去到很小的值。唯一避免发生这个情况的方式是,如果输入激活函数掉入相当狭窄的范围内(这个量化的解释在下面第一个问题中进行)。有时候,有可能会出现。但是一般不大会发生。所以一般情况下,会遇到消失的梯度。

《Neural Networks and Deep Learning》  by Michael Nielsen