数学公式、可视化图齐齐上阵,神经网络怎么样一步步走向最优化「看得见」
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">雷锋网 AI 科技评论按:继在《要做好深度学习任务,不妨先在损失函数上「做好<span style="color: black;">文案</span>」》一文中为<span style="color: black;">大众</span>深入浅出地介绍了损失函数的<span style="color: black;">关联</span>知识后,Deep Learning Demystified 编辑、数据<span style="color: black;">专家</span> Harsha Bommana <span style="color: black;">这次</span>接着从优化的<span style="color: black;">方向</span>,结合数学方式和可视化图,带<span style="color: black;">大众</span>以「看得见」的方式来<span style="color: black;">认识</span>神经网络<span style="color: black;">怎样</span>一步步找到最小化的损失值,并<span style="color: black;">最后</span>实现最优化。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">在前一篇<span style="color: black;">文案</span>《要做好深度学习任务,不妨先在损失函数上「做好<span style="color: black;">文案</span>」》中,<span style="color: black;">咱们</span>对损失函数有了一个比较清晰的认知,它能够让<span style="color: black;">咱们</span><span style="color: black;">晓得</span>模型在某一<span style="color: black;">周期</span>的表现<span style="color: black;">状况</span>。<span style="color: black;">此刻</span>,<span style="color: black;">咱们</span>需要<span style="color: black;">运用</span>损失函数来训练网络以<span style="color: black;">加强</span>网络的性能。<span style="color: black;">基本</span>上,<span style="color: black;">咱们</span>需要做的其实是<span style="color: black;">得到</span>损失值并尽可能地将其最小化,<span style="color: black;">由于</span>损失值越小,模型的性能就越高。最小化数学<span style="color: black;">暗示</span>的这一过程就叫做优化,下面<span style="color: black;">咱们</span>就<span style="color: black;">瞧瞧</span><span style="color: black;">怎样</span>在神经网络上将这些优化<span style="color: black;">办法</span>用其起来~</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">在神经网络中,<span style="color: black;">每一个</span>层之间都有<span style="color: black;">非常多</span>权重。<span style="color: black;">咱们</span>需要<span style="color: black;">认识</span>的是:神经网络中每层的<span style="color: black;">每一个</span>权重都会以某种方式影响到网络的输出,这是<span style="color: black;">由于</span>它们全都直接或间接地与输出有<span style="color: black;">相关</span>。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">因此呢</span>,<span style="color: black;">咱们</span><span style="color: black;">能够</span>说,<span style="color: black;">倘若</span><span style="color: black;">咱们</span>改变神经网络中的任一特定的权重,网络的输出<span style="color: black;">亦</span>会改变。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">如下图所示,<span style="color: black;">咱们</span>尝试了 3 种<span style="color: black;">区别</span>的场景。在<span style="color: black;">每一个</span>场景中,<span style="color: black;">咱们</span>都<span style="color: black;">选取</span>了<span style="color: black;">有些</span>随机的权重,并对其进行了更改。<span style="color: black;">同期</span>,下图<span style="color: black;">亦</span><span style="color: black;">表示</span>了,改变<span style="color: black;">选取</span>好的权重会对神经网络的<span style="color: black;">那些</span>部分产生影响以及<span style="color: black;">那些</span>部分不<span style="color: black;">形成</span>影响。在这 3 个场景中,网络的最后一层都<span style="color: black;">最少</span>有一个受影响的节点。<span style="color: black;">因为</span>最后一层的所有节点都与输出节点相连,<span style="color: black;">因此</span><span style="color: black;">咱们</span><span style="color: black;">能够</span>说,只要最后这层的部分某部分受到权重变化的影响,那输出节点<span style="color: black;">亦</span><span style="color: black;">一样</span>会受到影响。</p><img src="https://p3-sign.toutiaoimg.com/pgc-image/Repx9o89phlpQs~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1725642957&x-signature=4fbJPoJoe8y9sZJoK6uHkijDzDw%3D" style="width: 50%; margin-bottom: 20px;">
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">网络更改特定权重会对网络的<span style="color: black;">那些</span>部分产生影响的可视化图</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">从上图中,<span style="color: black;">咱们</span><span style="color: black;">一样</span><span style="color: black;">能够</span>观察到,权重离输出节点更远(离网络的始端更近),会<span style="color: black;">更加多</span>地影响到网络始端和输出节点之间的节点。因而,<span style="color: black;">咱们</span><span style="color: black;">能够</span>判断,权重对输出的影响是非常间接的,<span style="color: black;">由于</span>在这些权重和输出之间还存在<span style="color: black;">非常多</span>权重。离输出节点更近的权重则会更少地影响到网络始端和输出节点之间的节点,<span style="color: black;">因此呢</span>它们会更加直接地影响到输出节点。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">认识</span><span style="color: black;">怎样</span><span style="color: black;">经过</span>改变权重来改变网络的输出后,<span style="color: black;">咱们</span>接下来要<span style="color: black;">晓得</span><span style="color: black;">怎样</span>最小化损失。改变权重就会改变输出,而改变输出就会改变损失——<span style="color: black;">由于</span>损失<span style="color: black;">便是</span>一个预测 (Y_pred) 值的函数,而这个值本质上<span style="color: black;">便是</span>网络的输出。<span style="color: black;">因此</span>,<span style="color: black;">咱们</span><span style="color: black;">能够</span>得出的结论是,改变权重<span style="color: black;">最后</span>会让损失<span style="color: black;">亦</span><span style="color: black;">出现</span>改变。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">咱们</span><span style="color: black;">已然</span>展示了权重和<span style="color: black;">最后</span>的损失之间的关系,<span style="color: black;">然则</span><span style="color: black;">日前</span>为止<span style="color: black;">咱们</span>还仅仅探讨了改变。改变<span style="color: black;">能够</span>是<span style="color: black;">增多</span>的意思,<span style="color: black;">亦</span><span style="color: black;">能够</span>是减少的意思,而在<span style="color: black;">这儿</span><span style="color: black;">咱们</span>需要的是减少损失。<span style="color: black;">因此</span>,<span style="color: black;">咱们</span>需要探索以这种方式来改变权重<span style="color: black;">到底</span><span style="color: black;">怎样</span>能够能让损失减少。这一过程就叫做优化。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">从数学的<span style="color: black;">方向</span>来看,<span style="color: black;">咱们</span><span style="color: black;">能够</span><span style="color: black;">经过</span><span style="color: black;">运用</span>偏导数(Partial Derivatives)来实现这个过程。偏导数能够让<span style="color: black;">咱们</span>理解两个数学表达式<span style="color: black;">怎样</span>相互影响。让<span style="color: black;">咱们</span>先假设 X 和 Y,它们之间存在某些任意的数学关系,<span style="color: black;">倘若</span><span style="color: black;">咱们</span>能够得到 X 对 Y 的偏导数,<span style="color: black;">咱们</span>就能够<span style="color: black;">晓得</span> X 的改变<span style="color: black;">怎样</span>影响 Y。<span style="color: black;">倘若</span>偏导数为正,就<span style="color: black;">寓意</span>着 Y 会随着 X 的增大而增大;<span style="color: black;">倘若</span>为负,则<span style="color: black;">寓意</span>着 Y 随 X 的增大而减小。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">如此一来,<span style="color: black;">咱们</span>需要得到神经网络中的<span style="color: black;">每一个</span>权重对损失的偏导数。在某个特定案例中,<span style="color: black;">倘若</span>权重的偏导数为正,那<span style="color: black;">咱们</span>就减小权重从而减小损失;<span style="color: black;">倘若</span>为负,<span style="color: black;">咱们</span>就增大权重以减小损失——毕竟优化<span style="color: black;">最后</span>的<span style="color: black;">目的</span><span style="color: black;">便是</span>:减小损失!</p><img src="https://p3-sign.toutiaoimg.com/pgc-image/Repx9oZ7EiKm93~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1725642957&x-signature=d%2BXkJ5dKWIPcDmQ5ERjOTEljqoE%3D" style="width: 50%; margin-bottom: 20px;">
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">优化损失的偏导数可视化图</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">对应用到的算法<span style="color: black;">便是</span>梯度下降(Gradient Descent)算法,它又名随机梯度下降(Stochastic Gradient Descent,SGD),是神经网络优化中最<span style="color: black;">基本</span>的算法。这一算法执行的是一个迭代过程,<span style="color: black;">因此</span><span style="color: black;">咱们</span>要多次更新<span style="color: black;">每一个</span>权重的值,直到损失收敛为一个合适的值。<span style="color: black;">咱们</span>不妨将单轮更新用以下数学公式来<span style="color: black;">暗示</span>:</p><img src="https://p3-sign.toutiaoimg.com/pgc-image/Repx9ordydz5e~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1725642957&x-signature=Qa2TpDGxDzZRUHxnvZS5%2B3HjX1Y%3D" style="width: 50%; margin-bottom: 20px;">
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">在<span style="color: black;">这儿</span>,alpha 符号<span style="color: black;">暗示</span>学习率(Learning Rate),它对神经网络的优化速度有影响。<span style="color: black;">倘若</span>学习率<span style="color: black;">很强</span>,<span style="color: black;">咱们</span>就能更快地给损失找到一个最小值,<span style="color: black;">由于</span>每次更新的权重跨度够大,<span style="color: black;">不外</span>,从<span style="color: black;">最后</span>的值来看,<span style="color: black;">咱们</span>或许<span style="color: black;">没法</span>找到一个很好的最小值,这是<span style="color: black;">因为</span>每次更新的权重跨度太大,就有很能会直接跨过这个很好的最小值。而采用更小的学习率则能够<span style="color: black;">处理</span>这一问题,<span style="color: black;">不外</span>这就需要花<span style="color: black;">非常多</span>步来让神经网络的损失减小到一个不错的值。<span style="color: black;">因此</span>,<span style="color: black;">咱们</span>需要让学习率维持为一个最佳值,<span style="color: black;">通常</span>而言,0.01 是 alpha 的一个比较安全的取值。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">然而仅仅<span style="color: black;">运用</span>梯度下降算法存在的一个大问题是,如下图所示,损失<span style="color: black;">没法</span>趋近于全局最小值,而仅能<span style="color: black;">持续</span>接近局部最小值。</p><img src="https://p3-sign.toutiaoimg.com/pgc-image/Repx9p33zxqWVE~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1725642957&x-signature=%2FBZo%2Bec6mgtdn3e4LknHrH1DunY%3D" style="width: 50%; margin-bottom: 20px;">
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">SGD 局部最小值问题</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">咱们</span>从标记的绿点看起,<span style="color: black;">第1</span>个绿点之后的<span style="color: black;">每一个</span>绿点都<span style="color: black;">暗示</span>依次更新后的新权重和损失。<span style="color: black;">因为</span>偏导数(梯度)在无限接近局部最小值时基本上等于 0,<span style="color: black;">因此呢</span>梯度下降仅仅在找到局部最小值之前<span style="color: black;">出现</span>。<span style="color: black;">因此</span>,在求到局部最小值后,梯度下降基本上就会原封不动,并不会继续尝试去找到全局最小值。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">上图非常简单,而在现实中,这张图要<span style="color: black;">繁杂</span>得多,存在<span style="color: black;">非常多</span>个局部最小值,<span style="color: black;">因此</span><span style="color: black;">倘若</span>仅仅<span style="color: black;">运用</span>梯度下降算法,并<span style="color: black;">不可</span><span style="color: black;">保证</span>能够找到一个不错的损失。针对这一问题,<span style="color: black;">咱们</span><span style="color: black;">能够</span>采用动量的<span style="color: black;">办法</span>。</p>
<h3 style="color: black; text-align: left; margin-bottom: 10px;">动量(Momentum)</h3>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">在动量中,<span style="color: black;">咱们</span>需要做的基本上<span style="color: black;">便是</span>获取权重在<span style="color: black;">这次</span>更新之前经过的所有更新的<span style="color: black;">有些</span>信息。<span style="color: black;">基本</span>上而言,<span style="color: black;">倘若</span>权重<span style="color: black;">连续</span>往一个特定方向变化(增大或减小),它就会慢慢地<span style="color: black;">累积</span>下该方向的「动量」。<span style="color: black;">因此呢</span>,当权重遇到<span style="color: black;">有些</span>抵抗力并<span style="color: black;">最后</span>往相反的方向变化时,<span style="color: black;">因为</span>此前<span style="color: black;">累积</span>的动量,它就能够继续按原来的方向变化。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">这与<span style="color: black;">理学</span>中的<span style="color: black;">实质</span>动量类似。<span style="color: black;">咱们</span>想象有一个走廊和一个球,当<span style="color: black;">咱们</span>在走廊的一遍发球时,它会<span style="color: black;">连续</span>滚动一段时间,<span style="color: black;">这里</span>过程中,它就为往该方向的前进获取的动量。最后,当球滚动到底时,<span style="color: black;">亦</span>不会就停在那里,而是往相反的方向再滚动一会,这是<span style="color: black;">由于</span>它<span style="color: black;">这里</span>之前所<span style="color: black;">得到</span>的动量——即便重力会让它停下来,然而动量会让它继续滚动一会。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">咱们</span>尝试从数学的<span style="color: black;">方向</span>来再现这一场景,以便让梯度下降算法能够在经过局部最小值后继续尝试取得全局最小值,公式如下:</p><img src="https://p3-sign.toutiaoimg.com/pgc-image/Repx9pECKQzcU1~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1725642957&x-signature=CusktXW8NDT%2Bpj0Jiopx2MQxFt8%3D" style="width: 50%; margin-bottom: 20px;">
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">动量算法的权重更新公式</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">权重更新公式(动量)</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">这儿</span>的 V <span style="color: black;">暗示</span>的是动量因子(Momentum Factor),如公式所示,在每次更新中,它都会将前一次更新的动量因子加到当前导数上。之后,<span style="color: black;">咱们</span>仅需要将这个值加上权重,<span style="color: black;">就可</span>得出更新后的权重。其中 n 在<span style="color: black;">这儿</span>指的是动量系数(Coefficient of Momentum),它决定权重每次往前移动所<span style="color: black;">得到</span>的动量为多少。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">当权重更新后,权重<span style="color: black;">亦</span>会在动量因子中将所有此前的梯度存储为一个部分。<span style="color: black;">这般</span>的话,一旦权重需要往相反的方向变化,例如达到局部最小值时,它依旧会朝同一个方向变化一段时间,直到动量因子的数量<span style="color: black;">逐步</span>减少,才往相反的方向变化。在<span style="color: black;">都数</span><span style="color: black;">状况</span>下,动量因子<span style="color: black;">一般</span>都足以让权重<span style="color: black;">处理</span>到了局部最小值便停止的问题。</p><img src="https://p3-sign.toutiaoimg.com/pgc-image/RepxA491gBcv6a~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1725642957&x-signature=HunX7wXheVtUR8IB2gBtX3PBf8Q%3D" style="width: 50%; margin-bottom: 20px;">
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">动量可视化示例</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">动量算法的另一个附加<span style="color: black;">优良</span>是:<span style="color: black;">因为</span>梯度的<span style="color: black;">累积</span>,权重会更快地收敛成一个合适的损失值。优化中还有<span style="color: black;">那些</span>能够让梯度下降以更<span style="color: black;">精细</span>的方式执行的技术呢?<span style="color: black;">咱们</span>下面来看。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><strong style="color: blue;">涅斯捷罗夫梯度加速(Nesterov accelerated gradient,NAG)</strong></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">在 NAG 中,<span style="color: black;">咱们</span>要做的不是计算当前位置的梯度,而是计算与当前位置接近的<span style="color: black;">将来</span>位置的梯度。<span style="color: black;">这般</span>做的<span style="color: black;">原由</span>是<span style="color: black;">咱们</span><span style="color: black;">期盼</span>以一种更加<span style="color: black;">精细</span>的方式来计算梯度。动量在取得最小值前就会<span style="color: black;">起始</span>减小,<span style="color: black;">由于</span>其<span style="color: black;">运用</span>的梯度是<span style="color: black;">将来</span>位置的梯度。这种<span style="color: black;">办法</span>结果会<span style="color: black;">加强</span>收敛<span style="color: black;">时期</span>的稳定性并减少波动,进一步,它在<span style="color: black;">实质</span>应用中的表现<span style="color: black;">亦</span>比单纯用动量算法更好。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">接下来<span style="color: black;">咱们</span>来看<span style="color: black;">详细</span><span style="color: black;">怎样</span>在神经网络权重的优化中<span style="color: black;">运用</span> NAG。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">扩展后的<span style="color: black;">全部</span>动量方程式如下:</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">扩展后的动量全方程式</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">这儿</span>的下一个权重值 W 由「n*v_old」和「alpha *当前梯度」以及当前权重相加得出。假设「alpha *当前梯度」的值变得很小,<span style="color: black;">咱们</span>就能<span style="color: black;">经过</span>仅将「n*v_old」与当前权重值相加来趋近于下一个 W 值。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">计算趋近于<span style="color: black;">将来</span>位置的权重值</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">此刻</span>,<span style="color: black;">咱们</span>要计算的不是当前 W 值的梯度,而是<span style="color: black;">将来</span> W 值的梯度。这就让动量因子在真正面临剧烈的梯度变化前提前适应,从而其训练<span style="color: black;">时期</span>的稳定性得以<span style="color: black;">加强</span>。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">涅斯捷罗夫动量公式</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">这个带有 NAG 的新的动量方程式<span style="color: black;">表示</span>,<span style="color: black;">咱们</span>采用的是趋近于<span style="color: black;">将来</span>位置的 W 值的梯度而不是当前位置的 W 值的梯度。</p><img src="https://p3-sign.toutiaoimg.com/pgc-image/RepxACQFzgZNt1~noop.image?_iz=58558&from=article.pc_detail&lk3s=953192f4&x-expires=1725642957&x-signature=exhrAAHppveXnzQkKmRVoo9YU%2FQ%3D" style="width: 50%; margin-bottom: 20px;">
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">涅斯捷罗夫可视化示例</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">如上面<span style="color: black;">运用</span> NAG <span style="color: black;">办法</span>的示例所示,<span style="color: black;">咱们</span>给当前位置的 W 值加上了「n*v_old」以趋近于<span style="color: black;">将来</span>位置的 W 值。<span style="color: black;">而后</span>,<span style="color: black;">咱们</span>计算<span style="color: black;">将来</span>位置的梯度值,并在计算「v_new」值时<span style="color: black;">运用</span>该值而非当前位置的梯度值。在本示例中,虽然在该场景中,动量在理论上应该是<span style="color: black;">增多</span>的,然而它在经过该位置时就<span style="color: black;">起始</span>减小了,这是<span style="color: black;">由于</span><span style="color: black;">将来</span>位置的 W 值的梯度<span style="color: black;">指的是</span>向相反方向的,<span style="color: black;">因此</span>动量值不增反减。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">下面<span style="color: black;">咱们</span>来看<span style="color: black;">有些</span>自适应优化<span style="color: black;">办法</span>。</p>
<h3 style="color: black; text-align: left; margin-bottom: 10px;">自适应优化(Adaptive Optimization)</h3>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">在自适应优化方法中,学习率(alpha)和动量系数(n)在<span style="color: black;">全部</span>训练过程中都<span style="color: black;">再也不</span>是连续的,而是连续地适应网络中的各个权重,因而会随权重一同变化。这些类型的优化算法都属于自适应优化这类<span style="color: black;">办法</span>。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">第1</span>个要介绍的自适应优化算法是 Adagrad 算法。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><strong style="color: blue;">Adagrad</strong></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">涅斯捷罗夫是自适应梯度算法的简<span style="color: black;">叫作</span>。在该算法中,<span style="color: black;">咱们</span>需要为权重的每轮更新更改学习率(alpha),它们在每轮更新<span style="color: black;">时期</span>的更改方式为:<span style="color: black;">倘若</span>权重在较<span style="color: black;">短期</span>内被更新的太多次,它就会减小;反之增大。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">首要</span>,<span style="color: black;">每一个</span>权重都有<span style="color: black;">自己</span>的缓存(Cache)值,新的缓存值由<span style="color: black;">自己</span><span style="color: black;">本来</span>的缓存值加上其在当前位置前的梯度的平方得出。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">Adagrad 的缓存更新值</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">在训练过程中,该缓存值会<span style="color: black;">连续</span>增大,新的权重更新公式如下所示:</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">Adagrad 权重更新公式</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">除了学习率(alpha)在<span style="color: black;">全部</span>训练过程中会<span style="color: black;">连续</span>变化外,该公式与<span style="color: black;">本来</span>的梯度下降公式<span style="color: black;">同样</span>。公式分母中的 E 是一个非常小的值,它是为了<span style="color: black;">保证</span>该公式不会<span style="color: black;">显现</span>「分子除以零」的<span style="color: black;">状况</span>。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">详细</span>而言,在该公式中,<span style="color: black;">倘若</span>权重的更新非常大,缓存值就会增大,结果会<span style="color: black;">引起</span>学习率变小,从而让权重的更新幅度<span style="color: black;">连续</span>减小。另一方面,<span style="color: black;">倘若</span>权重并<span style="color: black;">无</span><span style="color: black;">出现</span>较为<span style="color: black;">显著</span>的更新,缓存值就会变得很小,结果会让学习率增大,<span style="color: black;">从而</span>会增大权重的更新幅度。这<span style="color: black;">便是</span> Adagrad 优化器的基本原理。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">然而,该算法的缺点<span style="color: black;">便是</span>,无论权重过去的梯度为多少,缓存值总会增大些,这是<span style="color: black;">由于</span>公式中的平方结果是非负数。<span style="color: black;">这般</span>的话,每个权重的学习率<span style="color: black;">最后</span>都会减小至一个非常小的值,直到训练过程再<span style="color: black;">亦</span>不会<span style="color: black;">出现</span>较<span style="color: black;">显著</span>的变化为止。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">下一个要介绍的自适应优化器——RMSProp 则能够<span style="color: black;">处理</span>这一问题。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><strong style="color: blue;">RMSProp </strong></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">与 Adagrad 相比,RMSProp <span style="color: black;">独一</span>的<span style="color: black;">区别</span>点就在于它的缓存更新策略。RMSProp 的公式引入了一个新参数——衰减率(Decay Rate),即 gamma:</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">RMSProp 的缓存权重更新公式</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><span style="color: black;">这儿</span>的 gamma 值<span style="color: black;">通常</span>为 0.9 或 0.99,<span style="color: black;">因此呢</span><span style="color: black;">针对</span>每轮更新而言,相比于 Adagrad,公式中相加的与梯度的平方会乘上非常低的比率。这就<span style="color: black;">保证</span>了学习率能够基于此前更新的权重,像在 Adagrad 算法中<span style="color: black;">同样</span><span style="color: black;">连续</span>变化,但与此同时,该学习率不会衰减得<span style="color: black;">火速</span>,因而它的训练过程会<span style="color: black;">连续</span>更长的时间。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">再接下来,<span style="color: black;">咱们</span>要介绍的是 Adam 优化器,总体而言,它被广泛视作深度学习优化中最佳的优化器之一。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;"><strong style="color: blue;">Adam</strong></p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">Adam 有点像 RMSProp 和动量(Momentum)<span style="color: black;">办法</span>的结合体。<span style="color: black;">咱们</span><span style="color: black;">首要</span>计算 m 值,它<span style="color: black;">暗示</span>的是当前位置的动量:</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">Adam 动量权重更新公式</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">该公式与动量公式的<span style="color: black;">独一</span>区别<span style="color: black;">便是</span>,当前梯度值乘以的不是学习率(alpha)而是 (1-Beta_1)。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">下一步<span style="color: black;">咱们</span>计算累积的缓存值,这跟 RMSProp 中的计算<span style="color: black;">办法</span><span style="color: black;">同样</span>:</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">最后得到的权重更新公式如下:</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">Adam 权重更新公式</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">如上公式所示,<span style="color: black;">咱们</span><span style="color: black;">经过</span>计算动量值来累加梯度值,与此<span style="color: black;">同期</span>,<span style="color: black;">咱们</span><span style="color: black;">能够</span>通过利用缓存值来<span style="color: black;">连续</span>更改学习率。<span style="color: black;">因为</span>这两个特征,Adam 的性能<span style="color: black;">通常</span>会比本文<span style="color: black;">说到</span>的以外的所有优化器都更好,因而在训练神经网络方面,它<span style="color: black;">亦</span>是被<span style="color: black;">研发</span>人员偏好<span style="color: black;">运用</span>的优化器。在 Adam 的<span style="color: black;">关联</span>论文中,<span style="color: black;">举荐</span> (Beta_1) 的参数取值为 0.9、(Beta_2) 的参数取值为 0.99 、(epsilon)的参数取值为 1e-08。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">在本文中,我<span style="color: black;">说到</span>了<span style="color: black;">都数</span>深度学习从业者在基本的深度学习任务中最常用的几个最重要的优化器,<span style="color: black;">期盼</span><span style="color: black;">大众</span>能够<span style="color: black;">经过</span>阅读本文有所收获!</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">注:作者在本文中<span style="color: black;">运用</span>的 a(Loss)/a(Wi) 符号,<span style="color: black;">实质</span>上<span style="color: black;">暗示</span>的是 Wi 值的 a(Loss)/a(W)。</p>
<p style="font-size: 16px; color: black; line-height: 40px; text-align: left; margin-bottom: 15px;">via </p>https://medium.com/deep-learning-demystified/https-medium-com-deep-learning-demystified-understanding-optimizers-313b787a69fe雷锋网雷锋网
你的话语如春风拂面,让我感到无比温暖。 你的话深深触动了我,仿佛说出了我心里的声音。 你的话语如春风拂面,让我感到无比温暖。 我完全同意你的看法,期待我们能深入探讨这个问题。 你的话深深触动了我,仿佛说出了我心里的声音。
页:
[1]