初识神经网络
《Neural Networks and Deep Learning》学习笔记——《Neural Networks and Deep Learning》是Michael Nielsen 所著的一本神经网络与深度学习的在线学习教材,通过Python(+Theano)实现神经网络识别MNIST手写数据集,生动易懂的讲解了神经网络与深度学习的基本原理,是一本非常不错的入门教材。本文是对其学习的总结。
目录
-
初识神经网络
1.1 感知器
1.2 Sigmoid函数
1.3 代价函数
1.4 梯度下降算法 - 反向传播算法
- 神经网络改进算法
- 深度学习
4.1 万有逼近定理(Universal Approximation Theory)
4.2 训练深度神经网络时的问题
4.3 卷积神经网络(CNN)
1.感知器(Perceptron)
通过对感知器的介绍来初步了解神经网络的结构。
简单的感知器结构如下图所示,
为了方便计算其输出,引入了神经网络中的第一个参数(注意与超参数区分)——权值
对上式进行简单变换,令
由此可知,感知器是通过改变
2.Sigmoid函数
由于感知器的激励函数为阶跃函数a=step(z),在某些情况下,
由下图阶跃函数和Sigmoid函数的图像比较可知,Sigmoid函数是平滑连续的Sigmoid函数相较于阶跃函数,其输入x,输出a均是连续的,即x,a
感知器 | Sigmoid | |
---|---|---|
输入x | 0/1 | 0–1 |
输出a | 0/1 | 0–1 |
激励函数 | 阶跃函数 | Sigmoid函数 |
因此Sigmoid神经元输出为:
我们已经知道可以通过改变
下面引入多层感知器(MLPs,因为一些历史原因这种结构被称为多层感知器,但其实质是基于Sigmoid神经元)
由上图可以得出神经网络的一般结构:输入层,隐含层,输出层。而且因为前一层的输出即作为后一层的输入:输入层->隐含层->输出层,因此这种结构被称为前向反馈神经网络。
3.代价函数(Cost function,Loss function)
如果要判断神经网络的输出是否达到我们的目标(接近理想输出)就要引入代价函数。
二次代价函数(均方误差)是一种常用的代价函数:
其中n为输入x的数量,y(x)为理想输出,a为实际输出,
由上式可以看出,C
4.梯度下降算法(Gradient descent algorithm)
了解了代价函数后就需要寻找可以使代价函数最小化的方法——梯度下降法。
梯度下降法类似于我们用导数求极值的想法,即不断通过学习
为了便于理解,以一般二元函数
根据微积分相关知识,有:
简化得,
因此我们需要通过改变
选取
即通过学习并更新函数C的自变量参数(
现在可将梯度下降法应用到我们的神经网络中:
将(10)(11)(12)结合之前的分析可知,当选择合适的学习速率
让我们的注意力重新回到代价函数
令
因为我们减小代价函数的值时,只需要定性确定可以使其下降较大的方向及其参数值,并不需要精确计算,所以我们可以随机选取一小部分输入样本数m,来近似计算梯度,其中这一小部分输入数据集被称为小批量,
总结:
我们的目标是想通过学习权值和偏置的最优值来获得与理想输出非常接近的输出,这一目标可由代价函数来量化。即通过改变权值和偏置值到其最优值使我们的神经网络得到目标输出,此时代价函数达到最小值,这一过程通过梯度下降法得到。