外链论坛

 找回密码
 立即注册
搜索
查看: 47|回复: 2

数学公式、可视化图齐齐上阵,神经网络怎么样一步步走向最优化「看得见」

[复制链接]

2878

主题

1万

回帖

9910万

积分

论坛元老

Rank: 8Rank: 8

积分
99109671
发表于 2024-8-31 12:08:50 | 显示全部楼层 |阅读模式

雷锋网 AI 科技评论按:继在《要做好深度学习任务,不妨先在损失函数上「做好文案」》一文中为大众深入浅出地介绍了损失函数的关联知识后,Deep Learning Demystified 编辑、数据专家 Harsha Bommana 这次接着从优化的方向,结合数学方式和可视化图,带大众以「看得见」的方式来认识神经网络怎样一步步找到最小化的损失值,并最后实现最优化。

在前一篇文案《要做好深度学习任务,不妨先在损失函数上「做好文案」》中,咱们对损失函数有了一个比较清晰的认知,它能够让咱们晓得模型在某一周期的表现状况此刻咱们需要运用损失函数来训练网络以加强网络的性能。基本上,咱们需要做的其实是得到损失值并尽可能地将其最小化,由于损失值越小,模型的性能就越高。最小化数学暗示的这一过程就叫做优化,下面咱们瞧瞧怎样在神经网络上将这些优化办法用其起来~

在神经网络中,每一个层之间都有非常多权重。咱们需要认识的是:神经网络中每层的每一个权重都会以某种方式影响到网络的输出,这是由于它们全都直接或间接地与输出有相关

因此呢咱们能够说,倘若咱们改变神经网络中的任一特定的权重,网络的输出会改变。

如下图所示,咱们尝试了 3 种区别的场景。在每一个场景中,咱们选取有些随机的权重,并对其进行了更改。同期,下图表示了,改变选取好的权重会对神经网络的那些部分产生影响以及那些部分不形成影响。在这 3 个场景中,网络的最后一层都最少有一个受影响的节点。因为最后一层的所有节点都与输出节点相连,因此咱们能够说,只要最后这层的部分某部分受到权重变化的影响,那输出节点一样会受到影响。

网络更改特定权重会对网络的那些部分产生影响的可视化图

从上图中,咱们一样能够观察到,权重离输出节点更远(离网络的始端更近),会更加多地影响到网络始端和输出节点之间的节点。因而,咱们能够判断,权重对输出的影响是非常间接的,由于在这些权重和输出之间还存在非常多权重。离输出节点更近的权重则会更少地影响到网络始端和输出节点之间的节点,因此呢它们会更加直接地影响到输出节点。

认识怎样经过改变权重来改变网络的输出后,咱们接下来要晓得怎样最小化损失。改变权重就会改变输出,而改变输出就会改变损失——由于损失便是一个预测 (Y_pred) 值的函数,而这个值本质上便是网络的输出。因此咱们能够得出的结论是,改变权重最后会让损失出现改变。

咱们已然展示了权重和最后的损失之间的关系,然则日前为止咱们还仅仅探讨了改变。改变能够增多的意思,能够是减少的意思,而在这儿咱们需要的是减少损失。因此咱们需要探索以这种方式来改变权重到底怎样能够能让损失减少。这一过程就叫做优化。

从数学的方向来看,咱们能够经过运用偏导数(Partial Derivatives)来实现这个过程。偏导数能够让咱们理解两个数学表达式怎样相互影响。让咱们先假设 X 和 Y,它们之间存在某些任意的数学关系,倘若咱们能够得到 X 对 Y 的偏导数,咱们就能够晓得 X 的改变怎样影响 Y。倘若偏导数为正,就寓意着 Y 会随着 X 的增大而增大;倘若为负,则寓意着 Y 随 X 的增大而减小。

如此一来,咱们需要得到神经网络中的每一个权重对损失的偏导数。在某个特定案例中,倘若权重的偏导数为正,那咱们就减小权重从而减小损失;倘若为负,咱们就增大权重以减小损失——毕竟优化最后目的便是:减小损失!

优化损失的偏导数可视化图

对应用到的算法便是梯度下降(Gradient Descent)算法,它又名随机梯度下降(Stochastic Gradient Descent,SGD),是神经网络优化中最基本的算法。这一算法执行的是一个迭代过程,因此咱们要多次更新每一个权重的值,直到损失收敛为一个合适的值。咱们不妨将单轮更新用以下数学公式来暗示

这儿,alpha 符号暗示学习率(Learning Rate),它对神经网络的优化速度有影响。倘若学习率很强咱们就能更快地给损失找到一个最小值,由于每次更新的权重跨度够大,不外,从最后的值来看,咱们或许没法找到一个很好的最小值,这是因为每次更新的权重跨度太大,就有很能会直接跨过这个很好的最小值。而采用更小的学习率则能够处理这一问题,不外这就需要花非常多步来让神经网络的损失减小到一个不错的值。因此咱们需要让学习率维持为一个最佳值,通常而言,0.01 是 alpha 的一个比较安全的取值。

