神经网络概述
深度神经网络的结构可以简单用以下图形表示,为了便于表示神经网络的结构,并有以下符号约定:
-
用表示神经网络的层数,如上所示的神经网络,一般而言,神经网络的层数(Layer)不包括输入层,其层数只包含隐藏层和输出层。
-
表示第层的神经单元数量,如上所示的神经网络有:,。
-
用层表示第层激活后的神经网络结果,有表示第层的激活函数。
-
表示第层计算的权重参数。
神经网络的前向传播过程
如上所述的神经网络模型,其前向传播过程的向量化实现可以用一下公式表示:
如上所示的向量化实现神经网络的前向传播的计算过程中,需要逐层计算,对于这一过程,可以用显示for
循环实现。
核对矩阵的维数
在神经网络的实现过程中,需要确保矩阵的维数在计算过程中不能够出错,如下所示的神经网络结构中,对于矩阵运算的规则如下所示:
首先,可以先标注神经网络每一层的单元数,如下所示:
对于每一层的神经网络的计算方式可以用如下公式表示:
其中,根据矩阵运算法则,则,即也就是
,则有,即也就是
以此类推,可以得到一般性的结论,即也就是:
推而广之,
维度和维度相同,维度和维度相同。
进一步推广,假设有个训练样本,向量化实现,则矩阵维数满足以下条件,如下所示;
深度神经网络的意义
在神经网络的较浅的前几层隐藏层中,较浅层常常用来探测输入数据的特征,如输入图像的边缘特征,语音信号的音频波形的一些特征,而后面几层通过将这些信号组合在一起而得到输出值。实际上,计算之前的几层就是简单的计算函数,比如一副图像中的图像单元,在网络种的深层是,实际上能做很多复杂的事,比如,探测图像的部分区域或是探测单词,短语和句子。
以电路理论为例,用异门,非门,或门等简单的逻辑电路单元组成一个异或门,计算,假设有个特征,以以下一个异或树图为例,可能需要,计算,,通过一个深度的异或树图,集时间复杂度为,而单隐层为的方式计算,其时间复杂度可能达到,可以看出,增加网络的深度,即也就是隐藏层的数量,是一种行之有效的方法。
搭建深度神经网络块
神经网络的计算,可以分为正向传播和反向传播计算,正向传播的计算过程中,以第层为例,输入是前一层的,而输出是,在这个计算过程中,有,再将计算得到的值缓存起来,以便于反向传播的计算。
神经网路反向传播的计算过程中,同样是层的计算,需要通过输入计算的值,反向传播的计算过程中,除了输出的的值外,还需要输出和,以实现梯度下降的计算。
神经网络的正向传播和反向传播的整个计算过程,可以由下图表示,神经网络的梯度下降包括了一个正向计算和反向传播的循环,再反向传播的计算过程中,每一次会输出一个和的梯度,最后,参数会在每一层被更新为,反向传播计算完毕,就会得到所有参数的导数值,实现了神经网络的梯度下降循环。
神经网络的正向传播和反向传播
j假设有个训练样本,神经网络正向传播的向量化的计算公式如下所示:
多层神经网络的反向传播的计算过程可以如下公式表示:
反向传播的计算过程中,的计算,就是对损失函数求导。
回顾上图中反向传播的计算过程,要经常用到,所以需要在正向计算的过程中缓存的值。
超参数和参数
在之前的神经网络学习中,涉及到了许多参数,算法中用到的主要的参数,如下所示:
- 学习率(learning rate) 用表示;
- 迭代次数(iterations),即也就是梯度下降的循环次数;
- 隐藏层的数目(hidder layers);
- 隐藏层的单元数目;
- 激活函数的选择,如选择线性修正单元(
RELU
)或是sigmoid
函数。
所有以上这些参数都决定着参数和的值,所以将以上参数统称为超参数。
深度学习的应用,很大程度上仍然是一个经验性的过程,在参数的选择过程中一个简单的方法是可以简单绘出数据在训练集和验证集上的损失随着参数改变的变化过程,从而选择更好的参数值。
网友评论