课程链接: https://pan.baidu.com/s/1mhGp08K 密码: xgex

Parameter Updates

1.梯度下降(最速下降法)

这个就是简单的梯度下降,dx就是求出的梯度,就是个微小增量,学习率是设置的超参数,也就是步长,如果梯度为正,所以说明函数上升,所以x要加上负梯度。求出的梯度只有方向,学习率决定x改变的大小,这就是最简单的梯度下降的思想

CS231n系列课程Lecture6: Training Neural Networks, Part 2

那么按照上面的方法,如果是下面这种情况呢?

CS231n系列课程Lecture6: Training Neural Networks, Part 2

可以看到如果损失函数在竖直方向非常的陡峭,在水平方向比较平缓,根据SGD(随机梯度下降)可以看出竖直方向会出现震荡,在水平方向会朝着最小的位置移动。

2.Momentum update(动量更新)

CS231n系列课程Lecture6: Training Neural Networks, Part 2

这里介绍的参数更新很多名字看上去还是很直观的,虽然不是很口语,但是理解起来并不是很困难。动量更新是另一种方法,可以看成是物理酵素上对于优化问题得到的启发。损失值可以理解为是山的高度,(因此高度势能是U=mgh),用随机数字初始化参数等同于在某个位置给质点设定初始速度为0,这样最优化过程可以看作是模拟参数向量(即质点)在地形上滚动的过程。

看上面的图片,这里也引入了一个初始化为0的变量v和一个超参数mu,mu在最优化过程中被看做动量(一般值设为0.9),但其物理意义与摩擦系数更一致。这个变量有效的抑制了速度,降低了系统的动能,不然质点在山底永远不会停下来。

3.Nesterov Momentum update

CS231n系列课程Lecture6: Training Neural Networks, Part 2

Nesterov动量更新的核心思路是:当参数向量位于某个位置x时,观察上面的动量更新公式可以发现,动量部分(忽略带梯度的第二部分)会通过muv稍微改变参数向量。因此,如果要计算梯度,那么可以将未来近似位置x+muv看作是“向前看”,这个点在我们一会儿要停止的位置附近。因此,计算x+muv的梯度而不是“旧”位置x的梯度就有意义了。

CS231n系列课程Lecture6: Training Neural Networks, Part 2

Nesterov动量更新,既然我们知道动量将会把我们带到绿色箭头指向的点,我们就不要在原点(红色点)那里计算梯度了。使用Nesterov动量,我们就在这个“向前看”的方向计算梯。

4.AdaGrad update

CS231n系列课程Lecture6: Training Neural Networks, Part 2

AdaGrad是由Duchi等提出的适应性学习率算法。如上图所示,变量cache的尺寸和梯度矩阵的尺寸是一样的,还记录了每个参数的平方和。红色框的部分相当于对梯度做了归一化,防止出现在第一节中的各个方向梯度差别过大,导致的震荡。红框中+后面的指数是平滑因子,(一般设为1e-4到1e-8之间)是防止出现除以0的情况。Adagrad的一个缺点是:在深度学习中单调的学习率被证明通常过于激进且过早停止学习。即在迭代很多步后衰减到0。

5.RMSprop

RMSprop是大神Geoff Hinton的Coursera课程PPT上的方法,就是简单的修改了Adagrad方法,让它不那么激进,单调的降低了学习率。具体说来就是它使用了一个梯度平方的滑动平均:

CS231n系列课程Lecture6: Training Neural Networks, Part 2

decay也就是个超参数,一般是0.99。

6.Adam update

CS231n系列课程Lecture6: Training Neural Networks, Part 2

这个方法看起来和RMSProp很像,出来使用的是平滑版的梯度m,一般beta1 = 0.9, beta2 = 0.995,在上图完整的Adam更新还包括了一个偏置(bias)矫正机制,因为m,v两个矩阵初始为0,在没有完全热身之前存在偏差,需要采取一些补偿措施。

学习率退火

