4激活函数
建立一个神经网络时,需要关心的一个问题是,在每个不同的独立层中应当采用哪种激活函数。逻辑回归中,一直采用sigmoid函数作为激活函数,此外还有一些更好的选择。
tanh函数(Hyperbolic Tangent Function,双曲正切函数)的表达式为:
函数图像为:
tanh函数其实是sigmoid函数的移位版本。对于隐藏单元,选用tanh函数作为激活函数的话,效果总比sigmoid函数好,因为tanh函数的值在 到 之间,最后输出的结果的平均值更趋近于 ,而不是采用sigmoid函数时的 ,这实际上可以使得下一层的学习变得更加轻松。对于二分类问题,为确保输出在 到 之间,将仍然采用sigmiod函数作为输出的激活函数。
然而sigmoid函数和tanh函数都具有的缺点之一是,在 接近无穷大或无穷小时,这两个函数的导数也就是梯度变得非常小,此时梯度下降的速度也会变得非常慢。
线性修正单元,也就是上面举例解释什么是神经网络时用到的ReLU函数也是机器学习中常用到的激活函数之一,它的表达式为:
函数图像为:
当 z大于0时,ReLU函数的导数一直为1 ,所以采用ReLU函数作为激活函数时,随机梯度下降的收敛速度会比sigmoid及tanh快得多,但负数轴的数据都丢失了。
ReLU函数的修正版本,称为Leaky-ReLU,其表达式为:
函数图像为:
其中alpha是一个很小的常数,用来保留一部非负数轴的值。
可以发现,以上所述的几种激活函数都是非线性的,原因在于使用线性的激活函数时,输出结果将是输入的线性组合,这样的话使用神经网络与直接使用线性模型的效果相当.
此时神经网络就类似于一个简单的逻辑回归模型,失去了其本身的优势和价值。
5前向传播和反向传播
在训练过程中,经过前向传播后得到的最终结果跟训练样本的真实值总是存在一定误差,这个误差便是损失函数。
想要减小这个误差,当前应用最广的一个算法便是梯度下降,于是用损失函数,从后往前,依次求各个参数的偏导,这就是所谓的反向传播(Back Propagation),一般简称这种算法为BP算法。
sigmoid函数的导数为:
由复合函数求导中的链式法则,反向传播过程中:
这便是反向传播的整个推导过程。
在具体的算法实现过程中,还是需要采用逻辑回归中用到梯度下降的方法,将各个参数进行向量化、取平均值,不断进行更新。
6深层神经网络
深层神经网络含有多个隐藏层,构建方法如前面所述,训练时根据实际情况选择激活函数,进行前向传播获得成本函数进而采用BP算法,进行反向传播,梯度下降缩小损失值。
拥有多个隐藏层的深层神经网络能更好得解决一些问题。如图,例如利用神经网络建立一个人脸识别系统,输入一张人脸照片,深度神经网络的第一层可以是一个特征探测器,它负责寻找照片里的边缘方向,卷积神经网络(Convolutional Neural Networks,CNN)专门用来做这种识别。
深层神经网络的第二层可以去探测照片中组成面部的各个特征部分,之后一层可以根据前面获得的特征识别不同的脸型的等等。
这样就可以将这个深层神经网络的前几层当做几个简单的探测函数,之后将这几层结合在一起,组成更为复杂的学习函数。从小的细节入手,一步步建立更大更复杂的模型,就需要建立深层神经网络来实现。