深层神经网络参数调优(四) ——adam算法、α衰减与局部最优

深层神经网络参数调优(四)——adam算法、α衰减与局部最优

(原创内容,转载请注明来源,谢谢)

一、概述

本文主要讲解另外一种思想的梯度下降——adam,并且在此之前介绍动量梯度下降和RMSprop算法作为前置内容。

另外,本文讲到学习速率衰减方式,以及局部最优和鞍点问题等。

二、动量梯度下降法

1、当前问题

mini-batch、随机梯度下降等,在优化每个w和b时,是会优化一个部分最优值,故容易出现抖动,导致优化速度慢。因此可以结合接下来的算法,来加快学习速度。

2、主要思想

将一个斜向的偏导数进行分解,以最优值点为中心的等价图中,分成横向和纵向,并且根据当前点的位置,对于需要快速优化的方向加速优化,对于不需要优化的方向,则减少优化,这样可以降低抖动。

3、公式

具体的做法,即之前提到的指数加权平均,根据这个方式,可以快速算出,每个w以及b当前的平均需要优化的值,再进行优化。

公式有两种,一种是下图左边(把紫色线划掉的部分加上),另一种则是不考虑紫色线划掉的部分。这两种本质上是一样的,区别仅在于对应的α的值不同。

这里需要的参数有两个,一个是之前一直提到的学习速率α,另一个是动量梯度下降需要用到的优化参数β。通常,β取0.9。

从物理上理解公式,可以认为有一个碗,然后球往下滚,V相当于速度,dW相当于加速度,β相当于摩擦力。

下图的公式有误,等式右边的v应该是vd(W-1),即是上一次计算出来的v才可以。b同v。

4、说明

对照动量梯度下降W=W-α*(β*v + (1-β)*dW),与之前梯度下降的W= W– α*dW,会发现动量梯度下降,在优化参数的时候,是会依赖之前的优化过程,相当于有一个“记忆”的功能。之前优化不太对的地方,在本次优化的时候,就会有所调整,直到逼近最优值。

因此,这种方式下,α就可以适当加大,加快学习速率。另外,也可以不用考虑之前说的一开始情况下的偏差,因为多训练几次后,自然就消除偏差了。

三、RMSprop

全称是root meansquare prop,这个公式和思想都和动量梯度下降很相似,只是在公式上有所不同,如下图所示:

下图公式等式右边同样有误,同上面计算动量。

可以看出,其在优化的时候,是用到了平方,而减法的时候是除以根号。这样一缩一放,则可以实现对需要加速学习的方向更加加速,对需要抑制变化的方向更加抑制变化。

上面的ε,是一个很小的数,主要是防止出现除以0的情况,其对算法基本没有影响,可以不用太过在意。

四、Adam算法

1、概述

全称是adaptmoment estimation,即自适应矩估计。

这里说到了“矩”的概念,概率论中矩的含义是:如果一个随机变量 X 服从某个分布,X 的一阶矩是 E(X),也就是样本平均值;X 的二阶矩就是 E(X^2),也就是样本平方的平均值。

根据上面的两种梯度下降,正好动量梯度下降就是一阶矩,而RMS就是二阶矩,故Adam算法把这两个结合了起来。

2、公式

其实际上是结合了动量梯度下降和RMS两种算法,把两个公式合在一起考虑了,具体过程见下面的公式:

3、说明

上面的参数中,需要调整的超参数通常只有α,其他几个超参数基本是确定的。一阶矩的系数β1=0.9,二阶矩的系数β2=0.999,ε=10-8,这些基本都是确定的。

另外,经过很多人的工作,发现Adam算法非常实用,结合随机梯度下降,其优化速度非常快,因此建议使用。

五、学习速率衰减

1、存在问题

对于随机梯度下降、mini-batch,在解决最优值的时候,会经过大量的波动,才会到达最优值,这个是因为其随机性比较大,都是部分最优值,而α如果比较大,有可能在接近最优值的时候,超出了最优值,导致波动。

2、方式

为了避免这个,可以在深度学习过程中,动态调整α。调整方式很多,见下面的第一种方式。

以遍历完成整个数据集,称为1代,即1 epoch。这里α每1代,则衰减一次,对应下面的公式,即参数epoch-num,初始为1,每遍历完成一次所有的数据集,则加一。

下图的公式中,α0是一开始设定的学习速率参数,而decay_rate是衰减率,这两个都是需要设定的参数。

除了上面的公式,还有下面几种方式。其中第一个称为指数衰减法;第二个式子的右边那个,t表示的是迭代mini-batch中的一个批次则衰减一次;第三个式子称为离散衰减。

