深度学习DeepLearning.ai系列课程学习总结:11. 优化算法理论讲解

转载过程中,图片丢失,代码显示错乱。

为了更好的学习内容,请访问原创版本:

http://www.missshi.cn/api/view/blog/5a2272ad9112b35ff3000000

Ps:初次访问由于js文件较大,请耐心等候(8s左右)


在本文中,我们将了解一些机器学习中的优化算法基本理论。
主要包括:
1. Mini-Batch梯度下降法
2. 指数加权平均法
3. 动量梯度下降法
4. RMSProp梯度下降法
5. Adam优化算法
6. 学习速率衰减
7. 局部最优问题

Mini-Batch梯度下降法

深度学习是一个需要不断迭代,不断尝试才能得到一个合适的模型。 
因此,提高训练速度对于整个加快迭代的进度非常重要。 
由于深度学习只有在依赖大数据时,才能发挥出很好的效果;而利用海量的数据进行训练时,往往训练速度会非常慢。

下面我们来了解一下Mini-Batch梯度下降法,它很大的提高了对海量数据的训练速度。 
之前我们学到过,通过对数据进行矢量化运行,可以很好的利用机器的并行计算能力从而提高计算速度。 
但是当训练样本数非常大时,例如500万时。训练速度仍然会非常慢。 
主要的原因是因为目前的硬件设备没有足够的内存可以支持如此大量的数据同时进行计算。 
因此,如果在每次迭代中对全量的数据进行计算的话,对于海量数据时,训练速度仍然会是非常慢的。

那么如何提高训练速度呢?一个可行的方法是对海量数据进行分为若干组。 
每次迭代过程中,对其中的一组数据进行计算并进行迭代。而不再是每次迭代过程中使用全量数据。 
这些每个小组就是我们称的Mini-Batch。

假设每个Mini-Batch中包含1000个样本。 
那么第一次迭代时,我们使用的是第1个到第1000个样本; 
第二次迭代时,我们使用的是第1001个到第2000个样本; 
… 
假设我们一共有500万个样本,每次迭代使用1000个样本进行迭代,那么每次遍历样本需要经历5000次迭代。 
PS:在后续内容中,我们将使用 X{t} X{t}表示第t个Mini-Batch输入样本。 
下面,我们将每次遍历样本(epoch)的基本流程实现过程表示如下:

 
 
  1. for t = 1, ... , 5000 {
  2. 针对x{t}进行前向传播计算:
  3. Z = WX{t} + b
  4. A = g(Z)
  5. 计算当前批次的代价函数
  6. 反向传播计算出dWdb
  7. 更新Wb
  8. }

整个训练过程中,可能需要经过多次遍历样本(多个epoch)才能达到稳定。

下面,我们通过对比Batch梯度下降法和MiniBatch梯度下降法来更好的理解其原理: 
在使用Batch梯度下降法时,每次迭代的过程中,代价函数总是单调下降的: 
enter image description here 
而当我们是MiniBatch梯度下降法时,由于每次迭代过程中仅仅是针对一小部分数据进行迭代,所以不能保证每次迭代过程中代价函数都是下降的。但是其整体趋势是不断下降的: 
enter image description here

那么,在MiniBatch梯度下降法中,我们需要选择一个超参数batch-size的值。 
首先,我们来考虑两种特殊情况:

  • 当batch-size=样本数量m时:该方法实际为Batch梯度下降法。此时,每个Batch为全量的数据集。
  • 当batch-size=1时:该方法实际为随机梯度下降法。此时,每个Batch为一个样本。

MiniBatch梯度下降法、随机梯度下降法、Batch梯度下降法三种方法的代价函数逼近图如下所示: 
enter image description here 
其中,对于Batch梯度下降法而言,其没有发生震荡,稳定逼近最优值,需要的迭代次数最少,但是耗时最多。而对于随机梯度下降法,其波动程度最大,需要的迭代次数最多。而MiniBatch梯度下降法位于两者之间。 
对于随机梯度下降法而言,虽然其计算速度很快,但是它忽略了利用向量化带来的速度提升。而是在每次计算中使用当前样本进行训练。 
MiniBatch梯度下降法很好地结合了随机梯度下降法、Batch梯度下降法:一方面利用了向量化带来的计算效率提升,寻优过程的减少了迭代次数。另一方面,避免了海量数据造成的计算速度慢的问题。

那么batch-size的值究竟应该如何选择呢?

  1. 当训练样本集不大时(小于2000),可以直接使用Batch梯度下降法。
  2. 其他情况下batch-size通常可以选择64,128, 256, 512。(主要考虑计算机内存/显存的影响)

