深度学习:核心技术、工具与案例解析
上QQ阅读APP看书,第一时间看更新

2.1 深度学习基础

深度学习起源于神经网络算法,属于最近几年人工智能的热点研究方向,学术界和工业界大量的研发人员都投入到了深度学习基础技术与应用的研发之中。在多个应用场景与应用领域,深度学习技术正在不断取得新的突破。

传统机器学习的处理方法一般需要进行大量的特征工程,利用预处理之后的数据训练一个模型,进而完成分类或回归等问题。相比而言,深度学习可以通过各种可训练的层,我们也可以将其看作是特征提取器,进而替代人工进行特征工程,达到自动化和提升机器学习的过程。同时深度学习通过多层非线性变换和组合,得到了更加有效的特征表示,获得了更强的模型拟合能力。

深度学习相比较于传统人工神经网络算法,包含了以下一些不同之处。第一是深度神经网络隐藏层层数更多。一般可以认为3个隐藏层以上就是一种深度学习结构,但是会引起参数爆炸造成模型时间与恐惧复杂度无法接受,为了解决这个问题,研发人员结合不同数据的特点设计了一些优化的网络组件,进而有了第二点的设计。第二是针对图像、文本等数据设计了相应的优化的网络结构,例如卷积层、池化层等,其大大减少了计算量与自由参数数量,提升了计算速度。第三是由于深度神经网络层数增多,相当于在参数一定的情况下,能够获得更多的参数组合,相比于单纯提升单隐藏层参数的神经网络参数其有更强的模型拟合能力。

我们可以通过图2-1对比不同的机器学习方式,了解其中的共性与差异。

图2-1 机器学习与深度学习发展图2-1来源:http://www.deeplearningbook.org/contents/intro.html。历程

图2-1显示了不同AI方式的对比区别,基于规则的系统、传统机器学习系统、表征学习系统和深度学习系统。从图2-1中可以看到从左到右,自动化学习所占的比重越来越高,人工编程或设计特征的工作越来越少。阴影框表示能够从数据中自动学习的组件(模型或深度学习中的层等)。

同时我们还可以看到,深度学习之所以深的原因是模型将特征工程和模型融合在一起了。

2.1.1 感知器

理解深度神经网络,应该先理解神经网络的基本组成单元——神经元。神经元模型产生于感知器(Perceptron)模型,这个模型是神经网络具有代表性的模型。如图2-2所示的即为感知器模型。

图2-2 感知器

如图2-2所示,感知器包含以下几个组成部分。

输入和权值:图2-2中的input代表输入,weight代表权重。一个感知器可以接收多个输入,然后将每个输入乘以权值,并求和(图2-2中的sum),最后传到下一步计算。

激活函数:图2-2中的activation function位置代表激活函数,感知器的激活函数可以有很多选择,例如Sigmoid、ReLU函数等。图2-2中使用阶跃函数作为例子。

输出:将激活函数的输出作为感知器的输出。

2.1.2 激活函数

激活函数设计的初衷是能够向神经网络加入非线性因素,使得神经网络可以更好地拟合复杂问题。随着深度学习的发展,越来越多的激活函数将被设计出来。

Sigmoid函数曾广泛地应用于全连接神经网络中,其公式形式以及优缺点简介如下:

▼ 优势:导数计算简单,梯度下降更加容易实现与计算。

▼ 劣势:由图2-3所示的Sigmoid函数几何图形可以看到,自变量取值在0附近时,函数斜率较大;当远离0的两侧取值时,斜率趋近于0,容易发生梯度消失,迭代算法的收敛速度很慢,有些情况下甚至不会收敛。同时其输出均值不为0,这也是其劣势所在。

图2-3 Sigmoid函数几何图形

为了弥补Sigmoid等激活函数计算梯度时产生的问题,更多的激活函数被设计了出来,由图2-4中,我们可以看到几种激活函数的几何形状对比。

图2-4 Sigmod函数几何图形

ReLU(Rectified Liner Units)是一种效果更好、收敛更快的激活函数。函数如下:

ReLU的取值范围为[0, ∞],这样ReLU就可以将取值变换到整个正数范围,这会导致训练过程中数值无限增长的问题,而Sigmod只能是[0, 1]。

ReLU能够缓解梯度消失的问题。Sigmoid的导数只有在0附近的时候才有比较好的激活性,在正负饱和区其梯度都接近于0,所以这会造成梯度弥散,而ReLU函数的梯度在大于0的部分为常数,所以不会产生梯度消失现象。Relu函数在参数为负数时的导数为0,所以一旦神经元激活值为负,那么梯度就会为0,从而这个神经元不会经历训练,也就是我们所说的稀疏性。

ReLU函数的导数计算更快,程序实现就是一个if-else条件判断语句,而Sigmoid函数需要进行浮点运算。虽然程序分支结构并不是推荐的结构,但是由于e指数计算复杂,因此实际上修正线性函数是更加快速的选择。

AlexNet的论文中证明,对于相同的网络结构,ReLU为激活函数,收敛速度相比Tanh快6倍以上。

由于以上的优点,ReLU成为了现有大部分CNN首选的的激活函数。

2.1.3 输入层、隐藏层、输出层

神经网络结构如图2-5所示。

图2-5 神经网络结构

将多个相同的神经元组织成层,并且多个层之间还可以组合成深度学习的网络结构。图2-5中的每个圆圈都是一个神经元,每条边表示两个神经元之间的连接,边上带有权重。神经元被分成了多层,层与层之间的感知器有边进行连接,但是在一般情况下,层内之间的神经元是没有边进行连接的。最左边的层(Layer L1)称为输入层,输入层接收传入神经网络的输入数据;最右边的层(Layer L3)是输出层,负责输出预测结果。输入层和输出层之间的层称为隐藏层(Layer L2),隐藏层可以有多个。

有很多隐藏层的神经网络称为深度神经网络。

2.1.4 前向传播与反向传播求导

如图2-6所示的为一个最为简化的前向传播与反向传播的过程,其过程可以推广到更为复杂的深度学习网络结构。图2-6a所示的为前向传播的过程,使用xy作为输入,通过激活函数f作用产生输出z。图2-6b展示的为反向传播的过程。L代表损失函数,其接收预测值输出z和样本的真实值,用于求损失函数对x的导数,和损失函数对y的导数。由于Lx之间有函数的嵌套,因此我们可以通过链式法则,逐层进行导数的求解,如图2-6b所示,,同理,通过链式法则可以求解Ly的导数。对应神经网络结构,xy经常表示为w权重,求解的原理也相同参考链接:https://kratzert.github.io/2016/02/12/understanding-the-gradient-flow-through-the-batch-normalization-layer.html。

图2-6 前向传播与反向传播