吴恩达week6 ~批量梯度下降 指数加权平均 动量梯度下降 学习率衰减 Adam


前言

一、小批量梯度下降 mini-batch

如果一个数据集有500w个数据,那我们迭代一次花费的时间就太久,且对所有训练集遍历一次也只是梯度逼近一步,但如果我们采用小批量梯度下降,大小为1000,那我们每迭代一次在1000个数据上就能逼近w一步,迭代完所有数据就梯度逼近5000步,能够提高效率。

在这里插入图片描述
向前传播 损失函数的计算 向后传播都要相应改变。

1、batch gradient descent

如果 mini-batch size=m
则就相当于普通的梯度下降了。
如果数据集不大的情况下,这是一种好的算法。一般而言<2000

2、stochastic gradient descent

随机梯度下降
如果 mini-batch size=1
这时候我们便失去了矢量化使计算加速的优点了
因为每次只有一个样本。

3、mini-batch gradient descent

如果 1<mini-batch size<m
我们一般取2的n次方,与计算机存储有关,一般取64-512
这样的好处是:既可以使用矢量计算的好处
又可以不必每次在所有数据遍历完一遍之后在梯度逼近

二、指数加权平均

exponentially weighted averages

1.什么是指数加权平均

这里以温度为例

在这里插入图片描述
Vt 为加权后的温度,
theta t:是当天的真实温度
β:是系数,也相当于一个超参数,一般取0.9
当β=0.9时,我们说取的近似是10的平均温度。
1/1-β。
在这里插入图片描述
红色是β=0.9
绿色是β=0.98
我们可以看出β=0.98时,绿色线向右移动,
通过公式我们可以看出,那是因为之前的权重变大了而当天的权重减小了。

2、理解指数加权平均

在这里插入图片描述对于V100 我们可以一步一步拆解开来,可以看到对于每天的温度都有不同的权重。
0.9的10次方≈1/e 约等于最大值的三分之一
即当10天之后的温度会下降到最大权重的三分之一,可以忽略。
即就相当于β=0.9时,我们相当于计算的是10天的平均气温。

3、与普通求平均值的区别

①普通求平均值我们都是相当于一样的权值,比如语文100,数学99,英语98。那么三科平均值就是99.
但是对于指数平均我们相当于给了不同的值不同的权重,例如温度,我们肯定是离今天近的权重大,离今天太远的,我们可以忽略。
②代码简单,且需要的存储空间小。
比如想要求n天的平均值,那么我们只要有前n-1天的值和当天的值即可,
若是普通求平均值,则需要把n天的值都存储起来。

4、指数加权平均的偏差修正

在这里插入图片描述
当β=0.98时,我们实际得到的是紫色这条线
刚开始V0=0
V1=βV0+(1-β)θ1 =0.02θ1
V2=0.98
0.02*θ1+0.02θ2
因为前面的系数太小,所以导致V1,V2这些得到的并不是前几天的平均值。
比平均值小。
但是当往后时,迭代次数增多之后,紫色与绿色线几乎重合。
所以在批量梯度下降时,由于迭代次数多,所以几乎可以不用偏差修正。
在这里插入图片描述
我们可以采用第一个公式进行偏差修正,当t很大时,βt≈0,此时紫色与绿色线又几乎重合。


三、gradient descent with momentum

在这里插入图片描述
一般的 对于我们的梯度下降算法来说,如果我们的学习率太小,迭代一次效率就会过低,但是如果学习率太大,就会造成我们的损失函数并没有朝着 减小的方向前进。
我们既希望在水平方向上朝着最小值前进,又希望在垂直方向上不要太过跌宕。

动量梯度下降
我们采用了指数加权平均的方法
如果我们的学习率过大,我们在垂直方向上可能如图:
在这里插入图片描述
虽然水平方向上一直还是沿着最小值,但是水平方向可能太过跌宕,如下图绿色线。
在这里插入图片描述

画的太丑 可以忽略。不过我觉得这个更直观
红色的是我们希望的 水平方向沿着最小值前进 且垂直方向不会太跌宕
采用了指数加权平均后,我们在垂直方向上的平均值就会平缓许多,平且在水平方向上还是沿着最小值方向前进。