指数加权平均法

在后续的内容中,我们将会学习一些更加高效的优化算法。 
而作为其基础,我们首先需要学习一个内容:指数加权平均法。 
假设我们拥有了过去180天的伦敦气温,我们需要对后续的每日温度进行预测: 
enter image description here 
我们将其表示在图像中,得到的结果如下: 
enter image description here 
如果我们期望计算温度的趋势的话(局部平均值),我们可以这么做: 

v0=0v1=0.9v0+0.1θ1...vt=0.9vt1+0.1θt v0=0v1=0.9v0+0.1θ1...vt=0.9vt−1+0.1θt

按照如上方式,我们可以得到如下的折线图: 
enter image description here 
下面,我们将刚才的公式进行参数化: 
vt=βvt1+(1β)θt vt=βvt−1+(1−β)θt

在刚才的假设中,我们设置 β=0.9 β=0.9。 
通常,最终的结果可以近似认为是前 11β 11−β天的平均数字。 
例如,当 β=0.9 β=0.9时,可以近似认为是过去10天的平均值。 
β=0.98 β=0.98时,可以近似认为是过去50天的平均值。 
β=0.5 β=0.5时,可以近似认为是过去2天的平均值。 
enter image description here 
上图显示了当 β β分别取不同值时的预测结果。 
其中,红线表示了 β=0.9 β=0.9时的结果,绿线表示了当 β=0.98 β=0.98时的结果,而黄线表示了当 β=0.5 β=0.5时的结果。可以发现随着 β β值越大曲线越平缓,而当 β β值越小时曲线越陡峭。

接下来,我们了解一下指数加权平均的本质内容。 
首先仍然从如下公式开始入手: 

vt=βvt1+(1β)θt vt=βvt−1+(1−β)θt

假设 β=0.9 β=0.9时,那么有: 
v100=0.9v99+0.1θ100v99=0.9v98+0.1θ99... v100=0.9v99+0.1θ100v99=0.9v98+0.1θ99...

此时,将其展开我们可以得到如下结果: 
v100=0.1θ100+0.10.9θ99+0.10.92θ98+ v100=0.1θ100+0.1∗0.9∗θ99+0.1∗0.92∗θ98+…

这就是加权平均的含义,对之前的数据添加相关的权重。 
那么具体在应用的时候如何实现呢?基本的伪代码如下:

 
 
  1. v = 0
  2. for theta in theta_list:
  3. v = beta * v + (1 - beta) * theta

从代码中,我们可以看出它有一个很大的优点就是只需要存储一个变量 v v的值即可,而不需要把所有过程中的 v v全部存储下来。

下面,我们要继续学习一个偏差修正的方法,来是的我们计算的平均值更加有效。 
对于细心的同学,可能在之前的内容中所有困惑,当我们在使用如下公式计算时: 

vt=βvt1+(1β)θt vt=βvt−1+(1−β)θt

θ=0.98 θ=0.98时,  v1 v1应该是从接近于0开始的。然而,我们之前的曲线的起点并不是零。 
那是我们进行了 偏差修正后的结果,真实曲线应该如下图中的紫线所示: 
enter image description here
我们可以看到紫色的曲线起点值很小,这与真实的结果不太符合。 
下面,我们来讲解一下 偏差修正的实现方式: 
vt=vt1βt vt=vt1−βt

下面,我们以 θ=0.98 θ=0.98 t=2 t=2时进行举例: 
v2=v210.982=0.0196θ1+0.02θ20.0396 v2=v21−0.982=0.0196θ1+0.02θ20.0396

momentum梯度下降法

下面我们来学习一种更加高效的优化算法:momentum梯度下降法。 
假设我们期望优化的代价函数图如下,其中,红点位置表示最优值: 
enter image description here
那么通常情况下,我们训练过程中的曲线大致如下: 
enter image description here
可以发现在波动过程中的大量的上下波动影响了寻优的速度,同时制约了我们使用更大的学习速率。 
实际上,我们希望的是在纵轴(无效波动)上减少迭代过程中的波动程度,而在横轴(寻优路径)上加快学习速率。 
那么,此时我们可以利用之前学习到的加权平均法。 
此时,经过加权平均法处理后,在无效波动上,由于会对一段时间的波动取平均值,可以有效的减小过程中的波动程度。 
具体实现的过程基本如下:

 
 
  1. for iter in iterations:
  2. 计算每次迭代过程中的dW, db
  3. 利用加权平均计算V_dWbeta * V_dw + (1-beta)dW;
  4. 利用加权平均计算V_db: beta * V_db + (1-beta)db;
  5. 更新WbW=W-alpha*V_dW; b=b-alpha*V_db;