然而仅仅运用梯度下降算法存在的一个大问题是,如下图所示,损失没法趋近于全局最小值,而仅能持续接近局部最小值。

SGD 局部最小值问题

咱们从标记的绿点看起,第1个绿点之后的每一个绿点都暗示依次更新后的新权重和损失。因为偏导数(梯度)在无限接近局部最小值时基本上等于 0,因此呢梯度下降仅仅在找到局部最小值之前出现因此,在求到局部最小值后,梯度下降基本上就会原封不动,并不会继续尝试去找到全局最小值。

上图非常简单,而在现实中,这张图要繁杂得多,存在非常多个局部最小值,因此倘若仅仅运用梯度下降算法,并不可保证能够找到一个不错的损失。针对这一问题,咱们能够采用动量的办法

动量(Momentum)

在动量中,咱们需要做的基本上便是获取权重在这次更新之前经过的所有更新的有些信息。基本上而言,倘若权重连续往一个特定方向变化(增大或减小),它就会慢慢地累积下该方向的「动量」。因此呢,当权重遇到有些抵抗力并最后往相反的方向变化时,因为此前累积的动量,它就能够继续按原来的方向变化。

这与理学中的实质动量类似。咱们想象有一个走廊和一个球,当咱们在走廊的一遍发球时,它会连续滚动一段时间,这里过程中,它就为往该方向的前进获取的动量。最后,当球滚动到底时,不会就停在那里,而是往相反的方向再滚动一会,这是由于这里之前所得到的动量——即便重力会让它停下来,然而动量会让它继续滚动一会。

咱们尝试从数学的方向来再现这一场景,以便让梯度下降算法能够在经过局部最小值后继续尝试取得全局最小值,公式如下:

动量算法的权重更新公式

权重更新公式(动量)

这儿的 V 暗示的是动量因子(Momentum Factor),如公式所示,在每次更新中,它都会将前一次更新的动量因子加到当前导数上。之后,咱们仅需要将这个值加上权重,就可得出更新后的权重。其中 n 在这儿指的是动量系数(Coefficient of Momentum),它决定权重每次往前移动所得到的动量为多少。

当权重更新后,权重会在动量因子中将所有此前的梯度存储为一个部分。这般的话,一旦权重需要往相反的方向变化,例如达到局部最小值时,它依旧会朝同一个方向变化一段时间,直到动量因子的数量逐步减少,才往相反的方向变化。在都数状况下,动量因子一般都足以让权重处理到了局部最小值便停止的问题。

动量可视化示例

动量算法的另一个附加优良是:因为梯度的累积,权重会更快地收敛成一个合适的损失值。优化中还有那些能够让梯度下降以更精细的方式执行的技术呢?咱们下面来看。

涅斯捷罗夫梯度加速(Nesterov accelerated gradient,NAG)

在 NAG 中,咱们要做的不是计算当前位置的梯度,而是计算与当前位置接近的将来位置的梯度。这般做的原由咱们期盼以一种更加精细的方式来计算梯度。动量在取得最小值前就会起始减小,由于运用的梯度是将来位置的梯度。这种办法结果会加强收敛时期的稳定性并减少波动,进一步,它在实质应用中的表现比单纯用动量算法更好。

接下来咱们来看详细怎样在神经网络权重的优化中运用 NAG。

扩展后的全部动量方程式如下:

扩展后的动量全方程式

这儿的下一个权重值 W 由「n*v_old」和「alpha *当前梯度」以及当前权重相加得出。假设「alpha *当前梯度」的值变得很小,咱们就能经过仅将「n*v_old」与当前权重值相加来趋近于下一个 W 值。

计算趋近于将来位置的权重值

此刻咱们要计算的不是当前 W 值的梯度,而是将来 W 值的梯度。这就让动量因子在真正面临剧烈的梯度变化前提前适应,从而其训练时期的稳定性得以加强

涅斯捷罗夫动量公式

这个带有 NAG 的新的动量方程式表示咱们采用的是趋近于将来位置的 W 值的梯度而不是当前位置的 W 值的梯度。

涅斯捷罗夫可视化示例

如上面运用 NAG 办法的示例所示,咱们给当前位置的 W 值加上了「n*v_old」以趋近于将来位置的 W 值。而后咱们计算将来位置的梯度值,并在计算「v_new」值时运用该值而非当前位置的梯度值。在本示例中,虽然在该场景中,动量在理论上应该是增多的,然而它在经过该位置时就起始减小了,这是由于将来位置的 W 值的梯度指的是向相反方向的,因此动量值不增反减。

