神经网络

神经网络
创建日期 星期三 12 十二月 2018

神经网络来源于模拟人类的神经元;
使用激活函数,来进行阶跃,
神经网络的每一层的个数被称为宽度,总层数被称为深度;
每一层的激活函数必须一样?
一般来说,神经网络由线性函数和非线性函数组成,线性函数用于层与层之间的传递,而非线性函数一般用来作为激活函数;

简单来说,可以把这些看做是带权笛卡尔积,这些权值都是未知数,然后从这些开始进行权值的求值,首先随机赋值,可以说是一个有理数的x,然后进行求导,求得最接近的权值,得到相应的函数;
最后的输出层就是分类结果之类的;
可以说激活函数就是进行分类;所以也叫分类器;
简单的激活函数signmoid和tanh;
1、神经单元的选择
  那么我们应该使用什么样的感知器来作为神经网络节点呢?在上一篇文章我们介绍过感知器算法,但是直接使用的话会存在以下问题:
  1)感知器训练法则中的输出
  由于sign函数时非连续函数,这使得它不可微,因而不能使用上面的梯度下降算法来最小化损失函数。
  2)增量法则中的输出为;
  每个输出都是输入的线性组合,这样当多个线性单元连接在一起后最终也只能得到输入的线性组合,这和只有一个感知器单元节点没有很大不同。
  为了解决上面存在的问题,一方面,我们不能直接使用线性组合的方式直接输出,需要在输出的时候添加一个处理函数;另一方面,添加的处理函数一定要是可微的,这样我们才能使用梯度下降算法。
  满足上面条件的函数非常的多,但是最经典的莫过于sigmoid函数,又称Logistic函数,此函数能够将内的任意数压缩到(0,1)之间,因此这个函数又称为挤压函数。为了将此函数的输入更加规范化,我们在输入的线性组合中添加一个阀值,使得输入的线性组合以0为分界点。

 

sigmoid

  有了此特性在计算它的梯度下降时就简便了很多。
  另外还有双曲函数tanh也可以用来替代sigmoid函数,二者的曲线图比较类似。
2、反向传播算法又称BP算法(Back Propagation)

现在,我们可以用上面介绍的使用sigmoid函数的感知器来搭建一个多层神经网络,为简单起见,此处我们使用三层网络来分析。

  网络的运行流程为:当输入一个样例后,获得该样例的特征向量,再根据权向量得到感知器的输入值,然后使用sigmoid函数计算出每个感知器的输出,再将此输出作为下一层感知器的输入,依次类推,直到输出层。
  那么如何确定每个感知器的权向量呢?这时我们需要使用反向传播算法来逐步进行优化。在正式介绍反向传播算法之前,我们先继续进行分析。
  在上一篇介绍感知器的文章中,为了得到权向量,我们通过最小化损失函数来不断调整权向量。此方法也适用于此处求解权向量,首先我们需要定义损失函数,由于网络的输出层有多个输出结点,我们需要将输出层每个输出结点的差值平方求和。于是得到每一个训练样例的损失函数为:(前面加个0.5方便后面求导使用)
  在多层的神经网络中,误差曲面可能有多个局部极小值,这意味着使用梯度下降算法找到的可能是局部极小值,而不是全局最小值。
  现在我们有了损失函数,这时可以根据损失函数来调整输出结点中的输入权向量,这类似感知器中的随机梯度下降算法,然后从后向前逐层调整权重,这就是反向传播算法的思想。
具有两层sigmoid单元的前馈网络的反向传播算法:
1)将网络中的所有权值随机初始化。
2)对每一个训练样例,执行如下操作:
  A)根据实例的输入,从前向后依次计算,得到输出层每个单元的输出。然后从输出层开始反向计算每一层的每个单元的误差项。
  B)对于输出层的每个单元k,计算它的误差项:
  C)对于网络中每个隐藏单元h,计算它的误差项:
  D)更新每个权值:
xji:结点i到结点j的输入,wji表示对应的权值。
outputs:表示输出层结点集合。
整个算法与delta法则的随机梯度下降算法类似,算法分析如下:
  1)权值的更新方面,和delta法则类似,主要依靠学习速率,该权值对应的输入,以及单元的误差项。
  2)对输出层单元,它的误差项是(t-o)乘以sigmoid函数的导数ok(1-ok),这与delta法则的误差项有所不同,delta法则的误差项为(t-o)。
  3)对于隐藏层单元,因为缺少直接的目标值来计算隐藏单元的误差,因此需要以间接的方式来计算隐藏层的误差项对受隐藏单元h影响的每一个单元的误差进行加权求和,每个误差权值为wkh, wkh就是隐藏单元h到输出单元k的权值。
3、反向传播算法的推导
  算法的推导过程主要是利用梯度下降算法最小化损失函数的过程.
4、算法的改进
  反向传播算法的应用非常的广泛,为了满足各种不同的需求,产生了很多不同的变体,下面介绍两种变体:
  1)增加冲量项
  此方法主要是修改权值更新法则。他的主要思想在于让第n次迭代时的权值的更新部分依赖于第n-1次的权值。
  其中0<=a<1:称为冲量的系数。加入冲量项在一定程度上起到加大搜索步长的效果,从而能更快的进行收敛。另一方面,由于多层网络易导致损失函数收敛到局部极小值,但通过冲量项在某种程度上可以越过某些狭窄的局部极小值,达到更小的地方。
  2)学习任意的深度的无环网络
  在上述介绍的反向传播算法实际只有三层,即只有一层隐藏层的情况,要是有很多隐藏层应当如何进行处理?
  现假设神经网络共有m+2层,即有m层的隐藏层。这时,只需要变化一个地方即可得到具有m个隐藏层的反向传播算法。第k层的单元r的误差 的值由更深的第k+1层的误差项计算得到:
5、总结
  对于反向传播算法主要从以下几个方面进行总结:
1)局部极小值
  对于多层网络,误差曲面可能含有多个不同的局部极小值,梯度下降可能导致陷入局部极小值。缓解局部极小值的方法主要有增加冲量项,使用随机梯度下降,多次使用不同的初始权值训练网络等。
2)权值过多
  当隐藏节点越多,层数越多时,权值成倍的增长。权值的增长意味着对应的空间的维数越高,过高的维数易导致训练后期的过拟合。
4)算法终止策略
  当迭代次数达到设定的阀值时,或者损失函数小于设定的阀值时,或
3)过拟合
  当网络的训练次数过多时,可能会出现过拟合的情况。解决过拟合主要两种方法:一种是使用权值衰减的方式,即每次迭代过程中以某个较小的因子降低每个权值;另一种方法就是使用验证集的方式来找出使得验证集误差最小的权值,对训练集较小时可以使用交叉验证等。

通过神经元激活函数等可以模拟出分段线性函数,所有函数都可以用足够细的分段线性函数来近似,所以说只要节点足够多,神经元之间的关系足够复杂,就可以模拟出任何函数,俗称万能近似定理; (universalapproximation theorem)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值