• 深度学习算法优化背景知识---指数加权平均


    背景:在深度学习优化算法,如:Momentum、RMSprop、Adam中都涉及到指数加权平均这个概念。为了系统的理解上面提到的三种深度学习优化算法,先着重理解一下指数加权平均(exponentially weighted averages)

    定义

    指数移动平均(EMA)也称为指数加权移动平均(EWMA),是一种求平均数的方法,应用指数级降低的加权因子。 每个较旧数据的权重都呈指数下降,从未达到零。

    m个数据的数据集({[ heta_1, heta_2,..., heta_m]})

    • 平均数的一般求解方法:(v_{aver} = frac{ heta1+ heta2+...+ heta_m}{m}) ;
    • 指数加权平均的求解方法:
      • 参数 (eta), (v_0 = 0);
      • (v_t = eta v_{t-1} + (1-eta) heta_t) :前t个样本的平均数由前(t-1)个样本的平均数和第t个样本决定
    符号 含义
    (eta) 参数
    (v_0) 初始平均值
    (v_t) 前t条记录的平均值
    ( heta_t) 第t条记录值

    举例

    有100天伦敦温度记录({[ heta_1, heta_2,..., heta_{100}]}),计算伦敦100天温度平均值。如果(eta =0.9)

    计算公式:

    展开公式:

    即:(v_{100} = 0.1 heta_{100} + 0.1*0.9 heta_{99} + 0.1*(0.9)^2 heta_{98} + ... + 0.1*0.9^{99} heta_1)

    可以看出:各个记录前的权重系数是以指数级下降的,但不为0。所以这种平均值的求解方法称为指数加权平均

    温度平均值变化图:

    平均值

    应用

    主要用在深度学习优化算法中,用来修改梯度下降算法中参数的更新方法

    在优化算法中,(frac{1}{1-eta}) 可以粗略表示指数加权平均考虑的样本数[由于随着样本容量t的逐渐增多,其系数指数下降,对平均值的贡献程度逐渐降低;影响平均值计算的几个关键样本就是最近几天的样本值,而这个样本量可以通过(frac{1}{1-eta}) 来进行大致估算]。

    Momentum

    初始化:(v_{dW} = np.zeros(dW.shape)) ; (v_{db} = np.zeros(db.shape)) ----初始为0;分别与dW、db shape相同;

    • (v_{dW})(v_{db}) 用来计算关于(W)(b) 梯度的平均值;

    在第t次迭代中On iteration (t):

    • Compute (dW), (db) on the current mini-batch; 现在当前batch中计算(dW)(db) ;
    • (v_{dW} = eta v_{dW} + (1-eta)dW) 【计算关于(dW)的平均。解释:dW看做是加速度,(v_{dW}) 下山速度, (eta) 摩擦系数; momentum动量】
    • (v_{db} = eta v_{db} + (1-eta)db) 【计算关于(db)的平均】
    • **$W = W - alpha v_{dW}, b=b-alpha v_{db} (** 【参数更新:用关于)W(、)b$ 梯度的平均值来替换原来的(dW)(db)

    超参数: (alpha, eta), ---(eta) usually be 0.9. (a very robust number)

    RMSprop

    初始化:(S_{dW} = np.zeros(dW.shape)) ; (S_{db} = np.zeros(db.shape)) ----初始为0;分别与dW、db shape相同;

    在t次迭代中On iteration (t):

    • Compute (dW),(db) on current mini-batch
    • (v_{dW} = eta v_{dW} + (1-eta)(dW)^2) ; (v_{db} = eta v_{db} + (1-eta) (db)^2) 【计算梯度平方的平均值】
    • (W = W - alpha frac{dW} {sqrt{v_{dW} + epsilon}}) ; (b = b - alpha frac{db}{sqrt{v_{db}+epsilon}}) 【参数更新:除以平方根;加上(epsilon)防止开平方根过小】

    Adam = Momentum + RMSprop

    初始化:(v_{dW} = np.zeros(dW.shape)) ; (S_{dW} = np.zeros(dW.shape)) ; (v_{db} = np.zeros(db.shape)) (S_{db} = np.zeros(db.shape)) ; ----初始为0;分别与dW、db shape相同;【(v_{dW})(v_{db}) 是Momentum算法;(S_{dW})(S_{db}) 是RMSprop优化算法】

    t次迭代过程On iteration (t):

    • Compute (dW, db) on current mini-batch;
    • (v_{dW} = eta_1v_{dW} + (1-eta_1) dW) , (v_{db} = eta_1 v_{db} + (1-eta_1) db) -----------"Momentum" 超参数:(eta_1)
    • (S_{dW} = eta_2 S_{dW} + (1-eta_2) (dW)^2), (S_{db} = eta_2 S_{db} + (1-eta_2) (db)^2) ------------"RMSprop" 超参数:(eta_2)
    • biases correction 偏差修正:
      • (v_{dW}^{correct} = frac {v_{dW}}{(1-eta_1^t)}) , (v_{db}^{correct} = frac {v_{db}}{(1-eta_1^t)}) ;
      • (S_{dW}^{correct} = frac {S_{dW}}{(1-eta_2^t)}) , (S_{db}^{correct} = frac {S_{db}}{(1-eta_2^t)}) ;
    • (W = W - alpha frac{v_{dW}^{correct}}{sqrt{S_{dW}^{correct}+ epsilon} }) , (b = b - alpha frac{v_{db}^{correct}}{sqrt{S_{db}^{correct} + epsilon } }) 【更新方法:结合Momentum和RMSprop优化算法】

    问题及改正

    存在问题

    指数加权平均早期估算过程中存在:偏差

    由于指数加权平均初始值(v_0 = 0)(eta = 0.9)则:

    • (v_1 = 0.9 * v_0 + 0.1* heta_1 = 0.1 heta_1)
    • (v_2 = 0.9 * v_1 + 0.1 * heta_2 = 0.09 heta_1 + 0.1 heta_2)

    就是说在平均值求解的刚开始几次计算过程中,计算的平均值过小,偏差过大。表现在下面的图里,绿线 是理想情况;紫线 是指数加权平均线。可以看出前几次平均值紫线比绿线要高一些! 紫线早期过下,偏差过大。

    改正方法

    进行偏差纠正。

    将计算的平均值结果除以(1-eta^t),即(v_t = frac{v_t}{1-eta^t}=frac{eta v_{t-1} + (1-eta) heta_t}{1-eta^t}) ;

    从计算公式可以看出(v_t) 随着计算样本t的增大,不断接近于没有进行偏差纠正的指数加权平均值。在图中表现就是随着样本的增大,紫线和绿线逐渐重合

  • 相关阅读:
    棋盘型动态规划 之 CODE[VS] 1220 数字三角形
    棋盘型动态规划 之 CODE[VS] 1219 骑士游历 1997年
    棋盘型动态规划 之 CODE[VS] 1169 传纸条 2008年NOIP全国联赛提高组
    棋盘型动态规划 之 CODE[VS] 1010 过河卒 2002年NOIP全国联赛普及组
    [实验]自举?只不过是电容和二极管捣的乱
    [嵌入式]I2C协议指东
    [语法]C语言中二维数组做输入参数
    深入类方法。
    今天周六祝大家休息开心,我还在奋斗....
    我们一起来一把.....现在学习真的好累,一天下来脑袋要炸
  • 原文地址:https://www.cnblogs.com/ysugyl/p/9072810.html
Copyright © 2020-2023  润新知