下面咱们来看有些自适应优化办法

自适应优化(Adaptive Optimization)

在自适应优化方法中,学习率(alpha)和动量系数(n)在全部训练过程中都再也不是连续的,而是连续地适应网络中的各个权重,因而会随权重一同变化。这些类型的优化算法都属于自适应优化这类办法

第1个要介绍的自适应优化算法是 Adagrad 算法。

Adagrad

涅斯捷罗夫是自适应梯度算法的简叫作。在该算法中,咱们需要为权重的每轮更新更改学习率(alpha),它们在每轮更新时期的更改方式为:倘若权重在较短期内被更新的太多次,它就会减小;反之增大。

首要每一个权重都有自己的缓存(Cache)值,新的缓存值由自己本来的缓存值加上其在当前位置前的梯度的平方得出。

Adagrad 的缓存更新值

在训练过程中,该缓存值会连续增大,新的权重更新公式如下所示:

Adagrad 权重更新公式

除了学习率(alpha)在全部训练过程中会连续变化外,该公式与本来的梯度下降公式同样。公式分母中的 E 是一个非常小的值,它是为了保证该公式不会显现「分子除以零」的状况

详细而言,在该公式中,倘若权重的更新非常大,缓存值就会增大,结果会引起学习率变小,从而让权重的更新幅度连续减小。另一方面,倘若权重并出现较为显著的更新,缓存值就会变得很小,结果会让学习率增大,从而会增大权重的更新幅度。这便是 Adagrad 优化器的基本原理。

然而,该算法的缺点便是,无论权重过去的梯度为多少,缓存值总会增大些,这是由于公式中的平方结果是非负数。这般的话,每个权重的学习率最后都会减小至一个非常小的值,直到训练过程再不会出现显著的变化为止。

下一个要介绍的自适应优化器——RMSProp 则能够处理这一问题。

RMSProp

与 Adagrad 相比,RMSProp 独一区别点就在于它的缓存更新策略。RMSProp 的公式引入了一个新参数——衰减率(Decay Rate),即 gamma:

RMSProp 的缓存权重更新公式

这儿的 gamma 值通常为 0.9 或 0.99,因此呢针对每轮更新而言,相比于 Adagrad,公式中相加的与梯度的平方会乘上非常低的比率。这就保证了学习率能够基于此前更新的权重,像在 Adagrad 算法中同样连续变化,但与此同时,该学习率不会衰减得火速,因而它的训练过程会连续更长的时间。

再接下来,咱们要介绍的是 Adam 优化器,总体而言,它被广泛视作深度学习优化中最佳的优化器之一。

Adam

Adam 有点像 RMSProp 和动量(Momentum)办法的结合体。咱们首要计算 m 值,它暗示的是当前位置的动量:

Adam 动量权重更新公式

该公式与动量公式的独一区别便是,当前梯度值乘以的不是学习率(alpha)而是 (1-Beta_1)。

下一步咱们计算累积的缓存值,这跟 RMSProp 中的计算办法同样

最后得到的权重更新公式如下:

Adam 权重更新公式

如上公式所示,咱们经过计算动量值来累加梯度值,与此同期咱们能够通过利用缓存值来连续更改学习率。因为这两个特征,Adam 的性能通常会比本文说到的以外的所有优化器都更好,因而在训练神经网络方面,它是被研发人员偏好运用的优化器。在 Adam 的关联论文中,举荐 (Beta_1) 的参数取值为 0.9、(Beta_2) 的参数取值为 0.99 、(epsilon)的参数取值为 1e-08。

在本文中,我说到都数深度学习从业者在基本的深度学习任务中最常用的几个最重要的优化器,期盼大众能够经过阅读本文有所收获!

注:作者在本文中运用的 a(Loss)/a(Wi) 符号,实质暗示的是 Wi 值的 a(Loss)/a(W)。

via

https://medium.com/deep-learning-demystified/https-medium-com-deep-learning-demystified-understanding-optimizers-313b787a69fe雷锋网雷锋网
回复

使用道具 举报

2916

主题

1万

回帖

9913万

积分

论坛元老

Rank: 8Rank: 8

积分
99139580
发表于 2024-9-28 00:31:59 | 显示全部楼层
你的话语如春风拂面,让我感到无比温暖。
回复

使用道具 举报

2878

主题

1万

回帖

9910万

积分

论坛元老

Rank: 8Rank: 8

积分
99109671
 楼主| 发表于 2024-9-29 23:17:26 | 显示全部楼层
你的话深深触动了我,仿佛说出了我心里的声音。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站点统计|Archiver|手机版|小黑屋|外链论坛 ( 非经营性网站 )|网站地图

GMT+8, 2024-10-18 22:25 , Processed in 0.068610 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.