Ps:在实践中发现, β=0.9 β=0.9通常是一个比较有效的选值。

RMSProp梯度下降法

RMSProp梯度下降法是另外一个有效的优化算法。 
同样也是利用了指数加权平均法来进行,相比momentum梯度下降法而言,只是从另外一个角度考虑。 
具体实现的过程基本如下:

 
 
  1. for iter in iterations:
  2. 计算每次迭代过程中的dW, db
  3. 利用加权平均计算S_dWbeta * S_dw + (1-beta)dW ^ 2;
  4. 利用加权平均计算S_db: beta * S_db + (1-beta)db ^ 2;
  5. 更新WbW=W-alpha*(dW/(S_dW)^0.5); b=b-alpha*(db/(S_db)^0.5);

Ps:下面,我们来解释一下上述方法的原理: 
我们的目标是减少无效波动,而在无效波动的方向上变化速率通常更大。 
因此,我们将dW和db除以变化的波动速度可以有效的降低无效波动的程度。

Adam优化算法

Adam优化算法是目前应用最广泛的优化算法之一。 
它是将momentum梯度下降法和RMSProp梯度下降法结合得到的。 
具体的实现如下:

 
 
  1. for iter in iterations:
  2. 计算每次迭代过程中的dW, db
  3. 利用加权平均计算V_dWbeta1 * V_dw + (1-beta1)dW;
  4. 利用加权平均计算V_db: beta1 * V_db + (1-beta1)db;
  5. 利用加权平均计算S_dWbeta2 * S_dw + (1-beta2)dW ^ 2;
  6. 利用加权平均计算S_db: beta2 * S_db + (1-beta2)db ^ 2;
  7. # 偏差修正
  8. V_dW_correct = V_dW/(1-beta1^iter)
  9. V_db_correct = V_db/(1-beta1^iter)
  10. S_dW_correct = S_dW/(1-beta2^iter)
  11. S_db_correct = S_db/(1-beta2^iter)
  12. # 更新W和b:
  13. W=W-alpha*(V_dW_correct/(S_dW_correct)^0.5 + epsilon); b=b-alpha*(V_db_correct/(S_db_correct)^0.5 + epsilon);

在这个过程中,涉及到了如下一些超参数:

  1. alpha(需要调试)
  2. beta1(通常可以设置为0.9)
  3. beta2(通常可以设置为0.999)
  4. epsilon(通常可以设置为 108 10−8)

学习速率衰减

加快学习过程的一个方法是随着时间的推移,慢慢降低学习速率,我们称之为学习速率衰减。 
那么为什么学习速率衰减会有助于加快学习过程呢? 
以下图为例: 
enter image description here
在上图中,蓝色的线表示使用固定学习速率得到的结果。可以发现当它已经在最优点附近值,由于学习速率较大,还呈现出较大的波动。 
而为了减小其在最优值附近的波动,我们需要设置更小的学习速率,而这个过程则会减慢学习的过程。 
绿线表示了学习速率衰减时的情况,在早期时,保持较大的学习速率加速向最优值逼近。而当其达到最优值附近时,则学习速率不断降低从而导致较小的波动程度。 
我们常用的学习速率衰减方法如下: 

α=11+decay_rateepoch_numα0 α=11+decay_rate∗epoch_num∗α0

其中,epoch_num表示第一轮数据集遍历。 
当我们假设 α0=0.2 α0=0.2 decay_rate=1 decay_rate=1时:

Epoch appha
1 0.1
2 0.67
3 0.5
4 0.4

除此之外,还有一些其他常用的学习速率衰减方法,例如: 

α=0.95epoch_numα0α=kepoch_num0.5α0α= α=0.95epoch_num∗α0α=kepoch_num0.5∗α0α=离散函数方法等

此外,有时我们在进行长时间训练时,还可以手动进行学习速率衰减。

局部最优问题

在早期的机器学习过程中,寻优过程中陷入局部最优往往是研究者需要努力解决的问题。 
我们将在本节中简单的讲解局部最优的概念以及目前在深度学习中局部最优的影响。 
在谈到局部最优时,我们脑中往往会浮现出类似的图形: 
enter image description here 
在该图中,存在着很多的局部最优点,而如果针对该模型应用梯度下降法时,我们很容易的陷入局部最优中。 
这种印象造成了我们认为局部最优对于我们的优化过程有着很大的影响。 
然而在深度学习中,由于参数的维度很大,局部最优其实对本身的寻优过程影响并不大。 
因为在实际应用中,我们所达到的梯度为0的点通常并不是最不最优点,而是鞍点,例如下图所示: 
enter image description here 
而对于鞍点而言,其实并没有达到局部最优,梯度下降法仍然后继续进行寻优迭代过程。 
假设在一个20000维的空间中,如果想要达到局部最优点,那么就需要所有的维度方向全部达到局部最优值,这种概率往往是非常小的,可以忽略不计。




