诚信为本,市场在变,诚信永远不变...
  咨询电话:400-123-4567

行业新闻

深度学习中如何选择好的优化方法(optimizer)【原理】

除了随机梯度初始化(SGD),在深度学习中还有很多其他的方法可以对网络进行优化

1. 减少网络收敛时间

2. 除了学习率(learning rate)还有更多其他的参数

3. 比SGD到达更高的分类准确率


一. 自适应学习率

为了更好的理解优化的方法,这里我们都是用伪代码的方式来进行描述。

首先,我们先来看我们最熟悉的SGD的方法

 

其中我们有三个变量:

1. W:权值矩阵

2. lr:学习率

3. dW:权值W的梯度

其中,我们的学习率是固定的,假设它很足够小,loss在训练的过程中就会下降。

(1)Adagrad

Adagrad在网络中会自适应的改变学习率,在参数改变不明显的时候学习率变化更频繁,在参数改变明显的地方学习率变化减弱。我们来看看Adagrad的更新公式:

 

注意到的第一个参数是cache,这个参数表示每一个参数梯度平方的总和,会在训练过程每一次小的mini-batch进行更新。当观察cache时,我们可以发现哪些参数更新的快,哪些更新的慢。

接着使用lr*dW除以cache的平方(这里加一个epsilon的原因是为了防止除数为0)。发现,当cache变化的很快时,cache的值会变得很大,接着在下一个公式有效的对学习率进行降低,同样,当变化的很慢时,学习率会相应的变大。

Adagrad最大的优点在于人们不需要手动的调节学习率——在大多数设置中,初始设定为0.01,然后让其自动在网络中进行调节。

但是,同样其缺点也非常的明显。在每一个mini-batch,梯度按照平方的形式在分母累计。因为梯度会平方(永远是正数),这个累积会在训练过程一直增加。我们都知道,当一个很小的数目除以一个很大的数目的时候,结果就会趋近于零,会导致更新非常的小而实际上什么都学习不到。这也是为什么我们不经常在深度学习中使用Adagrad的原因。

(2)RMSprop

RMSprop是对于Adagrad的一个改进,可以减少因为cache带来的学习率单调递减的问题。主要的方法是采用了指数加权滑动平均(EWMA)。

 

跟Adagrad的更新方式相似,主要的区别在于cache的变化。decay_rate, 经常被设置为0.9。这种滑动平均的方式可以让cache丢掉老的梯度平方,从而用新的来代替。

所以,在深度学习中,RMSprop比Adagrad更有效,并且收敛速度比SGD更快。是现在第二流行使用的优化方式,接下来介绍最佳的优化方式Adam

(3)Adam

 

其中,m和v的值和SGD的动量很相似,m代表第一时刻的梯度,v代表第二时刻。

W的跟新方式与RMSprop是一样的,一般情况下,beta1为0.9,beta2为0.999.


二.好的优化方式推荐

有这么多的优化方式,对于我自己的模型而言,哪一个更好呢?其实,现在还没有一个明确的答案,最好的方法是,选择几个不同的方法在自己的模型上尝试,找到最适合的。

这里特别要提醒的是,千万不要忽略SGD的重要性,你会发现,在AlexNet,VGGNet,SqueezeNet,Inception,ResNet中,都采用的是SGD的方法,为什么呢?

虽然SGD会比较的慢,但是对于网络来说,参数才是最重要的,如果你不能将优化参数调到最佳的话,你永远得不到好的准确率。SGD的使用时间将近60年,人们对它会更熟悉。

小tips:如果你可以使用SGD在指定的数据上达到很高的准确率,我建议你就使用SGD尽管会比RMSprop和Adam时间长一些。所以必须要记住的三种优化方式为:

1. SGD

2. RMSprop

3. Adam

一个模型建立时,首先使用SGD,一般情况下,结果会比较好。接着,再使用另外两种,建议直接使用Adam,因为在大多数情况下Adam会比RMSprop表现的好。


平台注册入口