深度学习之神经网络经典算法解析

神经网络中一些经典算法

在现在的机器学习进程中,有许多问题都是很抽象的,具体表现在没有具体的解析形式,或者是有解析形式但是计算量很大,针对此问题,我们会选择采用一些迭代的优化方法处理解决,从而实现求解。

随机梯度下降法

随机梯度法,是建立在梯度下降法之上的算法。梯度下降法,顾名思义,是指沿着梯度最大的方向下降的方法,而梯度下降最大的点是如何选取的,这里举例说明,例如现在正站在山上的某一处,现在你需要在不考虑其他因素的情况下,最快达到山脚,那么我们可以明确地知道就是沿着最陡峭的方向,这样也就是梯度下降的思想,转换过来就是每走一步再进行一次方向的选择,这样的不断迭代来完成最终函数的最小值。

假设经过n次迭代,那么参数 θ n \theta_{n} θn就会变成 θ n = θ n − 1 + θ \theta_{n} = \theta_{n - 1} + \theta θn=θn1+θ,我们在损失函数 θ n − 1 \theta_{n - 1} θn1处做一阶的泰勒展开:

L ( θ n ) = L ( θ n − 1 + θ ) ≈ L ( θ n − 1 ) + L ′ ( θ n − 1 ) θ L\left( \theta_{n} \right) = L\left( \theta_{n - 1} + \theta \right) \approx L\left( \theta_{n - 1} \right) + L^{'}\left( \theta_{n - 1} \right)\theta L(θn)=L(θn1+θ)L(θn1)+L(θn1)θ

此处,目标是使得 L ( θ n ) &lt; L ( θ n − 1 ) L\left( \theta_{n} \right) &lt; L\left( \theta_{n - 1} \right) L(θn)<L(θn1),那么 θ = − α L ′ ( θ n − 1 ) \theta = - \alpha L^{&#x27;}\left( \theta_{n - 1} \right) θ=αL(θn1),这样就能够得到我们的梯度下降的迭代公式为:

θ n : = θ n − 1 − α L ′ ( θ n − 1 ) \theta_{n}: = \theta_{n - 1} - \alpha L^{&#x27;}\left( \theta_{n - 1} \right) θn:=θn1αL(θn1)

梯度下降法是通过每次对求解函数L带入的样本数量,可以将梯度下降分为三种:全量梯度下降、批量梯度下降、随机梯度下降。其中全量梯度下降是计算所有样本的损失,批量梯度下降是计算一个batch中的数据的损失,而随机梯度下降正如名字所示,就是随机选取一个样本来计算损失。而现在的随机梯度下降多数情况下是指批量梯度下降。此法的优势在于操作简单,计算量小,在损失函数为凸函数的时候会有一个较好的全局最优解。如下图所示, α \alpha α是个定值,它的选择决定了最终解的好坏,过小会使得收敛过慢,过大会导致震荡而无法获得最优解。
梯度下降
对于凸函数可以得到很好的解决,但是对于非凸问题只有收敛到局部最优,到最低点梯度为0的时候将会不再有变化。[]{#_Toc515205576 .anchor}

自适应梯度法

自适应梯度法,它通过记录每次迭代过程中前进的方向和距离,从而做到针对不同的问题有自适应调整学习率的方法,其公式如下:

θ = 1 ∑ i = 1 n − 1 g i + ϵ g n − 1 \theta = \frac{1}{\sqrt{\sum_{i = 1}^{n - 1}{gi + \epsilon}}}g_{n - 1} θ=i=1n1gi+ϵ 1gn1 θ n : = θ n − 1 − α θ n \theta_{n}: = \theta_{n - 1} - \alpha\theta_{n} θn:=θn1αθn

随着迭代的增加,学习率是在逐渐减小的,这种结果是我们希望得到的,因为学习率在逐渐减小,也就是说在越接近最优解的时候,函数的坡度会越来越平缓,而我们的目的也是要保障通过更慢的变化来得到最优解。自适应梯度法解决了随机梯度下降。

牛顿法

牛顿法是美国国家实验室在1950年提出的为了解决非线性问题的方法,这个有趣的算法有着极具创造性的意义。在其后证明了这种算法的高效可靠,这也使得其作为非线性问题得以解决的关键方法。

牛顿法是利用泰勒级数求解 f  ( x )   =   0 \text{f~}(x)\ = \ 0 f (x) = 0的根。所以这事它的优势所在,即在于它的收敛速度很快。

首先,选择一个接近函数  f  ( x ) \ \text{f~}(x)  f (x)零点的   x 0 \ x0  x0,计算相应的$\ \text{f}(x0) $和切线斜率$f ’ (x0)$(这里$f ’ $表示对函数$ \text{f } 求 导 ) 。 其 后 我 们 计 算 通 过 点 求导)。其后我们计算通过点 (x0,\ \ \text{f\ }(x0)) $且斜率$\text{f}’(x0) 的 直 线 以 及 和 的直线以及和 线\ \text{x~}$轴的交点坐标,也就是求解下列方程:

x ∙ f ( x 0 ) + f ( x 0 ) − x 0 ∙ f ′ ( x 0 ) = 0 x \bullet f\left( x_{0} \right) + f(x_{0}) - x_{0} \bullet f^{&#x27;}\left( x_{0} \right) = 0 xf(x0)+f(x0)x0f(x0)=0

我们将得到新坐标命名为 x 1 x1 x1,通常 x 1 x1 x1会比 x 0 x0 x0更接近方程的解。因此我们将利用 x 1 x1 x1开始下一轮的迭代运算。如下面公式所示:

x n + 1 = x n − f ( x n ) f ′ ( x n ) x_{n + 1} = x_{n} - \frac{f(x_{n})}{f&#x27;(x_{n})} xn+1=xnf(xn)f(xn)

牛顿法是通过在曲线的某一点出寻找它的一阶导数,也就是从数学意义上讲是求函数图像得到切线。这个切线可以确定下一点位置,所以牛顿法也叫做切线法。其工作原理如下图所示:

牛顿法

拟牛顿法

前面已经介绍了牛顿法,而拟牛顿法是在牛顿法之上建立起来的一种新的方法。

拟牛顿法的提出之初是为了改善复杂的矩阵运算问题,具体表现在Hessian矩阵的逆矩阵的不足地方。正定矩阵作为其矩阵的逆的近似处理简化复杂的运算量。拟牛顿法同样只需要知道目标函数的梯度即可求得下一次迭代的结果。这类方法大大优于最速下降法,尤其对于困难问题的解决更是起到了至关重要的作用。[]{#_Toc515205579 .anchor}

Momentum

为了解决更新不稳定的问题引入了新的方法就是引入momentum,也就是引入了动量,此做法是为了更加真实地模拟物体运动,即物体在惯性系中受到惯性的原因会使得更新不再是单一的而是会有余项作为微调,再利用当前batch进行微调,这样一定程度上增加了稳定性,一方面使得学习速度更加快速,关键的是其还能够摆脱局部最优解的能力。其公式如下:

x t = ρ x t − 1 − η g t x_{t} = \rho x_{t - 1} - \eta g_{t} xt=ρxt1ηgt

其中 ρ \rho ρ即是momentum动量,表示的是在多大程度上保留的更新方向,其值的范围是在0-1之间,在训练开始之初,由于梯度会很大,一般此时取值这种为0.5,随着学习的加深,梯度不太大的时候此时取值会逐渐变大,改为0.8,0.9。 η \eta η是学习率,它和随机梯度下降中的定义相同,这里需要注意的是 η  \text{η\ } η  ρ \rho ρ的值之和没有必然联系,不一定和为1。在此基础上再进行改进,即是得到momentum方法新的改进,其方法如下图所示。

momentum改进思路

首先,按照原来的更新方向更新一步,图中的4a,然后在该位置计算梯度值,图中的3a,然后用这个梯度值修正最终的更新方向图中的2b。上图中描述了两步的更新示意图,其中1是标准momentum更新路径。

注:1是指标准路径,即standard momentum;

2是指梯度累积,即accumulated gradient;

3是指修正,即correction;

4是指更新方向,即jump。

其用公示表示: x t = ρ x t − 1 − η f ( x t + ρ x t − 1 ) x_{t} = \rho x_{t - 1} - \eta f(x_{t} + \rho x_{t - 1}) xt=ρxt1ηf(xt+ρxt1) []{#_Toc515205580 .anchor}

Adagrad

上面提到的方法的参数都是对于同一个更新速率的。但是在实际的过程中,并不是一个更新速率就能适合所有参数。比如有的参数可能已经到很优的地步,但是由于一些参数所对应的样本量很少的原因,此时需要针对其实际情况进行相应的调整。

为了解决此问题,Adagrad就应运而生了。针对这一问题提出了自适应地为各个参数分配不同学习率的算法。其公式如下:

x t = − η ∑ τ = 1 t g τ 2 + ϵ g τ x_{t} = - \frac{\eta}{\sqrt{\sum_{\tau = 1}^{t}{g_{\tau}^{2} + \epsilon}}}g_{\tau} xt=τ=1tgτ2+ϵ ηgτ

其中 g τ g_{\tau} gτ是指当前的梯度,叠加和根式运算是元素的运算。eta是初始的学习率,由于之后会自动调整学习率的大小,所以初始值的定义不如之前算法那样重要了。而 ϵ \epsilon ϵ是一个比较小的数,是做保护使用,其目的是为了用来保证分母不为零。其含义是,对于每个参数,随着其更新的总距离增多,其学习速率也随之变慢。总的公式的含义就是,对于不同的参数,其学习速率随着更新的总距离的增加而变慢。达到自更新的目的。[]{#_Toc515205581 .anchor}

Adadelta

为了削弱单调猛烈下降的减少学习率的影响,一种学习率的自调整方法Adadelta被提出了。它采用了梯度下降中每维度学习速率方法。该方法仅使用一阶信息随时间动态调整,该方法不需要手动调整学习速率,并且似乎对噪声梯度信息,不同模型架构选择,各种数据模态以及超参数选择都很有效。与其他方法相比,MNIST数字分类任务使用单个机器以及分布式集群环境中的大规模语音数据集,我们显示出有前途的结果。因为前面提到的Adagrad方法中,也存在在学习过程中,通过自己调节学习率的过程,但是它的缺点从其公式可以看出,在分母上计算梯度平方的和,这样子所有参数必然为正数,这样的结果会使得最终分母累积越来越大。这样到学习的后阶段,网络的更新能力就会大打折扣,学习能力也会越来越弱,因为学习率很小的原因,所以Adadelta算法就应运而生了,它能够很好地解决Adagrad的问题。其公式:

E [ g 2 ] t = ρE [ g 2 ] t − 1 + ( 1 − ρ ) g t 2 E{\lbrack g^{2}\rbrack}_{t} = \text{ρE}{\lbrack g^{2}\rbrack}_{t - 1} + (1 - \rho)g_{t}^{2} E[g2]t=ρE[g2]t1+(1ρ)gt2

Δ x t = − η E [ g 2 ] t + ϵ g t                                   \Delta xt = - \frac{\eta}{\sqrt{E\left\lbrack g^{2} \right\rbrack_{t} + \epsilon}}g_{t}\text{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ } Δxt=E[g2]t+ϵ ηgt                                 

共轭梯度法

在了解了梯度下降法和牛顿法之后,接着介绍共轭梯度法,我们在已知牛顿法和最速下降法之后,共轭梯度法是处于二者之间的方法,主要表现在它仅仅利用一阶导数信息就能解决问题,克服了速度慢和复杂矩阵运算的问题,正是如此使得它才成为了有效解决非线性问题的方法。其与梯度下降法的对比如图所示:
梯度下降法和共轭梯度法对比
小结

由于梯度下降算法存在着很多缺点,比如有的参数更新使用的是同样的学习率,对于一些稀疏数据或者是不明显的特征是,对于常出现的特征更新率会更加低,此时的梯度下降算法就不能够满足了,于是它只能在局部找到最优解,此外,由于存在着诸多问题得到原因。梯度下降算法已经无法解决一些更有深度和挑战性的问题,所以其他的算法才会应运而生。当然每一种算法有不同得到侧重点,其中自适应梯度法解决了学习率的问题,牛顿法在速度上由于采用二阶收敛,所以速度更快,但是牛顿法在结局目标函数矩阵的逆矩阵时计算比较复杂,所以又产生了拟牛顿法。在Momentum算法中,下降初期时,使用上一次参数更新,下降方向一致,乘上较大的 μ \mu μ能够进行很好的加速,下降中后期时,在局部最小值来回震荡的时,当梯度区域0时, μ \mu μ使得更新的幅值增加,在方向随着梯度变化时, μ \mu μ能够减少更新的时间。Adagrad是增加了约束条件,使得结果更加完备,Adadelta是在其基础上发展而来,它不需要人工设置学习率。对超参数不敏感也就使得它对于大梯度、噪声和不同结构有较好的鲁棒性。每维有单独的动态学习率。能减小梯度下降算法的计算量。共轭梯度算法是在梯度下降法和牛顿法之间的方法,它是所需存储量很小,而且具有步收敛性,高稳定性,而且不需要任何外来参数。这也使得它是一种很优秀的新的算法。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值