《Neural Networks and Deep Learning》学习笔记——《Neural Networks and Deep Learning》是Michael Nielsen 所著的一本神经网络与深度学习的在线学习教材,通过Python(+Theano)实现神经网络识别MNIST手写数据集,生动易懂的讲解了神经网络与深度学习的基本原理,是一本非常不错的入门教材。本文是对其学习的总结。
目录
- 初识神经网络
1.1 感知器
1.2 Sigmoid函数
1.3 代价函数
1.4 梯度下降算法 - 反向传播算法
- 神经网络改进算法
3.1Cross-entropy代价函数——神经元饱和
3.2正则化(Regularization)——过拟合
3.3权值初始化——隐含层神经元饱和 - 深度学习
4.1 万有逼近定理(Universal Approximation Theory)
4.2 训练深度神经网络时的问题
4.3 卷积神经网络(CNN)
1.万有逼近定理
如果一个隐含层包含足够多的神经元,多层前馈神经网络能以任意精度逼近任意预定的连续函数,简单地说就是神经网络可以逼近任意函数,且隐含层神经元越多,逼近程度越高。(泛化性能更强的非线性模型可在线性模型的基础上通过引入层级结构或高维映射来得到)
以激活函数为Sigmoid函数的神经网络为例:
当权值 ω ω 和偏置b都很大时,Sigmoid函数可以近似为阶跃函数:
通过阶跃函数可以生成矩形脉冲函数:
其中s=-b/w,决定了阶跃函数的突变点位置。
由微积分基本原理可知,通过矩形脉冲函数可以近似任意连续函数:
综上可以看出神经网络(隐含层神经元足够多)可以任意逼近任意连续函数。
包含两层或两层以上隐含层的神经网络称为深度神经网络。
下图为包含三层隐含层的全连接的深度神经网络;
因为深度神经网络包含更多的隐含层及隐含层神经元,因此我们可以认为深度神经网络可以更好的逼近任意连续函数,即可以更好的解决实际问题。
我们可以把深度神经网络结构看做是对复杂问题的分解,即前面的隐含层解决较为简单专门的子问题,后面的隐含层就综合起来建立起一个较为复杂且抽象的概念,最终输出这个复杂问题的答案。
如下面一个判断是否为人脸图片的网络图所示,展示了对复杂问题分解的过程:
其中输入层为人脸图片的像素,每个隐含层神经元都去判断是否包含人脸的子区域,输出层输出是否为人脸图片。
因此深度学习是一个解决实际问题的有效手段,而且相当多的结果都表明深层神经网络比浅层网络的性能更好。
2.训练深度神经网络时的问题
在训练基于梯度下降的深度神经网络时经常会遇到梯度消失和梯度爆炸问题。
某些时候,我们利用反向传播算法进行深度学习时,在反向传播的时候梯度值越来越小,即之前的隐含层比之后的隐含层学习的要慢。这种现象就称为梯度消失。反过来,某些时候在反向传播的过程中,梯度值变得非常大,这种现象称为梯度爆炸。这种不稳定问题时基于梯度下降的深度神经网络的基本问题。
下面应用链式求导法则具体解释这一现象。
假设有一简单的深度神经网络:
应用链式求导法则,可求得偏置的偏导数为:
Sigmoid函数导数图像如下所示:
由上图可知,Sigmoid函数的导数的最大值为 σ′(0)=1/4 σ ′ ( 0 ) = 1 / 4 。现在考虑如果我们应用标准高斯随机分布去初始化权值,则权值通常满足 |wj|<1 | w j | < 1 ,则易得 |wjσ′(zj)|<1/4 | w j σ ′ ( z j ) | < 1 / 4 。
对于上述偏置偏导数有:
从中可以看出之前隐含层的梯度是之后所有隐含层梯度项的乘积。
因此在这种情况下,对于深度神经网络,隐含层从后往前梯度值会越来越小,当隐含层数很多时梯度值会趋于零,即梯度消失。(梯度爆炸类似,略)
总结
这种深度神经网络不稳定的问题有很大一部分影响因素是在于激活函数的选择和权值的初始化以及神经网络的结构和超参数上。
3.卷积神经网络(CNN)
全连接的深度神经网络尽管拥有良好的性能,但是并没有很好的利用样本数据的空间结构,因此引入深度卷积神经网络(Deep Convolutional Neural Networks)。
卷积网络在图像识别领域有非常好的应用,所以下面以图片识别为例介绍深度卷积神经网络。
卷积网络的特别之处主要基于三个部分:局部区域(local receptive fields),共享权值和偏置(shared weights and biases)和池(pooling)。
(1)局部区域
假设有一幅28x28的图片输入,如下图所示:
在全连接网络中,输入层每一像素值都和之后隐含层的所有神经元相连。
不同的是,在卷积网络中我们只将每个局部区域的输入与之后的隐含层某一神经元相连。
如下图所示,将一个5x5的局部区域与之后隐含层的某一神经元相连:
其中每一连接都对应学习一个权值,每一隐含层神经元都对应学习一个偏置。
以此类推(设步长为1,即向右或向下移动一像素),将每一个局部区域都与之后的一个隐含层神经元相连接:
……
最终我们会得到一个包含24x24个神经元的隐含层。
(2)共享权值和偏置(卷积层)
这24x24的隐含层中每一个神经元都共享同样的权值和偏置。即:
可以理解为,同一隐含层学习、提取同一种特征(该层每一神经元都从一幅图片的不同区域提取该特征),每一隐含层都对应学习、提取一种特征。也就是说卷积网络适应于寻找图片中的不变量(共有特征)。因此卷积网络与输入的空间结构密切相关。
下图展示的是一个提取三种不同特征的隐含层:
其中,卷积网络的输入层到隐含层的这种映射称为特征映射。
(3)池层
池层的作用是简化来自于卷积层的输出,即对特征映射进行压缩映射(选取更高层次的特征)。
以最大化池为例:
类似于卷积层,选取卷积层2x2的区域,最大化池层的神经元输出的是该区域的最大值,则会得到一个12x12的隐含层。
如上图所示,通过这一过程我们可以很直观的发现相比于全连接网络,卷积网络所需要的参数大大减少了,因此训练卷积网络的速度更快。
在图像识别的实际应用中,常常将卷积网络与全连接网络结合起来使用,例如:
其中第一层为输入层,第二次为卷积层,第三层为池层,第四层为全连接的Sigmoid层,最后一层为全连接的Softmax输出层。
可以认为卷积层学习的是图像的空间结构,而全连接层是在更高层对其特征的抽象与综合。