3、说明

为了更快完成学习,可以进行动态的学习速率衰减。但是在刚开始调试架构的时候,通常是不用这个,直接调试更加直观。后面神经网络的架构稳定后,可以加上这个衰减。

六、局部最优化问题与鞍点

1、局部最优化问题

对于浅层神经网络和普通的机器学习,容易出现局部最优值,这是梯度下降算法固有的问题。

但是对于神经网络,特别是深层神经网络,基本不会出现这个问题。因为需要优化的维度太多了,而这些维度同时都是凹的或者凸的,概率很低。更多情况下是部分凹的部分凸的,导致会出现一个在某些维度下的最小值,称为鞍点。

如下图所示,左边是浅层网络的局部最优值,右边是深层网络会出现的鞍点(ng也是一个灵魂画师。。。。。。)。

2、鞍点的问题

鞍点会导致在一部分维度区域平缓,则偏导数很小,这样会导致优化起来非常慢,可能需要训练很久,才会离开这个鞍点,继续往后优化。

而正因为如此,Adam算法更体现了其优势,其是按维度分解进行优化的,因此可以更快速的对需要优化的方向进行优化。

七、总结

本文围绕深度学习更常用的优化方式——adam算法进行说明。梯度下降的时候,使用mini-batch或随机梯度下降,是为了遍历一次数据集能够优化更多次的w和b;而用adam算法,则是为了纠正mini-batch的部分数据最优值的问题,让其能够抖动的更少,更快速的趋向最优值。因此,这两种方法结合起来,在深度学习中则效率也就更高。

——written by linhxx 2018.02.07

相关阅读:

深层神经网络参数调优(五) ——超参数调试、batch归一化、softmax回归

原文发布于微信公众号 - 决胜机器学习(phpthinker)

原文发表时间:2018-02-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏计算机视觉战队

各类的梯度优化

梯度下降是最流行的优化算法之一并且目前为止是优化神经网络最常见的算法。与此同时,每一个先进的深度学习库都包含各种算法实现的梯度下降(比如lasagne, caf...

3686
来自专栏专知

【深度学习】一文教你如何确定好的“学习率”

【导读】近日,数据科学家Hafidz Zulkifli发布一篇文章,主要讲解了深度学习中的“学习率”,以及如何利用学习率来提高深度学习模型的性能并减少训练时间。...

3925
来自专栏GAN&CV

3D卷积简介

注:本文首发在微信公众号-极市平台。如需转载,请联系微信Extreme-Vision

1.5K3
来自专栏计算机视觉战队

梯度优化

梯度下降是最流行的优化算法之一并且目前为止是优化神经网络最常见的算法。与此同时,每一个先进的深度学习库都包含各种算法实现的梯度下降(比如lasagne, caf...

4059
来自专栏marsggbo

DeepLearning.ai学习笔记(二)改善深层神经网络:超参数调试、正则化以及优化--Week2优化算法

1. Mini-batch梯度下降法 介绍 假设我们的数据量非常多,达到了500万以上,那么此时如果按照传统的梯度下降算法,那么训练模型所花费的时间将非常巨大,...

2196
来自专栏李智的专栏

斯坦福CS231n - CNN for Visual Recognition(7)-lecture6梯度检查、参数更新

  梯度检查是非常重要的一个环节,就是将解析梯度和数值计算梯度进行比较。数值计算梯度时,使用中心化公式

1332
来自专栏超然的博客

Graph Attention Networks

paper:https://mila.quebec/wp-content/uploads/2018/07/d1ac95b60310f43bb5a0b802452...

2791
来自专栏专知

【深度干货】2017年深度学习优化算法研究亮点最新综述(附slide下载)

【导读】梯度下降算法是机器学习中使用非常广泛的优化算法,也是众多机器学习算法中最常用的优化方法。几乎当前每一个先进的(state-of-the-art)机器学习...

3195
来自专栏梦里茶室

TensorFlow 深度学习笔记 Stochastic Optimization

Stochastic Optimization 转载请注明作者:梦里风林 Github工程地址:https://github.com/ahangchen/G...

21610
来自专栏机器之心

深度 | 从修正Adam到理解泛化:概览2017年深度学习优化算法的最新研究进展

选自Ruder Blog 作者:Sebastian Ruder 机器之心编译 参与:刘晓坤、路雪、蒋思源 Sebastian Ruder 的这篇博客总结了 20...

40812

扫码关注云+社区

领取腾讯云代金券