前言
一个生物神经细胞的功能比较简单,而人工神经元只是生物神经细胞的理想化和简单实现,功能更加简单。要想模拟人脑的能力,单一的神经元是远远不够的,需要通过很多神经元一起协作来完成复杂的功能。这样通过一定的连接方式或信息传递方式进行协作的神经元可以看作是一个网络,就是神经网络。
前馈神经网络
给定一组神经元,我们可以以神经元为节点来构建一个网络。不同的神经网络模型有着不同网络连接的拓扑结构。一种比较直接的拓扑结构是前馈网络。前馈神经网络(Feedforward Neural Network,FNN)是最早发明的简单人工神经网络。
在前馈神经网络中,各神经元分别属于不同的层。每一层的神经元可以接收前一层神经元的信号,并产生信号输出到下一层。第0 层叫输入层,最后一层叫输出层,其它中间层叫做隐藏层。整个网络中无反馈,信号从输入层向输出层单向传播,可用一个有向无环图表示。
前馈神经网络也经常称为多层感知器(Multi-Layer Perceptron,MLP)。但多层感知器的叫法不是十分合理,因为前馈神经网络其实是由多层的Logistic回归模型(连续的非线性函数)组成,而不是由多层的感知器(不连续的非线性函数)组成。下图给出了感知机的示意图:
输入层
第0层,即接收输入数据的那一层就是输入层。
隐藏层
位于输入层和输出层之间的网络层都称之为隐藏层。
输出层
网络结构中的最后一层即为输出层。
隐藏单元
我们把网络中的每一个结点称之为一个神经元(单元),隐藏单元即为隐藏层中的神经元(单元)。
激活函数
激活函数(Activation Function),就是在人工神经网络的神经元上运行的函数,负责将神经元的输入映射到输出端。
感知器
感知器(Perceptron)由Frank Roseblatt 于1957 年提出,是一种广泛使用的线性分类器。感知器可谓是最简单的人工神经网络,只有一个神经元。
感知器是对生物神经元的简单数学模拟,有与生物神经元相对应的部件,如权重(突触)、偏置(阈值)及激活函数(细胞体),输出为+1或-1。
感知器是一种简单的两类线性分类模型,其分类准则与下面的公式相同。
公式5.4
多层MLP链式法则实现反向传播
梯度反向传播1梯度反向传播2
梯度反向传播3
激活函数
激活函数在神经元中非常重要的。为了增强网络的表示能力和学习能力,激活函数需要具备以下几点性质:
- 连续并可导(允许少数点上不可导)的非线性函数。可导的激活函数可以直接利用数值优化的方法来学习网络参数。
- 激活函数及其导函数要尽可能的简单,有利于提高网络计算效率。
- 激活函数的导函数的值域要在一个合适的区间内,不能太大也不能太小,否则会影响训练的效率和稳定性。
Sigmoid 型函数
Sigmoid 型函数是指一类S 型曲线函数,为两端饱和函数。常用的Sigmoid型函数有Logistic 函数和Tanh 函数。
Logistic 函数
Logistic 函数定义为:
Logistic
Tanh 函数
Tanh 函数是也一种Sigmoid 型函数。其定义为:
Tanh
Tanh 函数可以看作是放大并平移的Logistic 函数,其值域是(−1, 1)。
Logistic & ReLU
修正线性单元
修正线性单元(Rectified Linear Unit,ReLU),也叫rectifier 函数,是目前深层神经网络中经常使用的激活函
数。ReLU实际上是一个斜坡(ramp)函数,定义为:
优点 采用ReLU 的神经元只需要进行加、乘和比较的操作,计算上更加高效。ReLU函数被认为有生物上的解释性,比如单侧抑制、宽兴奋边界(即兴奋程度也可以非常高)。在生物神经网络中,同时处于兴奋状态的神经元非常稀疏。人脑中在同一时刻大概只有1 ∼ 4%的神经元处于活跃状态。Sigmoid 型激活函数会导致一个非稀疏的神经网络,而ReLU却具有很好的稀疏性,大约50% 的神经元会处于激活状态。
在优化方面,相比于Sigmoid 型函数的两端饱和,ReLU函数为左饱和函数,且在x > 0 时导数为1,在一定程度上缓解了神经网络的梯度消失问题,加速梯度下降的收敛速度。
缺点 ReLU 函数的输出是非零中心化的,给后一层的神经网络引入偏置偏移,会影响梯度下降的效率。此外,ReLU神经元在训练时比较容易“死亡”。在训练时,如果参数在一次不恰当的更新后,第一个隐藏层中的某个ReLU神经元在所有的训练数据上都不能被激活,那么这个神经元自身参数的梯度永远都会是0,在以后的训练过程中永远不能被激活。这种现象称为死亡ReLU问题(Dying ReLU Problem),并且也有可能会发生在其它隐藏层。
带参数的ReLU
带参数的ReLU(Parametric ReLU,PReLU)引入一个可学习的参数,不同神经元可以有不同的参数。对于第i 个神经元,其PReLU的定义为:
PReLU
其中 γi 为 x ≤ 0 时函数的斜率。因此,PReLU是非饱和函数。如果 γi = 0,那么PReLU就退化为ReLU。如果 γi 为一个很小的常数,则PReLU可以看作带泄露的ReLU。PReLU可以允许不同神经元具有不同的参数,也可以一组神经元共享一个参数。
神经网络正则化
机器学习模型的关键是泛化问题,即在样本真实分布上的期望风险最小化。而训练数据集上的经验风险最小化和期望风险并不一致。由于神经网络的拟合能力非常强,其在训练数据上的错误率往往都可以降到非常低,甚至可以到0,从而导致过拟合。因此,如何提高神经网络的泛化能力反而成为影响模型能力的最关键因素。
正则化(Regularization)是一类通过限制模型复杂度,从而避免过拟合,提高泛化能力的方法,包括引入一些约束规则,增加先验、提前停止等。
在传统的机器学习中,提高泛化能力的方法主要是限制模型复杂度,比如采用ℓ1 和ℓ2 正则化等方式。而在训练深层神经网络时,特别是在过度参数(Over-Parameterized)时,ℓ1 和ℓ2 正则化的效果往往不如浅层机器学习模型中显著。因此训练深度学习模型时,往往还会使用其它的正则化方法,比如数据增强、提前停止、丢弃法、集成法等。
L1正则化和L2正则化
l1和l2正则l1和l2
Early Stop
提前停止(early stop)对于深层神经网络来说是一种简单有效的正则化方法。由于深层神经网络的拟合能力非常强,因此比较容易在训练集上过拟合。在使用梯度下降法进行优化时,我们可以使用一个和训练集独立的样本集合,称
为验证集(validation set),并用验证集上的错误来代替期望错误。当验证集上的错误率不再下降,就停止迭代。
然而在实际操作中,验证集上的错误率变化曲线并不一定是平衡的曲线,很可能是先升高再降低。因此,提前停止的具体停止标准需要根据实际任务上进行优化。
Dropout
dropoutdropout
[图片上传失败...(image-331d9e-1558525999107)]
数据增强
深层神经网络一般都需要大量的训练数据才能获得比较理想的效果。在数据量有限的情况下,可以通过数据增强(Data Augmentation)来增加数据量,提高模型鲁棒性,避免过拟合。目前,数据增强还主要应用在图像数据上,在文本等其它类型的数据还没有太好的方法。
图像数据的增强主要是通过算法对图像进行转变,引入噪声等方法来增加数据的多样性。增强的方法主要有几种:
- 旋转(Rotation):将图像按顺时针或逆时针方向随机旋转一定角度;
- 翻转(Flip):将图像沿水平或垂直方法随机翻转一定角度;
- 缩放(Zoom In/Out):将图像放大或缩小一定比例;
- 平移(Shift):将图像沿水平或垂直方法平移一定步长;
- 加噪声(Noise):加入随机噪声。
优化器
深层神经网络是一个高度非线性的模型,其风险函数是一个非凸函数,因此风险最小化是一个非凸优化问题,会存在很多局部最优点。
- 网络优化的难点:
- 网络结构多样性
- 高维变量的非凸优化
参数初始化策略
initiateinitiate
initiate
自适应学习率算法
目前,深层神经网络的参数学习主要是通过梯度下降方法来寻找一组可以最小化结构风险的参数。在具体实现中,梯度下降法可以分为:批量梯度下降、随机梯度下降以及小批量梯度下降三种形式。根据不同的数据量和参数量,可以选择一种具体的实现形式。除了在收敛效果和效率上的差异,这三种方法都存在一些共同的问题,比如1)如何初始化参数;2)预处理数据;3)如何选择合适的学习率,避免陷入局部最优等。
小批量梯度下降
目前,在训练深层神经网络时,训练数据的规模比较大。如果在梯度下降时,每次迭代都要计算整个训练数据上的梯度需要比较多的计算资源。此外,大规模训练集中的数据通常也会非常冗余,也没有必要在整个训练集上计算梯度。因此,在训练深层神经网络时,经常使用小批量梯度下降算法。
SGD
SGD
学习率衰减
learn_rateAdaGrad
AdaGradAdaGrad
RMSProp
RMSpropAdam
AdamBatch Normalization
batch normalizationbatch normalization
batch normalization
Layer Normalization
layer normalizationlayer normalization
参考文献
《神经网络与深度学习》
网友评论