深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正

接下来介绍一些比梯度下降法计算速度更快的优化算法。

2.3  指数加权平均

为了更好地介绍这些优化算法,这里先介绍一个概念----指数加权平均(exponentially weighted averages),全称为指数加权移动平均(exponentially weighted moving averages)。

下图展示的是伦敦一年温度的例子,散点图如下图所示。

深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正

对该数据拟合曲线,假设V0=0,而估计每一天的温度(Vt)等于前一天的温度(Vt-1)和当天温度(深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正)的加权平均,为什么说是指数加权平均呢?这是因为通过展开,把每一项都用V0和实际温度表示,会发现深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正,上例中深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正=0.9,再加上初始值为0的假设,则第t天的温度就是前t天真实温度的指数加权平均。根据这个方法,拟合出来的曲线如图中红线所示。

深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正

其实,深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正近似等于前深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正天真实温度的平均值,比如在上例中,深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正=0.9,则红色曲线的每一点近似为前10天真实温度的平均值。若深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正取0.98,则拟合曲线中的每一点近似为前50天真实温度的平均值,拟合曲线如图中绿色所示,若深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正取0.5,则拟合曲线中的每一点近似为前2天真实温度的平均值,拟合曲线如图中黄色所示。

由上图所示,我们发现深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正是一个很重要的参数,它决定了我们的拟合曲线是较平滑的还是比较粗糙的。在上述三个例子中,红色拟合曲线是最好的,为什么?根据深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正的表示公式,我们可以发现,深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正反应我们要估计的温度对当天实际温度的依赖程度,即深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正越小,模型对当天实际温度依赖程度越高,模型的波动就更大,模型就更不稳定,因为比如深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正取0.5时,深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正仅仅由前两天的真实温度取值决定,所以波动更大。

实际问题中决定深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正的大小需要我们根据实际需求决定,比如我们需要模型能够及时反映数据波动情况,那我们可以取较小的深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正值,希望模型对当前实际值依赖度更强。这也反应绿色拟合曲线的缺点,深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正值取0.98,过分依赖过去,使结果出现一定的延迟,不能及时反映现在的情况。所以红色拟合曲线在这三种模型中是最好的,既能够及时反映现在情况,模型波动也不是那么大。

2.4  理解指数加权平均本质

指数加权平均本质上就是用来计算平均数的手段。

深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正

如上图所示,我们利用公式将深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正拆分成真实温度的指数加权平均,但是计算深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正,我们到底需要之前多少天的数据呢?我们不可能计算过去的每一天,因为从拆分公式中也可以看到,距离当天越远,过去温度的权重呈指数级递减。这里有一个想法是权重低于深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正的我们不再考虑。我们知道深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正时,深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正,而当深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正取0.9时,即深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正取0.1时,深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正,所以此时每天的温度估计大约是前10天温度的平均值。

我们实际使用指数加权平均是怎么操作呢?如下图所示:

深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正

首先初始化深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正=0,然后每次读取新的深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正代入式子深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正中去更新深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正,整个过程只需要一条命令,占用极少内存。这正是我们用指数加权移动平均代替直接计算平均数的原因,因为直接计算平均数需要保存所有最近的数据,且计算效率不高,而指数加权移动平均虽然可能不是最好的或不是最精确的计算平均数的方法,但是从计算效率和内存使用情况上来看,在实际情况中我们更乐于使用后者去代替平均值的计算。

2.5  指数加权平均的偏差修正(bias correction)

指数加权平均的偏差修正是为了让平均数的计算更加准确。具体实现方法如下图所示:

深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正

上一节的例子中,我们介绍了当深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正取0.98时,我们的拟合曲线应该是绿色那条,但这样说是不太准确的,因为在我们将V0初始化为0的条件下,我们拟合的曲线应该是紫色那条,而这两条曲线区别就在前面一小部分。为什么会有这样结果呢?我们可以用实例计算一下,如上图所示, 令V0=0,且深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正=0.98,我们可以得到V1、V2结果如上图所示,假设前两天的温度都为40度,那么通过V2的计算式我们可以推出V2约为8度,比绿线值低很多。

我们可以使用上图中右侧式子进行修正,即深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正,比如当t等于2时,V2就可以通过该式子进行修正。发现这个修正只对前部分数据作用较大,因为随着t的增加,深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正的值也会趋近于1。其实通过偏差修正,我们可以更加理解用指数加权移动平均来代替平均数计算的原因,因为修正后的温度值实际上是之前温度值的加权平均,比如在该例中,0.0196+0.02=0.0396。其实我们用数学方法也可以很容易证明,在该例中,就是深度学习笔记(2):2.3|2.4 指数加权平均及理解 | 2.5 指数加权平均的偏差修正。所以当t很大时,对Vt而言,前t时刻所有实际温度的权重和近似为1。

但其实在实际中,有些人在训练中并不care前部分曲线的拟合情况,而是直接使用未修正的,这样也可以,但是我们要明白偏差修正的意义,那就是为了让平均数计算得更准确。

 

版权声明:尊重博主原创文章,转载请注明出处https://blog.csdn.net/kkkkkiko/article/details/81347697