CS231n系列课程Lecture6: Training Neural Networks, Part 2

我们看上图可以看到学习率在上面提到的几种更新方法并不是一成不变的,一般情况下有三种学习率衰减的方法。

1.step decay

基本上就是根据步数对学习率进行衰减,典型的值是每过5个周期就将学习率减少一半,或者每20个周期减少到之前的0.1。或者每当验证集错误率停止下降,就乘以一个常数(比如0.5)来降低学习率。

2.指数衰减

3.1/t*衰减

这两种衰减直接看上图就可以了。

二阶优化方法

CS231n系列课程Lecture6: Training Neural Networks, Part 2

二阶的优化的方法有一个特别好的优点就是没有学习率,没有超参数。但是有一个问题,看到上面会出现一个H1,求逆的计算量是巨大的,所以通常情况下在参数比较多的情况下还是不采用二阶优化的算法。

1.BGFS

CS231n系列课程Lecture6: Training Neural Networks, Part 2

对于比较大型的神经网络BFGS的效果并不是很好。

2.L-BFGS

L-BFGS对数据集的要求很高,保证数据集不会有噪声,对于设置比较复杂。

所以在实际应用中Adam是在大多是情况下应用的优化算法。但是如果你能够一次优化所有batch的参数,那么L-BFGS的方法也是可以尝试的(注意先去噪)

Evaluation

1.Model Ensembles(模型集成)

通常情况下独立训练不同的网络,在测试的时候会有2%的性能提升

Regularization(dropout)

CS231n系列课程Lecture6: Training Neural Networks, Part 2

Dropout是在前向传播中,一种随机设置一些神经元为0的正则化方法。正则化一个主要的目的就是防止过拟合(减少学到的部分特征)。我们可以这样理解:把神经元随机设置为0,也就是说有些特征对于最后分类的作用在减少,学到的特征更具有泛化性,降低单个特征的重要性对于整个网络说也就降低了所有学习到特征的重要性(正则化的作用),也就减少了过拟合。还有一种理解:每次训练,随机失活的神经元并不是相同的,每一个二进制掩膜(随机失活后的网络)都是一个新的模型,它只会被数据训练一次,相当于是模型的一个集成,对于提升性能有着很显著的效果。

能不能针对每个神经元进行一定概率的失活呢?答案是肯定的,这种方法叫做Drop connect。

在测试的时候:

CS231n系列课程Lecture6: Training Neural Networks, Part 2

在假设 p=0.5 时,我们可以计算一下在训练时候的期望为不加dropout的1/2,如果在测试的时候不考虑这个实际的期望的改变,那么测试时候出现的期望会很大,会找不到训练时对应的期望值,所以在测试时也要考虑 p 这个因子,也就是在测试的时候要进行缩放,不然dropout的效果并不是很理想。

CS231n系列课程Lecture6: Training Neural Networks, Part 2

这个就是Dropout的一个总结,注意两点前向传播时的随机失活,和测试时的放缩因子。

Check Gradient(梯度检验)

这个在之前的课程中已经提到过主要是保证解析梯度的求解正确,需要使用数值梯度在开始的时候进行检验,两者的error小于一定的阈值,则解析梯度正确,就可以不用进行数值梯度进行检验计算了(因为数值梯度计算速度很慢)

Convolutional Neural Network(卷积神经网络)

这节课的内容大部分是和Lecture1的内容是重复的,我也就不在赘述了,最后也就卖个关子吧!O(∩_∩)O

CS231n系列课程Lecture6: Training Neural Networks, Part 2

相关文章:

  • 2021-08-28
  • 2021-11-29
  • 2021-11-03
  • 2021-04-01
  • 2021-08-22
  • 2021-06-09
  • 2021-06-15
  • 2021-10-19
猜你喜欢
  • 2021-05-08
  • 2021-10-08
  • 2021-06-04
  • 2022-12-30
  • 2021-10-21
  • 2021-08-23
  • 2022-01-08
相关资源
相似解决方案