在这里插入图片描述

吴老师这个公式我觉得不太对…公式右边为什么还是Vdw呢?那移到左边不是可以抵消了吗?心存疑惑…希望知道的可以解答一下~~

后续:
懂了,老师的公式没错,是我理解错了。
Vt=βVt-1+(1-β)θt
这里的Vt-1是关于Vt的上一次迭代,而
Vdw[l]=βVdw[L]+(1-β)dw
这里的L与之前的t不同,这里的L是某一次迭代的某一个参数W[l]
而两边的Vdw[L]并不同,右边的是之前迭代得到的,而左边是通过之前的和当前的dw[l]得到的
并不能抵消。

四、RMSprop

root mean square prop
在这里插入图片描述
我们希望在垂直方向上数值不要太大,水平方向上数值不要太小。
在垂直方向上 的值会过大,db也就会大,相对而言水平方向的值小。
除以之后就会变化,w会大,b会小。
rmsprop 和动量梯度一样可以降低我们梯度下降中的震荡,同时使我们可以以一个大的学习率α,从而提高算法的效率。

五、适应性矩估计 Adam

在这里插入图片描述
Adam结合了动量梯度下降和RMSprop的好处。
Adam一般都需要偏差修正!!!
超参数:
在这里插入图片描述

六、学习率衰减

learning rate decay
在这里插入图片描述
蓝色:是我们学习率固定时,由于学习率固定,在最后阶段我们在最小值周围绕,且这个范围较大。
此时,如我们采取学习率衰减,刚开始仍能以较大的步长梯度下降,最后我们可以以小的步长来接近最小值。如绿色。
学习率衰减的公式:
在这里插入图片描述
dacay-rate是一个超参数。
其他公式:
在这里插入图片描述

t是批处理中 批处理的t,每一次遍历中学习率α都随t的变化而变化,并且每次遍历都与之前遍历的α相同。就导致如左下图的学习率。

七、局部最优解问题。

在这里插入图片描述

比如左边图,这是一个低维图,我们很容易可以看出这个图有很多局部最优,而不是全局最优。
但是对于高维图,这种局部最优是很难的,它需要每一个方向上都是凹函数,对于一个200维的,这种局部最优概率是1/2的200平方。
所以对于高维图,是很难出现多个局部最优的,出现的大多都是右图这种,叫做鞍点。
每个方向的凹凸不一定都一致,这不是局部最优点。