更多更详细的内容,请访问原创网站:

http://www.missshi.cn/api/view/blog/5a2272ad9112b35ff3000000

Ps:初次访问由于js文件较大,请耐心等候(8s左右)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 《envi deep learning v1.0深度学习操作教程_202003.pdf》是一本关于ENVI深度学习版本1.0的操作教程。ENVI是一款专业的遥感图像处理软件,而深度学习则是当前计算机视觉和人工智能领域的热门技术。 这本教程主要针对ENVI深度学习版本1.0进行了详细的操作说明和教学。这个版本的ENVI深度学习提供了一系列针对遥感图像处理的深度学习工具和算法,方便用户利用深度学习技术进行更加精确和高效的图像处理和分析。 教程中首先介绍了ENVI深度学习的基本原理和背景知识,包括深度学习的基本概念、神经网络和常见的深度学习算法等。接着,教程详细介绍了ENVI深度学习版本1.0的安装和设置步骤,以及软件界面和主要功能的使用方法。 在教程中,作者还针对常见的遥感图像处理任务,如图像分类、目标检测和图像分割等,提供了具体的操作步骤和示例。通过这些示例,读者可以学习如何使用ENVI深度学习版本1.0进行不同任务的图像处理和分析。 总的来说,这本教程对于想要学习和掌握ENVI深度学习版本1.0的操作和应用的用户来说是一本非常实用的指南。通过学习这本教程,用户可以了解深度学习在遥感图像处理领域的应用,提高自己的图像分析能力,并在实际项目中应用这些技术。 ### 回答2: envi deep learning v1.0深度学习操作教程_202003.pdf是一本关于ENVI深度学习版本1.0操作教程的PDF文档。ENVI是一种用于图像处理和空间数据分析的软件,而深度学习是一种机器学习的分支,通过模拟人脑神经网络的工作原理来处理复杂的问题。 该教程旨在帮助读者了解如何使用ENVI进行深度学习任务。它包括了深度学习的基本概念和原理,以及如何用ENVI软件进行深度学习的具体操作。在教程中,读者将学习如何准备输入数据、选择合适的深度学习模型、进行模型训练和评估,以及如何使用训练好的模型进行预测和分类。 该教程涵盖了广泛的主题,包括数据预处理、特征提取、模型训练和调整等。读者将学习如何使用ENVI软件中提供的工具和功能来进行这些操作,并了解如何解决在深度学习任务中常见的问题和挑战。 通过学习这本教程,读者将能够掌握ENVI深度学习版本1.0的操作技巧,能够在图像处理和空间数据分析中应用深度学习算法。这将为他们在各种领域中解决复杂问题提供有力的工具和方法。无论是在环境科学、地理信息系统还是其他相关领域,ENVI深度学习操作教程都会为读者提供宝贵的知识和经验。 ### 回答3: 《envi deep learning v1.0深度学习操作教程_202003.pdf》是一份关于使用envi deep learning v1.0进行深度学习操作的教程。envi deep learning是一种用于遥感图像分析的深度学习工具,提供了一套丰富的功能和算法,用于解决从遥感图像中提取信息和进行分类的问题。 在这份教程中,首先介绍了envi deep learning v1.0的基本原理和使用环境的配置。接着,详细介绍了深度学习的基本概念和方法,包括卷积神经网络(CNN)和迁移学习。然后,教程重点讲解了如何使用envi deep learning进行遥感图像分类和目标检测,包括数据准备、模型设计和训练过程。同时,还介绍了常见的遥感图像数据集和应用案例,并提供了相关的代码示例和实验步骤。 这份教程的设计旨在让初学者能够快速上手并掌握envi deep learning v1.0的使用技巧。通过学习这份教程,读者可以了解到如何利用深度学习技术处理和分析遥感图像,包括提取地物信息、进行分类和目标检测等任务。同时,教程还提供了实用的技巧和注意事项,帮助读者克服在实际应用中遇到的常见问题。 总之,《envi deep learning v1.0深度学习操作教程_202003.pdf》是一份很有价值的教程,它详细介绍了envi deep learning v1.0的使用方法,帮助读者快速掌握遥感图像深度学习的基本理论和实践技巧。无论是初学者还是有一定经验的研究人员,都可以通过学习这份教程提升自己的研究能力和实践能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值