台湾大学林轩田机器学习技法课程学习笔记12 -- Neural Network
来源:互联网 发布:淘宝追加评论在哪里找 编辑:程序博客网 时间:2024/05/19 23:13
上节课我们主要介绍了Gradient Boosted Decision Tree。GBDT通过使用functional gradient的方法得到一棵一棵不同的树,然后再使用steepest descent的方式给予每棵树不同的权重,最后可以用来处理任何而定error measure。上节课介绍的GBDT是以regression为例进行介绍的,使用的是squared error measure。本节课讲介绍一种出现时间较早,但当下又非常火的一种机器算法模型,就是神经网络(Neural Network)。
Motivation
在之前的机器学习基石课程中,我们就接触过Perceptron模型了,例如PLA算法。Perceptron就是在矩
将左边的输入
从结构上来说,上面这个模型包含了两层的权重,分别是
举个简单的例子,如下图所示,
如何通过感知机模型来实现上述的
这个例子说明了一些简单的线性边界,如上面的
除此之外,或(OR)运算和非(NOT)运算都可以由感知机建立相应的模型,非常简单。
所以说,linear aggregation of perceptrons实际上是非常powerful的模型同时也是非常complicated模型。再看下面一个例子,如果二维平面上有个圆形区域,圆内表示+1,圆外表示-1。这样复杂的圆形边界是没有办法使用单一perceptron来解决的。如果使用8个perceptrons,用刚才的方法线性组合起来,能够得到一个很接近圆形的边界(八边形)。如果使用16个perceptrons,那么得到的边界更接近圆形(十六边形)。因此,使用的perceptrons越多,就能得到各种任意的convex set,即凸多边形边界。之前我们在机器学习基石中介绍过,convex set的VC Dimension趋向于无穷大(
总的来说,足够数目的perceptrons线性组合能够得到比较平滑的边界和稳定的模型,这也是aggregation的特点之一。
但是,也有单层perceptrons线性组合做不到的事情。例如刚才我们将的AND、OR、NOT三种逻辑运算都可以由单层perceptrons做到,而如果是异或(XOR)操作,就没有办法只用单层perceptrons实现。这是因为XOR得到的是非线性可分的区域,如下图所示,没有办法由
那么,为了实现XOR操作,可以使用多层perceptrons,也就是说一次transform不行,我们就用多层的transform,这其实就是Basic Neural Network的基本原型。下面我们就尝试使用两层perceptrons来实现XOR的操作。
首先,根据布尔运算,异或XOR操作可以拆分成:
这种拆分实际上就包含了两层transform。第一层仅有AND操作,第二层是OR操作。这种两层的感知机模型如下所示:
这样,从AND操作到XOR操作,从简单的aggregation of perceptrons到multi-layer perceptrons,感知机层数在增加,模型的复杂度也在增加,使最后得到的G能更容易解决一些非线性的复杂问题。这就是基本神经网络的基本模型。
顺便提一下,这里所说的感知机模型实际上就是在模仿人类的神经元模型(这就是Neural Network名称的由来)。感知机模型每个节点的输入就对应神经元的树突dendrite,感知机每个节点的输出就对应神经元的轴突axon。
Neural Network Hypothesis
上一部分我们介绍的这种感知机模型其实就是Neural Network。输入部分经过一层一层的运算,相当于一层一层的transform,最后通过最后一层的权重,得到一个分数score。即在OUTPUT层,输出的就是一个线性模型。得到s后,下一步再进行处理。
我们之前已经介绍过三种线性模型:linear classification,linear regression,logistic regression。那么,对于OUTPUT层的分数s,根据具体问题,可以选择最合适的线性模型。如果是binary classification问题,可以选择linear classification模型;如果是linear regression问题,可以选择linear regression模型;如果是soft classification问题,则可以选择logistic regression模型。本节课接下来将以linear regression为例,选择squared error来进行衡量。
上面讲的是OUTPUT层,对于中间层,每个节点对应一个perceptron,都有一个transform运算。上文我们已经介绍过的transformation function是阶梯函数sign()。那除了sign()函数外,有没有其他的transformation function呢?
如果每个节点的transformation function都是线性运算(跟OUTPUT端一样),那么由每个节点的线性模型组合成的神经网络模型也必然是线性的。这跟直接使用一个线性模型在效果上并没有什么差异,模型能力不强,反而花费了更多不必要的力气。所以一般来说,中间节点不会选择线性模型。
如果每个节点的transformation function都是阶梯函数(即sign()函数)。这是一个非线性模型,但是由于阶梯函数是离散的,并不是处处可导,所以在优化计算时比较难处理。所以,一般也不选择阶梯函数作为transformation function。
既然线性函数和阶梯函数都不太适合作为transformation function,那么最常用的一种transformation function就是tanh(s),其表达式如下:
tanh(s)函数是一个平滑函数,类似“s”型。当|s|比较大的时候,tanh(s)与阶梯函数相近;当|s|比较小的时候,tanh(s)与线性函数比较接近。从数学上来说,由于处处连续可导,便于最优化计算。而且形状上类似阶梯函数,具有非线性的性质,可以得到比较复杂强大的模型。
顺便提一下,tanh(x)函数与sigmoid函数存在下列关系:
其中,
那么,接下来我们就使用tanh函数作为神经网络中间层的transformation function,所有的数学推导也基于此。实际应用中,可以选择其它的transformation function,不同的transformation function,则有不同的推导过程。
下面我们将仔细来看看Neural Network Hypothesis的结构。如下图所示,该神经网络左边是输入层,中间两层是隐藏层,右边是输出层。整体上来说,我们设定输入层为第0层,然后往右分别是第一层、第二层,输出层即为第3层。
Neural Network Hypothesis中,
对于每层的分数score,它的表达式为:
对于每层的transformation function,它的表达式为:
因为是regression模型,所以在输出层(l=L)直接得到
介绍完Neural Network Hypothesis的结构之后,我们来研究下这种算法结构到底有什么实际的物理意义。还是看上面的神经网络结构图,每一层输入到输出的运算过程,实际上都是一种transformation,而转换的关键在于每个权重值
Neural Network Learning
我们已经介绍了Neural Network Hypothesis的结构和算法流程。确定网络结构其实就是确定各层的权重值
首先,我们的目标是找到最佳的
根据error function的思想,从输出层来看,我们可以得到每个样本神经网络预测值与实际值之间的squared error:
为了建立
计算
以上是输出层求偏导的结果。如果是其它层,即
上述推导中,令
当
如上图所示,第l层第j个神经元的分数
那么,利用上面
值得一提的是,上式中有个求和项,其中k表示下一层即l+1层神经元的个数。表明l层的
这样,我们得到了
神经网络中,这种从后往前的推导方法称为Backpropagation Algorithm,即我们常常听到的BP神经网络算法。它的算法流程如下所示:
上面采用的是SGD的方法,即每次迭代更新时只取一个点,这种做法一般不够稳定。所以通常会采用mini-batch的方法,即每次选取一些数据,例如
Optimization and Regularization
经过以上的分析和推导,我们知道神经网络优化的目标就是让
下面我们将主要分析神经网络的优化问题。由于神经网络由输入层、多个隐藏层、输出层构成,结构是比较复杂的非线性模型,因此
基于这个问题,不同的初始值权重
下面从理论上看一下神经网络模型的VC Dimension。对于tanh这样的transfer function,其对应的整个模型的复杂度
为了防止神经网络过拟合,一个常用的方法就是使用regularization。之前我们就介绍过可以在error function中加入一个regularizer,例如熟悉的L2 regularizer
但是,使用L2 regularizer 有一个缺点,就是它使每个权重进行等比例缩小(shrink)。也就是说大的权重缩小程度较大,小的权重缩小程度较小。这会带来一个问题,就是等比例缩小很难得到值为零的权重。而我们恰恰希望某些权重
那么为了得到sparse解,有什么方法呢?我们之前就介绍过可以使用L1 regularizer:
除了weight-elimination regularizer之外,还有另外一个很有效的regularization的方法,就是Early Stopping。简而言之,就是神经网络训练的次数t不能太多。因为,t太大的时候,相当于给模型寻找最优值更多的可能性,模型更复杂,VC Dimension增大,可能会overfitting。而t不太大时,能有效减少VC Dimension,降低模型复杂度,从而起到regularization的效果。
那么,如何选择最佳的训练次数t呢?可以使用validation进行验证选择。
总结
本节课主要介绍了Neural Network模型。首先,我们通过使用一层甚至多层的perceptrons来获得更复杂的非线性模型。神经网络的每个神经元都相当于一个Neural Network Hypothesis,训练的本质就是在每一层网络上进行pattern extraction,找到最合适的权重
注明:
文章中所有的图片均来自台湾大学林轩田《机器学习技法》课程
- 台湾大学林轩田机器学习技法课程学习笔记12 -- Neural Network
- 机器学习技法课程学习笔记12-- Neural Network
- 台湾大学林轩田机器学习技法课程学习笔记14 -- Radial Basis Function Network
- coursera机器学习技法笔记(12)——Neural Network
- 台湾大学林轩田机器学习技法课程学习笔记1 -- Linear Support Vector Machine
- 台湾大学林轩田机器学习技法课程学习笔记2 -- Dual Support Vector Machine
- 台湾大学林轩田机器学习技法课程学习笔记3 -- Kernel Support Vector Machine
- 台湾大学林轩田机器学习技法课程学习笔记4 -- Soft-Margin Support Vector Machine
- 台湾大学林轩田机器学习技法课程学习笔记5 -- Kernel Logistic Regression
- 台湾大学林轩田机器学习技法课程学习笔记6 -- Support Vector Regression
- 台湾大学林轩田机器学习技法课程学习笔记7 -- Blending and Bagging
- 台湾大学林轩田机器学习技法课程学习笔记8 -- Adaptive Boosting
- 台湾大学林轩田机器学习技法课程学习笔记9 -- Decision Tree
- 台湾大学林轩田机器学习技法课程学习笔记10 -- Random Forest
- 台湾大学林轩田机器学习技法课程学习笔记11 -- Gradient Boosted Decision Tree
- 台湾大学林轩田机器学习技法课程学习笔记13 -- Deep Learning
- 台湾大学林轩田机器学习技法课程学习笔记15 -- Matrix Factorization
- 台湾大学林轩田机器学习技法课程学习笔记16(完结) -- Finale
- 人工智能来临的焦虑和机会
- 一个platform总线型的i2c设备的注册
- Linux--Shell脚本(二)条件判断之if else
- python迭代器简单理解
- 爬取张佳玮138w+知乎关注者:数据可视化
- 台湾大学林轩田机器学习技法课程学习笔记12 -- Neural Network
- php中<<<定界符
- swiper.js在angular里使用的一些问题
- 回形取数
- java 开发环境配置
- 兄弟郊游问题
- 国王的魔镜
- 2016年全国高中数学联赛加试T1解答
- 随想录(kgdb的基本原理)