注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

行走的馒头

Stay Hungry, Stay Foolish

 
 
 

日志

 
 

九、Artificial Neural Network  

2012-09-12 23:51:42|  分类: 统计学习初探索 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Artificial Neural Network在统计和人工智能中都使用的非常广泛,其属于较复杂的非线性模型,能够通过拟合参数更好的fit训练的数据,然而也正是复杂的非线性模型使得其解释能力不强。先来看看较artificial neural network更加general一点的PPR模型。

 

Projection Pursuit Regression

    假定我们的自变量为维的参数向量表示为,PRR就可以表示为

    可以看出,PRR是一个additive的模型,但是其使用新的特征而不是原来的特征。函数、为空间上的ridge函数,它只在向量定义的方向上变化。标量是一个实数,它是原特征空间投影到向量上的值,我们的目标是要寻找向量使得模型能够很好地拟合数据,因此这个模型为称之为projection pursuit。下面是两个示意图。左图中。右图中

    我们可以容易的构建高阶的变量,比如可以表示为,然后可以用来构建。

    如果M选取的足够大,PPR能够对任意形式的数据进行很好的拟合,这种模型被称之为universal approximator。这种模型的不足之处是其就像一个黑盒子一样,你不知道发生了什么,很难弄明白为什么会产生这样的结果,而且计算的开销也非常大。

    我们来看看怎样去拟合一个PPR的模型。假设我们的目标是最小化训练误差,训练误差可以表示为

 9.1

这里我们需要求解的参数是函数和向量

    想象一下的情形,如果给定了向量,这时我们就知道了每个样本点在新的特征处的值为。这时我们可以使用一维的smoothing spline等方法来拟合数据,得到此时的估计。另一方面,如果给定了函数,针对目标函数,我们可以更新的值。让表示当前的值,可以看到的一阶泰勒展开可表示为

因此,(9.1)可表示为

为了对上面的式子求解,我们需要用weighted least squares的方法来拟合得到。然后我们迭代的进行上面的两个步骤直至收敛。

    对于的情况,我们只需要用前面所讨论的forward stage-wise的方法来依次增添

 

Artificial Neural Network

    神经网络,也称之为人工神经网络(ANN),在其架构下囊括了很多的模型和学习方法。我们先来看看经常被使用的称之为"vanilla"的神经网络,有时候其也被叫做single hidden layer back-propagation network或者single layer perceptron。神经网络往往被吹嘘的神乎其神,貌似无所不能,下面我们会看到,其实它就是一种非线性的统计学习模型而已,跟前面讨论的projection pursuit regression非常相似。

    这里神经网络具有三层单元,每个结点被称之为单元。其结构可表示如下。其中表示原来的特征,可以把这一层叫做输入层;表示衍生出的新的特征,这一层又可以叫做中间层;表示因变量,这一层也可以叫做输出层。

Figure(9.1)

    神经网络可以被用于regression或者分类。在regression中,通常,我们的输出只有一个目标值。然而神经网络也能够同时处理多变量的情况,这时。在下面的用于regression时,不失为一般性,我们都假设。在K分类中,最上层就对应有K个单元,每一个都是取值为的随机变量。

    这些单元之间的关系可以表示为

通常,我们需要在图(9.1)的第二层和第三层(从上往下)分别增加一个常数单元,分别对应于。这里有两类函数,都被称之为activation function。其中作用于自变量的线性组合,作用于中间层结点的线性组合。衍生的特征就是用去映射原特征的线性组合。通常,选取为sigmoid函数,。有时候,也可以选取gaussian radial basis functions,这时的神经网络被称为radial basis function network

    最终我们的模型表示为,其中 是一个K维向量。用于regression时, 对应于identity function,则,表示对第k个因变量拟合的值。通常情况下,当然也可以处理多变量的情况,这时。用于二分类时,这时可令对应于logit function,可以表示为,注意这里因为,所以是一个数而不是向量了。这时可以表示的概率,而概率自然就是。用于K分类时,对应于multilogit function ,可以表示为属于第k类的概率。

中间层的单元被称之为hidden units,因为它们不是直接可见的。我们可以把看做是原来特征空间的基扩展,这样一来神经网络就是标准的线性回归模型或者线性分类模型,这时我们使用扩展后的基函数来进行线性拟合。然而同线性模型不同的是,神经网络中这些基函数本身所包括的参数不是我们事前确定的,而是从数据中学习得到的。所以神经网络是一种adaptive的方法。

如果中间层的activation function是一个identity function,那么此时这个神经网络就是一个纯粹的线性模型,所以神经网络是所有线性模型的一个非线性扩展。下面是一个函数的示意图。红线表示,蓝线表示,紫线表示

