二、AI教程学习笔记 | 神经网络优化(二)
目录
1、mini-batch
2、如何为mini-batch选择合理的大小
3、指数加权平均
在理解动量梯度下降法之前,我们首先要了解指数加权平均数,这是动量梯度下降法的核心。那么,什么是指数加权平均数呢,我们这里举例说明。
下面是一个同学的某一科的考试成绩:平时测验 80, 期中 90, 期末 95,学校规定的科目成绩的计算方式是:平时测验占 20%;期中成绩占 30%;期末成绩占 50%;
这里,每个成绩所占的比重叫做权数或权重。那么,
-
加权平均值 = 80 * 20% + 90 * 30% + 95 * 50% = 90.5
-
算数平均值 = (80 + 90 + 95)/3 = 88.3
我们再看一个例子,这是一个城市每天的温度
普通的温度平均值是
在计算加权平均数时,我们引入了一个变量β,β作为权重,就好比上一个例子的成绩占比,我们先看下公式
其中 vt 代表前 t 天的平均温度,θt 代表第 t 天的温度,其中 v0=0。在坐标轴中绘出其形状,蓝点是每天的具体温度,红线是指数加权平均数。
接下来我们详细讲解下这个公式,首相,我们把公式展开
假设β=0.9β=0.9,那么,我们得到的公式如下
4、动量梯度下降
5、RMSprop
6、Adam优化算法
Adam算法是 动量梯度下降(Momentum)和 RMSprop两者的结合,更新公式为:
7、学习率衰减
前期使用较大的学习率加速收敛,后期用较小的学习率保证稳定,这就是学习率衰减背后的思想。
数据集拆分成不同的mini-batch,第一次遍历训练集叫做第一代。第二次就是第二代,依此类推,你可以将a学习率设为:
a=1/(1+decayrate*epoch-num) a_0
decay-rate称为衰减率,epoch-num为代数,α_0为初始学习率,注意这个衰减率是另一个你需要调整的超参数。
这里有一个具体例子,如果你计算了几代,也就是遍历了几次,如果 a_0 为0.2,衰减率decay-rate为 1,那么在第一代中,a=1/(1+1) a_0=0.1,这是在代入这个公式计算a=1/(1+decayrate*epoch-num) a_0,
此时衰减率是1而代数是1。在第二代学习率为0.67,第三代变成0.5,第四代为0.4等等,你可以自己多计算几个数据。要理解,作为代数函数,根据上述公式,你的学习率呈递减趋势。
如果你想用学习率衰减,要做的是要去尝试不同的值,包括超参数a_0,以及超参数衰退率,找到合适的值,除了这个学习率衰减的公式,人们还会用其它的公式。
比如,这个叫做指数衰减,其中a相当于一个小于1的值,如a=0.95^(epoch-num) a_0,所以你的学习率呈指数下降。
人们用到的其它公式有 a=k/√(epoch-num) a_0或者a=k/√t a_0(t为mini-batch的数字)。
有时人们也会用一个离散下降的学习率,也就是某个步骤有某个学习率,一会之后,学习率减少了一半,一会儿减少一半,一会儿又一半,这就是离散下降(discrete stair cease)的意思。
8、局部最优
初学深度学习,总是担心优化算法会困在极差的局部最优。本文介绍如何正确看待局部最优以及深度学习中的优化问题。
如上图,平面的高度就是损失函数。在图中似乎各处都分布着局部最优。梯度下降法或者某个算法可能困在一个局部最优中,而不会抵达全局最优。但是,问题的关键在于,低维特征(图示两维)让我们对局部最优产生误解。
事实上,如果你要创建一个神经网络,通常梯度为零的点并不是这个图中的局部最优点,实际上成本函数的零梯度点,通常是鞍点。
一个具有高维度空间的函数,如果梯度为0,那么在每个方向,它可能是凸函数,也可能是凹函数。如果你在2万维空间中,那么想要得到局部最优,所有的2万个方向都需要是这样,但发生的机率也许很小(2**(-20000)),也许是,你更有可能遇到有些方向的曲线会这样向上弯曲,另一些方向曲线向下弯,而不是所有的都向上弯曲,因此在高维度空间,你更可能碰到鞍点。
对于鞍点来讲,平稳段会减缓学习,平稳段是一块区域,其中导数长时间接近于0,如果你在此处,梯度会从曲面从从上向下下降,因为梯度等于或接近0,曲面很平坦,你得花上很长时间慢慢抵达平稳段的这个点,我们可以沿着这段长坡走,直到这里,然后走出平稳段。
本文的要点是:
你不太可能困在极差的局部最优中,条件是你在训练较大的神经网络,存在大量参数,并且成本函数被定义在较高的维度空间。
平稳段是一个问题,这样使得学习十分缓慢,这也是像Momentum或是RMSprop,Adam这样的算法,能够加速学习算法的地方。在这些情况下,更成熟的优化算法,如Adam算法,能够加快速度,让你尽早往下走出平稳段。