Datawhale 7月学习——李弘毅深度学习:网络的优化

前情回顾

  1. 机器学习简介
  2. 回归
  3. 误差与梯度下降
  4. 深度学习介绍和反向传播机制

0 概述

这一次课涉及5个video,内容比较分散,这里先小结一个mind map。
在这里插入图片描述

1 梯度下降法的局限

这里指的是梯度下降法陷入saddle point和local minima的情形。

1.1 saddle point和local minima

梯度下降法求解到一定程度,会出现如下图黄色的情况。此时,求解可能到达了saddle point,也可能到达了local minima。
在这里插入图片描述
saddle point和local minima如下图所示。saddle point是鞍点,可能在这个方向上梯度为零,但仍然存在优化的可能;local minima是局部极值,这个点的四周都比它高。
在这里插入图片描述

1.2 识别saddle point和local minima

如何识别鞍点(saddle point)和局部极值点(local minima),通过Hessian来确定。
下图的 L L L是一个泰勒展开式,定义 H H H为二阶偏导。
在这里插入图片描述
H H H可以用于区分以下三种点。
在这里插入图片描述
可以根据 H H H的正负来判断当前点属于什么。
在这里插入图片描述
也可以通过画图来确定。
在这里插入图片描述
在这里插入图片描述
在saddle point中,Hessian可以告诉我们梯度update的方向
在这里插入图片描述
但是在实操中,不会用这个方法来确定saddle point,计算量太大。

1.3 saddle point和local minima哪个更常见

在低维空间中无路可走,在高维空间可能有路。
在这里插入图片描述
在二维是个local minima,在三维有可能是saddle point。
在这里插入图片描述
local minima没有那么常见,在高维还是大部分都是saddle point。

2 批次Batch与动量Momentum

2.1 Batch

2.1.1 Batch是什么

每次训练都割成很多份数据,就是很多个batch,每次训练都要把所有的batch都练完,才完成一步(一个epoch)。
在这里插入图片描述

2.1.2 小batch和大batch的优缺点

在不引入并行计算时
在这里插入图片描述
通常认为,小batch的好处是看一部分数据,就可以update一次参数;而大batch则要看完全部数据才能够update。
但是,小batch也容易导致振荡,而大batch的求解则更加稳定。

考虑并行计算时

但是如果考虑并行运算(使用GPU),大batch不一定比小batch运算时间长。看一个具体的案例:手写数字识别(MNIST数据集),除非数据实在太大。
在这里插入图片描述
在这里插入图片描述
甚至考虑并行计算时,小batch因为需要不断读取数据及更新,在一个epoch上需要更多的时间。

在training上的效果

但是,小的batch size(nosiy update)依然会带来比较好的training结果。在两个数据集上,的实践证明了这一点。
在这里插入图片描述
所以为什么会更好呢?
在这里插入图片描述
相当于有多个备份,当一个batch梯度下降卡在平台时,另外一个不会卡住,这样有助于更快速的完成梯度下降寻优。

在testing上的效果

此外,小的batch也对testing有好处。这里有一篇参考文献:On Large-Batch Training for Deep Learning: Generalization Gap and Sharp Minima
在这里插入图片描述
为什么是这样?

从下面这张图可以直观地进行理解,一般来说training和testing都会有loss的差距。这里假设是testing比training向右平移。如果求出来的结果是flat minima(梯度比较平缓)的话,则train和test的差距没有那么明显,但如果是sharp minima(梯度比较锋利)的话,差距就会非常明显。

我们普遍会认为,small batch可以帮我们找到一个flat minima,而large batch更容易走到sharp minima里头。
在这里插入图片描述

2.1.3 总结:小batch vs 大batch

在这里插入图片描述
因此,batch size是一个需要调整的超参数。
在这里插入图片描述
李宏毅推荐了一些参考论文,探讨如何确定一个好的batch size从而同时获得较快的计算速度及较好的准确性。
在这里插入图片描述

2.2 Momentum

尝试像一个真实世界里的小球,让它具有一定的惯性,从而不会被local minima卡住。
在这里插入图片描述
此时,会变成这个样子。每次移动的方向,除了受到gradient的影响,还受到上一步的移动方向的影响。
在这里插入图片描述
通式如下:
在这里插入图片描述
更直观地理解,依然看小球下坡的例子。走到local minima时,还受到前一步方向的影响。就算是走上坡,如果前一步的方向影响够大,也依然可以往前走。
在这里插入图片描述

3 自动调整学习率adaptive learning rate

3.1 为什么需要自动调整学习率

在实际上,loss练到不变时,gradient不见得很小。这个可能是因为卡在了一个山谷,就没有办法再下降了。
在这里插入图片描述
回到之前回归时用过的例子,learning rate的调整很麻烦
在这里插入图片描述
太大振荡,太小走着走着就走不动了。

learning rate不应该在每一个时刻都使用相同的,需要特制化的learning rate。

3.2 随参数特制化的学习率

3.2.1 Root Mean Square

常见的类型是,计算平均方差(Root Mean Square)。
在这里插入图片描述
上述方法被用于AdaGrad。
为什么有用呢?
如果连续梯度很大,就用小一点的learning rate,如果连续梯度很小,就用大一点的learning rate。这样又不容易出现振荡,又不容易陷入局优。
在这里插入图片描述

3.2.2 RMSProp