Figure9.2

可以看出来,当很小的时候,神经网络接近线性模型。神经网络和PPR也非常之相似,除了PPR使用的是非参数的函数,而神经网络使用的是较简单的等函数。把神经网络看做是一个PPR模型,可表示为

我们可以看到比起非参数模型的参数个数要少很多,所以在神经网络通常可以使用20100个这种hidden units,而在PPR中,一般情况下

 

Fitting Neural Networks

    在神经网络中,所有的参数也叫做weight。我们拟合神经网络就是要找出对于训练数据最优的那一组weights。我们把所有的参数集合表示为,从上面的结构容易看出,其包括下面两部分:

这儿共有个参数。

    ,这儿共有个参数。

对于regression,如果我们使用squared error,那么我们的目标函数可以表示为

对于分类问题,如果我们使用cross-entropy error,那么目标函数就可以表示为

可以看到,无论对于regression还是分类问题,目标函数都是关于参数的非线性函数,要直接求解这个目标函数的最小解非常困难,所以我们采用梯度下降的方法来求解。

下面以regression中使用squared error为例子描述一下求解的过程。此时目标函数可以表示为

这里表示在第i个样本处的误差,用分别对参数求导可以得到

 (9.2)

此时,的更新可表示如下

 (9.3)

其中,在梯度下降中被称之为学习速率。

前面提到过,梯度下降时可以用某些随机选取的样本来更新(这时叫做stochastic gradient descent),也可以用所有的样本来更新参数(这时叫做batch gradient descent)。这里从公式(9.3)可以看出使用的是batch gradient descent,当然我们也可以使用stochastic gradient descent来随机选取一些样本对参数进行更新。

在神经网络中,使用梯度下降的方法也被称之为back progation algorithm。可以看到这个算法是一个迭代的two-pass algorithm。在forward pass中,我们根据当前的这些参数的值,计算。而在接着的backward pass中,我们计算这些梯度的值。 此时我们可以把公式(9.2)改写成下面的形式

其中满足 (9.4)

其中,可以看做是在目前的这些参数值下,输出层产生的error。而可以看做是当前参数下,中间层所产生的error。这样,首先我们根据

计算出,然后可以根据公式(9.4)计算出。这样,我们就可以根据来计算梯度,从而来更新这些参数的值。

    神经网络中的参数个数往往很多,这时用back-propagation可能非常慢,所以通常都不是最佳选择。使用Newton方法的计算开销也非常大,因为这时Hessian的计算非常费时。这时可以考虑使用conjugate gradients等方法求解。

 

Starting Values

    从Figure(9.2)可以看出,当参数都趋近于0时,这时神经网络就趋近于一个线性模型。所以我们参数的初始值一般都是选择那些很小的趋近于0的随机数,如果在更新过程中,参数值增大,那么模型就会朝着非线性的方向变化。注意,初始参数不要全部都设置为0,这时梯度明显也都为0,可以看到在更新过程中,参数的值根本不会发生变化。

 

Overfitting

    神经网络是一种adaptive的非线性模型,里面的参数会非常多,这时如果拟合时仅仅是使目标误差函数取最小值,那么就很容易出现overfitting的问题。一般可以采取下面两种策略在避免这个问题。

    第一方法是我们在使用梯度下降的方法拟合数据时,经过一定的迭代次数后就不再更新参数的值,这里停止的条件可以根据另外一个测试集来判断,如果更新的参数值使得在训练集中的误差增大,则可以停止更新了。

    另外一种方法是regularization。类似于ridge regression,我们的目标函数可以改写为,其中是tuning parameter,可以使用cross validation的方法来得到。

 

Scaling of the Inputs

    对于自变量X的每个特征,如果去取值范围相差很大的话,在拟合带regularization的神经网络时对参数的影响也会很大。举个例子,如果X有两个特征,其中的取值范围为的取值范围为,那么明显对应的参数倾向于取较大的值,对应的参数倾向于取较小的值。所以,为了公平起见,最开始我们最好对每个特征都标准化,是每个特征的均值为0,标准差为1。

 

Number of Hidden Units and Layers

    一般说来,中间层的单元数目越多越好。因为如果中间层单元数太少,这时模型就不能够很好的反应数据的非线性特征,所以模型的效果就不会好。如果中间层单元数过多,通过前面的regularization方法我们可以使多余单元对于的参数趋近于0,此时模型的效果毫无影响。一般而言,中间层单元数目在5到100之间,需要根据特定的问题而定,当然也可以通过cross validation的方法来确定。


  评论这张
 
阅读(1777)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017