神经网络中的优化算法

本文详细介绍了神经网络中优化算法的重要性,从一阶优化算法如梯度下降法(包括Batch、Stochastic和Mini Batch)到二阶优化算法,特别讨论了梯度下降法的变种如Momentum、NAG,以及Adagrad、AdaDelta、RMSProp和Adam等自适应学习率算法。文章还探讨了鞍点问题和如何选择合适的优化方法,强调Adam通常是首选,因为它能较好地平衡模型的bias和variance。

什么是优化算法?


给定一个具有参数θ的目标函数,我们想要找到一个θ使得目标函数取得最大值或最小值。优化算法就是帮助我们找到这个θ的算法。

在神经网络中,目标函数f就是预测值与标签的误差,我们希望找到一个θ使得f最小。

优化算法的种类

一阶优化算法


它通过计算目标函数f关于参数θ的梯度(一阶偏导数)来最小化代价函数。常用的SGD、Adam、RMSProp等基于梯度的优化算法都属于一阶优化算法。

梯度gradient与导数derivative的区别在于,前者用于多变量的目标函数,后者用于单变量的目标函数。

梯度可以用雅克比矩阵表示,矩阵中的每个元素代表函数对每个参数的一阶偏导数。

二阶优化算法

它通过计算目标函数f对参数θ的二阶偏导数来最小化代价函数。常用的有牛顿迭代法。

二阶偏导数可以用Hessian矩阵表示,每个元素都代表函数对每个参数的二阶偏导数。

对比

一阶优化算法只需要计算一阶偏导数,计算更容易
二阶优化算法虽然计算复杂,但是不容易陷入鞍点。

梯度下降法及其变种

在神经网络中,最常用的还是基于下面这种形式的梯度下降法(一阶优化算法):


θ=θ−η⋅∇J(θ) 

η 为 learning rate
∇J(θ) 为 代价函数J(θ)对参数θ的梯度


这里写图片描述

Batch gradient descent

一次参数的更新,需要所有样本都作为输入。样本量太大时容易一下子占满内存,而且不支持online update。

Stochastic gradient descent(SGD)

来一个样本,就执行一次参数更新,计算量大大减少,支持online update。缺点在于参数更新频率太高,参数波动较大,具有高方差(具体解释见文末)。如下图:


这里写图片描述

learning rate设置过大时容易使参数调节过度。因此使用时一定要保证learning rate不要太大。

Mini Batch Gradient Descent

前两种方法的折中,一次将一个mini batch(通常为50~256个样本)作为输入来执行一次参数更新。优点在于降低了参数更新的高方差;由于使用了mini batch,可以利用向量化编程来提高计算效率。
这是目前神经网络中最为常用的优化方法。

梯度下降法的升级版本

上面的几种方法都有一个共同的缺点:
1.对learning rate的设置较为敏感,太小则训练的太慢,太大则容易使目标函数发散掉。
2.针对不同的参数,learning rate都是一样的。这对于稀疏数据来说尤为不方便,因为我们更想对那些经常出现的数据采用较小的step size,而对于叫较为罕见的数据采用更大的step size。
3.梯度下降法的本质是寻找不动点(目标函数对参数的导数为0的点),而这种不动点通常包括三类:极大值、极小值、鞍点。高维非凸函数空间中存在大量的鞍点,使得梯度下降法极易陷入鞍点(saddle points)且长时间都出不来,如下左图:

注意:
陷入鞍点不代表真的不动了,有的梯度下降法比如SGD或NAG等可以在训练时间足够长后跳出鞍点。如下右图:


这里写图片描述

Momentum

这个方法是用来解决SGD的参数高幅震荡问题。加速参数在主要方向上的变化,减弱参数在非主要方向上的变化。
参数更新方式:


这里写图片描述

和共轭梯度法的作用类似,通过使用历史搜索方法对当前梯度方向的修正来抵消在非主要方向上的来回震荡。


这里写图片描述
SGD without momentum

这里写图片描述
SGD with momentum

motentum方法的缺点主要在于,下坡的过程中动量越来越大,在最低点的速度太大了,可能又冲上坡导致错过极小点。

Nesterov accelerated gradient(NAG)

是对motentum算法进行的改进。给算法增加了预见能力,事先估计出下一个参数处的梯度,用于对当前计算的梯度进行校正。
参数更新:


这里写图片描述

首先沿上一次方向(γvt−1)跨出一大步(brown vector),然后站在那儿计算一下梯度(∇θJ(θ−γvt−1))(red vector),于是,修正过的梯度方向就是γvt−1+η∇θJ(θ−γvt−1)(green vector)


这里写图片描述

而momentum方法呢?
首先在当前位置计算一下梯度(η∇θJ(θ)),(small blue vector),然后与上次的搜索方向(γvt−1)加起来,迈出了一大步(γvt−1+η∇θJ(θ))(big blue vector)。

Adagrad

首次实现了adaptive learning rate adjustment。也就是不同参数具有不同的学习率。梯度大的参数补偿小一些,梯度小的参数步长大一些。
参数更新方式:
目标函数对每个参数的梯度:

gt,i=θJ(θi)

不同于SGD:
θt+1,i=θt,iηgt,i

Adagrad通过分母项来达到不同参数具有不同学习率的目的:
θt+1,i=θt,iηGt,ii+ϵgt,
摘要:数据的上界和下界概念在人工智能领域中使用得非常普 遍,在粗糙集理论中尤为明显,随着粗集理论的不断发展, 上下边界的概念得到更大范围内的应用。本文将经典的神经 网络和粗集理论有机地结合,提出了一种基于粗集理论的神 经网络,并应用神经网络的粗糙模式建立预测模型。在粗糙 模式下每个神经网络的输入值不是一个单值而是一对值,即 上下边界数据,经典的神经网络在预测模型中采用的是单值 数据作为输入值,但是在一些应用中会产生问题,如医院要 对病人进行病情的跟踪观察,并希望对其未来的情况进行预 测,这时经典的神经网络就难以适用了,对于一个病人来 说,心跳次数,脉搏次数,血压值,体温等项指标在一天当 中需要进行几次测试,问题在于对于同一项指标每次测量值 也是不同的,因此得到的是一组数据而非单个数据,由于经 典的神经网络对于外界的信息的传导需要的是单值输入,究 竟应该取测量值中的哪个值作为输入就难以确定,通常的方 法是将测量数据进行数学平均,以均值作为网络的输入,但 是这可能导致具有重要性质数据的泛化,而粗糙集理论则可 以很好地解决这个问题,粗糙集数据的上下边界可以将病人 一天的各项指标测量值的上界和下界数据作为粗糙神经元的 输入。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值