我们希望同一个参数,同一个方向,learning rate也可以是动态的。举个例子如果error surface是新月型的,在w1不同值时,我们希望w2的学习率也有变化,如下图。
在这里插入图片描述
新的方法RMSProp(无论文)就是解决这个问题的。
在这里插入图片描述
可以动态调整learning rate。
走到很陡的地方可以很快地踩一个刹车,走到平滑的时候又可以加快。
RMSProp方法的优点在于,可以调整 α \alpha α,这样可以关注接近的梯度,而不是对先前的所有梯度都同等对待。
在这里插入图片描述

3.2.3 learning rate scheduling

learning rate scheduling可以防止最后阶段的振荡。分为learning rate decay和warm up。
在这里插入图片描述
在这里插入图片描述
warm up在很多知名network有用到,是个黑科技,比如:

  • Residual Network
  • Transformer
    在这里插入图片描述
    Warm up的作用有点像收集信息,就是在前面阶段需要收集足够多的信息,然后再来进行学习,才能学的更好。
    关于Warm up的更多内容可以查看RAdam

3.3 Adam优化

我们现在最常用的Adam优化就是,基于RMSProp和Momentum的。论文:Adam: A Method for Stochastic Optimization
在这里插入图片描述
一般用Adam优化器,使用PyTorch预设的参数就可以。
可参见Adam的PyTorch官方文档

3.4 小结

在这里插入图片描述

值得注意的momentum和root mean square的效果不会相互抵消掉。

4 简化error surface

目标:直接把山铲平,尝试把error surface变得简单。

4.1 损失函数Loss

4.1.1 分类问题classification

分类问题很多时候不可以简单当作回归问题的指标来体现。
在这里插入图片描述
一般会把class进行独热编码(one-hot vector)。
在这里插入图片描述
如果是一个向量化的输入,则一般来说是下面这样的。
在这里插入图片描述
输出往往需要加一个 s o f t m a x softmax softmax,简单地解释就是希望 y y y里头的值更靠近0,1。
softmax的运作如下图所示:
在这里插入图片描述
如果是二分类问题一般就不用 s o f t m a x softmax softmax,就用 s i g m o i d sigmoid sigmoid了,他们是同一件事情。

4.1.2 Loss function

我们常见的可能是MSE,但是还有一种更常用的是交叉熵 Cross-entropy。
L ( y ^ , y ) = ( y log ⁡ y ^ + ( 1 − y ) log ⁡ ( 1 − y ^ ) ) L (\hat y,y)= (y\log {\hat y} + (1-y)\log(1-\hat y )) L(y^,y)=(ylogy^+(1y)log(1y^))
在这里插入图片描述
下面介绍Cross-entropy在求解优化上有什么优点。从下图可以看到MSE很容易train不太起来(当然用Adam还是有机会),但是Cross-entropy就很好求解。
在这里插入图片描述
Cross-entropy常用到什么地步呢?在PyTorch里头, s o f t m a x softmax softmax内嵌到Cross-entropy里头了,只要你用Cross-entropy,就会自动在你的网络最后一层加上 s o f t m a x softmax softmax

可参见PyTorch官方文档,其中提及

This criterion combines LogSoftmax and NLLLoss in one single class.

4.2 批次标准化 batch normalization

4.2.1 batch normalization的目的

常见的landscape是convex碗状的,而且可能几个变量间差别很大,常需要用Adam等进阶的优化方法来求解。
在这里插入图片描述
如果能够把变量间的差别拉平,那就能够简化error space 的 landscape。
一种方法是进行特征标准化(feature normalization)。
在这里插入图片描述
事实上,在深度学习中,除了 x x x z z z a a a也同样还是需要normalization。那么到底在activation function前做normalization,还是activation function后做normalization呢,在实战中似乎差别不大。
在这里插入图片描述
z z z的标准化如下:
在这里插入图片描述
这里有一个比较特别的地方,就是 z z z的标准化,受到案例的影响,所以这是一个非常巨大的network。
在这里插入图片描述

4.2.2 batch normalization

因为一下子处理所有的数据显得有些不太可能,所以我们会分批次处理数据,都进行标准化。这就是batch normalizaiton。
在这里插入图片描述
还要加入 β \beta β γ \gamma γ两个参数,防止平均值一直是0(?),调整一下输出的分布。这两个参数是需要学出来的。
一般来说 β \beta β的初始值都是1, γ \gamma γ的初始值都是0,这样保证在网络训练的最初,error surface是比较平均分布的;到了训练后期可能会有变化,但是已经学得了足够多的信息。
(所以 β \beta β γ \gamma γ两个参数是怎么更新的呢?)
在这里插入图片描述
在testing中,batch normalization是有点问题的,因为 μ \mu μ σ \sigma σ需要根据batch来计算。
PyTorch在这里内置了一个解决方法,就是在训练的过程中会把 μ \mu μ σ \sigma σ存储下来,给testing使用。
在这里插入图片描述
可以看一下原论文
在这里插入图片描述
可以看到batch normalization可以应对复杂的问题,并且训练速度更快。

除了batch normalization还有一些其他的简化error space的方法,以及其他的一些normalization的方法。
在这里插入图片描述

参考阅读

  1. 李宏毅机器学习2021
  2. 李宏毅机器学习2021课程视频
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SheltonXiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值