深度神经网络(Deep Neural Networks, 如下简称DNN)是深度学习的基础,而要理解DNN,首先咱们要理解DNN模型,下面咱们就对DNN的模型与前向传播算法作一个总结。 算法
https://zhuanlan.zhihu.com/p/29815081 网络
1 从感知机到神经网络 机器学习
感知机的模型,它是一个有若干输入和一个输出的模型,以下图: 函数
输出和输入之间学习到一个线性关系,获得中间输出结果: 学习
接着是一个神经元激活函数: 优化
从而获得想要的结果1或者-1. spa
这个模型只能用于二元分类,且没法学习比较复杂的非线性模型,所以在工业界没法使用。而神经网络则在感知机的模型上作了扩展,总结下主要有三点: 3d
(1)加入了隐藏层,隐藏层能够有多层,加强模型的表达能力,以下图实例,固然增长了这么多隐藏层模型的复杂度也增长了好多。 blog
(2)输出层的神经元也能够不止一个输出(输出层有多个神经元),能够有多个输出,这样模型能够灵活的应用于分类回归,以及其余的机器学习领域好比降维和聚类等。多个神经元输出的输出层对应的一个实例以下图,输出层如今有4个神经元了。 get
还有后来出现的tanh, softmax,和ReLU等。经过使用不一样的激活函数,神经网络的表达能力进一步加强。
2 DNN的基本结构
神经网络是基于感知机的扩展,而DNN能够理解为有很多隐藏层的神经网络。多层神经网络和深度神经网络DNN其实也是指的一个东西,DNN有时也叫作多层感知机(Multi-Layer perceptron,MLP)。
从DNN按不一样层的位置划分,DNN内部的神经网络层能够分为三类,输入层,隐藏层和输出层,以下图示例,通常来讲第一层是输入层,最后一层是输出层,而中间的层数都是隐藏层。
层与层之间是全链接的,也就是说,第i层的任意一个神经元必定与第i+1层的任意一个神经元相连。虽然DNN看起来很复杂,可是从小的局部模型来讲,仍是和感知机同样,即一个线性关系:
3 DNN前向传播算法数学原理
所谓的DNN前向传播算法就是利用若干个权重系数矩阵W,偏倚向量b来和输入值向量x进行一系列线性运算和激活运算,从输入层开始,一层层的向后计算,一直到运算到输出层,获得输出结果为值。
5 DNN的反向传播算法
5.1要解决的问题:
能够用一个合适的损失函数来度量训练样本的输出损失,接着对这个损失函数进行优化求最小化的极值,对应的一系列线性系数矩阵W,偏置向量b即为咱们的最终结果。在DNN中,损失函数优化极值求解的过程最多见的通常是经过梯度降低法来一步步迭代完成的,也能够是其余的迭代方法好比牛顿法与拟牛顿法。
5.2反向传播算法的基本思路:
在进行DNN反向传播算法前,咱们须要选择一个损失函数,来度量训练样本计算出的输出和真实的训练样本输出之间的损失。
DNN可选择的损失函数有很多,为了专一算法,这里使用最多见的均方差来度量损失。即对于每一个样本,咱们指望最小化下式:
对于输出层的参数,损失函数变为:
求解W,b的梯度:
5.3DNN反向传播算法过程:
因为梯度降低法有批量(Batch),小批量(mini-Batch),随机三个变种,为了简化描述,这里咱们以最基本的批量梯度降低法为例来描述反向传播算法。实际上在业界使用最多的是mini-Batch的梯度降低法。区别仅仅在于迭代时训练样本的选择。
6 均方差损失函数+Sigmoid激活函数的问题
在讲反向传播算法时,咱们用均方差损失函数和Sigmoid激活函数作了实例,首先咱们就来看看均方差+Sigmoid的组合有什么问题。
首先咱们回顾下Sigmoid激活函数的表达式为:
7 交叉熵损失函数+Sigmoid激活函数改进DNN算法收敛速度