对于高维我们要解决的不是多个局部最优的问题,更应该解决的是停滞区的问题,梯度逼近太慢。
但是通过adam和动量梯度下降可以解决这个问题。
在这里插入图片描述

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: PyTorch是一个基于Python开发的机器学习框架,它拥有丰富的工具和功能,适用于各种任务,包括遥感图像地物分类。遥感图像地物分类是指通过对遥感图像进行分析和识别,将不同地物分类为不同的类别,如建筑、道路、植被等。 在PyTorch中实现遥感图像地物分类可以遵循以下步骤: 1. 数据准备:首先,需要准备用于训练和评估的遥感图像数据集。可以从公开数据集中获取,或者根据实际需要收集和整理数据集。 2. 数据加载:使用PyTorch的数据加载器,将图像数据集加载到内存中,并对数据集进行预处理,如裁剪、缩放和标准化等。 3. 模型设计:选择适合遥感图像分类的模型架构,如卷积神经网络(CNN)。可以使用PyTorch提供的模型库,如ResNet、VGG等,也可以自定义模型。 4. 模型训练:将加载的图像数据集输入到模型中,通过定义损失函数和优化器,使用PyTorch提供的自动求导功能,进行模型训练。可以根据需要设置训练的迭代次数、学习率等超参数,并周期性地评估模型的性能。 5. 模型评估:训练完成后,使用测试集对模型进行评估,计算分类精度、查准率、查全率等指标,评估模型的性能。 6. 模型应用:经过训练和评估后,可以使用该模型对新的遥感图像进行分类预测。将新的图像输入到模型中,经过前向传播计算,得到图像的预测类别。 总而言之,通过PyTorch实现遥感图像地物分类可以借助其强大的机器学习功能和便捷的开发环境,快速高效地完成图像分类任务。同时,PyTorch还提供了丰富的工具和库,方便用户进行模型设计、训练和评估,并具有良好的可扩展性和灵活性,满足不同用户的需求。 ### 回答2: PyTorch是一个常用的深度学习框架,它提供了丰富的功能和工具,可以用于遥感图像地物分类任务的实现。在知乎上,关于PyTorch实现遥感图像地物分类的问题,可能会有一些相关的回答。 首先,我们需要准备好用于训练的遥感图像数据集。可以使用公开的遥感图像数据集,或者是自己收集的数据集。数据集应包含不同类别的地物图像样本,并且要进行适当的标注。 接下来,我们可以使用PyTorch的数据处理工具,如`torchvision`来加载和预处理图像数据。可以使用`torch.utils.data.Dataset`构建一个自定义的数据集类,根据需要对图像进行预处理操作,如缩放、裁剪、归一化等。 然后,我们可以使用PyTorch搭建一个卷积神经网络(CNN)模型,用于图像分类任务。可以根据具体的需求选择不同的网络结构,如ResNet、VGG等。可以使用`torch.nn`模块来构建自定义的网络模型,包括卷积层、池化层、全连接层等。 在模型搭建完成后,我们需要定义损失函数和优化器来进行训练。常用的损失函数有交叉熵损失函数(CrossEntropyLoss),可以通过`torch.nn.CrossEntropyLoss`来定义。优化器可以选择Adam、SGD等,可以使用`torch.optim`模块来构建。 接着,我们可以编写训练循环,使用训练数据来迭代训练模型。可以使用`torch.utils.data.DataLoader`来创建一个数据迭代器,方便获取批量的数据样本。然后,依次将数据输入到模型中,计算损失函数,并通过优化器来更新模型参数。 在训练过程中,可以使用一些技巧来提高模型性能,如数据增强、学习率调整等。可以通过`torchvision.transforms`来实现数据增强操作,如随机裁剪、随机旋转等。可以使用学习率调整器(Learning Rate Scheduler)来动态调整学习率,如StepLR、ReduceLROnPlateau等。 最后,在训练完成后,我们可以使用测试数据对模型进行评估。可以使用测试数据集来验证模型的泛化能力,并计算评估指标,如准确率、召回率等。 总之,使用PyTorch实现遥感图像地物分类是一个相对复杂的任务,但通过合理的数据处理、模型搭建和优化方法,可以有效实现。知乎上也有很多关于这一问题的讨论和分享,可以帮助我们更好地理解和实践相关内容。 ### 回答3: pytorch是一个常用的深度学习框架,可以用于遥感图像地物分类任务的实现。在pytorch中,可以利用卷积神经网络(CNN)进行图像分类任务。 首先,需要准备好遥感图像的数据集。数据集应包含标注好的遥感图像样本,以及每个样本对应的地物分类标签。接下来,可以利用pytorch的数据加载工具,如torchvision库中的datasets模块,将数据集按照一定的比例划分为训练集、验证集和测试集。 然后,可以利用pytorch的模型类来定义一个卷积神经网络模型。模型的结构可以根据具体任务进行设计,一般建议包含多个卷积层、池化层和全连接层。可以根据需要,使用不同的卷积核大小、步幅和激活函数等。 在模型定义好后,可以利用pytorch的优化器类定义一个优化器,如Adam优化器。优化器可以控制模型的权重更新方式,在训练过程中调整学习率动量等超参数。 接下来,可以利用pytorch的训练循环来训练模型。训练循环包括多个迭代的训练阶段,每个阶段包括前向传播、计算损失、反向传播和模型权重更新等步骤。可以利用pytorch的损失函数类定义一个损失函数,如交叉熵损失函数。在训练过程中,通过最小化损失函数来优化模型的权重。 在训练结束后,可以利用验证集来评估模型的性能,并根据需要进行调参和优化。最后,可以利用测试集对训练好的模型进行评估,并根据评估结果进行后续的地物分类任务。 总之,pytorch可以提供一个灵活、高效的深度学习框架,用于实现遥感图像地物分类任务。通过合理设计模型结构、选择合适的优化器和损失函数,以及使用训练循环和数据加载工具等功能,可以实现高准确率的地物分类模型。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值