文章目录
上节课介绍了Gradient Boosted Decision Tree(GBDT)算法。GBDT通过梯度下降得到不同的树,然后以沿梯度下降最快的方向和最大更新步长赋予每棵树不同的权重,可以用来处理分类或回归问题,使用平方误差衡量(squared error measure)。本文介绍神经网络(Neural Network)。
12.1 Motivation
在机器学习基石课程中学习了感知器(Perceptron)算法,神经网络可以看做很多感知器的线性融合(Linear Aggregation),也称为多层感知器算法(MLP)。
上图中的神经网络包含两层权重 和 ,一层隐藏层,以及输入输出层,共三层。隐藏层和输出层的激活函数都是 。如果要实现逻辑与(and)运算,则需要令神经网络 中的第二层权重 分别为 。此时的神经网络可以写成下图中的假设函数形式。
通过逻辑与运算,相当于获得了非线性的分隔超平面。此外,逻辑或(or)、逻辑非(not)也有类似的机制。因此不难理解,神经网络其实也是融合模型,只不过更加复杂。下面看一个更复杂的例子,二维平面中的二分类,单一的感知器模型是无法做出圆形的分类便捷的,但是多层感知器可以实现,感知器的数目越多,其圆形边界就越精确。通过这些课程的学习,任何算法都不能忽视过拟合的问题,MLP也不例外。如果感知器的数目空值得当,则可以得到比较平滑和稳定的模型。
但是单层感知器无法处理异或(xor)问题,因为异或运算得到的分隔超平面是非线性可分的。即单层感知器对模型复杂度有一定限制。
下面尝试通过多层感知器实现异或运算。
以上通过两层感知器实现了异或运算。通过组合多层的感知器,神经网络模型可以处理更复杂的问题。
习题1:
12.2 Neural Network Hypothesis
接下来讨论神经网络的输出层。
神经网络通过对输入数据进行进行一层层的转化(transform),得到一个分数 ,最后输出层使用不同的激活函数对这个分数进行激活。对于不同的问题,选择不同的激活函数;同样,不同的问题也选择不同的目标函数(误差函数,损失函数)。首先看一下激活函数的选择:
两种常用的激活函数适 激活函数和 激活函数。上式中 与 存在关系 ,其中 。因为存在饱和问题,所以现代基本上使用ReLU系列的激活函数。下面看一下神经网络的假设:
其中, 表示网络的层数, 表示网络总层数,不包括输入层。每一层的权重为 ,下标 ,表示前一层输出的个数加上偏差(bias)项;下标 ,表示该层节点的个数,不包括偏差项。每层的分数为 ,激活输出为 。下面看一下神经网络的物理意义。
神经网络是从数据中学习映射函数的过程,映射函数的关键是各项的权重 ,数据与权重的关系通过得分 表征,然后经过激活函数激活后输出。对于 激活函数, 与 的乘积越大,其激活值越接近于1,这表明转换的效果越好,得到的神经网络模型越好。即两向量的内积越大,越接近平行,此时两者就越有相似的模式。即神经网络是通过各层之间的权重连接从数据中进行模式提取的过程。
习题2:
12.3 Neural Network Learning
由上文可知神经网络的关键是权重向量 ,那么应该如何求解呢?下面介绍反向传播算法的计算过程。
神经网络优化的目标是通过最小化输入样本的误差 来得到最佳的权重向量 。对于多层感知器的权重应该如何计算,首先看输出层的情况,通过随机梯度下降求偏导数,现在问题变为如何高效地求解偏导数。
其中 表示平方误差。可以使其对权重向量 求偏导,然后通过梯度下降算法,不断修正 的值,最终得到最小化 时对应的权重向量 。其核心思想是利用求导的链式法则,对于输出层和一眼层的计算分别如上图所示。在一般情况下,求偏导的结果中, 是还未算出的,表示误差对分数的偏导数,其计算思路如下:
首先可以通过各层得分,一步步转化得到误差,要计算误差对得分的偏导,可以由链式法则进行求解,最后得到结果如上图所示。这就是所谓的反向传播算法(Backpropagation Algorithm,Backprop)。其伪代码如下:
梯度下降算法都是通过反向传播计算误差的。常用的梯度下降算法为小批量梯度下降,在训练神经网络时设置batch size就是为了进行小批量梯度下降,这些小批量的样本的权重更新是并行计算的, 最后再取平均得到最终的权重更新。
习题3:
12.4 Optimization and Regularization
本小节介绍神经网络的优化方法以及正则化方法。首先看优化方法,本节课中使用的误差衡量(损失函数)是平方误差,当然针对不同的问题也可以使用不同的损失函数。机器学习算法和神经网络的优化目标都是最小化输入样本上的误差 。但是在优化过程中面临一些困难,比如多层感知器模型是非凸函数,导致不容易找到全局最优解,使用反向传播的梯度下降或者随机图下降仅仅容易找到局部最优解。不同的权重初始化方法,得到不同的局部最优解;有时候模型对初始权重很敏感较大的权重容易使得激活后过饱和,导致梯度很难继续更新。现在的思路是尝试增加随机性,或者使用更少的层数,让神经网络优化变得相对容易。
下面看一下神经网络模型的VC Dimention,简单来说,使用 作为激活函数的网络,其 , 表示神经元个数, 表示权重个数。这类模型的优缺点也很明显,优点是只要神经元足够则可以解决任意复杂的问题;但是不可免的是很容易过拟合。
过拟合可以通过正则化解决,比如常用的L1正则化和L2正则化。
一种常用的正则化方式为:
正则化实际上起到了缩放权重的效果,L1正则化又称为稀疏正则化,即可以严格的将权重置0;L2正则化又称为权重衰减正则化,即可以限制权重的大小,如果还记得之前的课程的话,L2正则化实际上是通过拉格朗日乘子控制的。当然还有一种常用也好用的正则化方式Early Stopping,在之前很多文章详细介绍过了,此处就不赘述了。
习题4:
Summary
本节课介绍了神经网络模型,实际上是多层感知器,学习的过程就是学习映射规则的过程,即学习不同的权重向量。神经网络具有强大的拟合能力,同时又可以使用多种正则化方法进行限制,这使得其应用范围很广泛。