📜  毫升 |基于动量的梯度优化器介绍

📅  最后修改于: 2022-05-13 01:58:09.213000             🧑  作者: Mango

毫升 |基于动量的梯度优化器介绍

梯度下降是机器学习框架中用于训练不同模型的一种优化技术。训练过程由一个目标函数(或误差函数)组成,它确定机器学习模型在给定数据集上的误差。
在训练时,该算法的参数被初始化为随机值。随着算法的迭代,参数被更新,以便我们越来越接近函数的最优值。

然而,自适应优化算法因其快速收敛的能力而越来越受欢迎。与传统的梯度下降相比,所有这些算法都使用来自先前迭代的统计数据来增强收敛过程。

基于动量的优化:

一种自适应优化算法,它使用之前迭代中梯度的指数加权平均值来稳定收敛,从而加快优化速度。例如,在深度神经网络的大多数实际应用中,训练是在噪声数据上进行的。因此,在优化过程中分批输入数据时,有必要减少噪声的影响。这个问题可以使用指数加权平均(或指数加权移动平均)来解决。

实施指数加权平均:
为了近似大小为 N 的嘈杂数据集中的趋势:
\theta_{0}, \theta_{1}, \theta_{2}, ..., \theta_{N} ,我们维护一组参数v_{0}, v_{1}, v_{2}, v_{3}, ..., v_{N} .当我们遍历数据集中的所有值时,我们计算参数如下:

在迭代 t:获取下一个 \theta_{t} v_{\theta} = \beta v_{\theta} + (1 - \beta) \theta_{t}

该算法平均v_{\theta}超过它以前的值\frac{1}{1 - \beta}迭代。这种平均可确保仅保留趋势并平均消除噪音。该方法在基于动量的梯度下降中用作策略,以使其对数据样本中的噪声具有鲁棒性,从而加快训练速度。



例如,如果您要优化一个函数f(x)在参数上x ,以下伪代码说明了该算法:

在迭代 t:在当前批次上,计算 \frac{\partial f(x)}{\partial x}   v := v + (1 - \beta) \frac{\partial f(x)}{\partial x}  x := x - \alpha v

此优化算法的超参数是\alpha ,称为学习率和, \beta ,类似于力学中的加速度。

以下是基于动量的梯度下降在函数f(x) = x ^ 2 - 4 x + 4

import math
  
# HyperParameters of the optimization algorithm
alpha = 0.01
beta = 0.9
  
# Objective function
def obj_func(x):
    return x * x - 4 * x + 4
      
# Gradient of the objective function
def grad(x):
    return 2 * x - 4
      
# Parameter of the objective function
x = 0
  
# Number of iterations
iterations = 0
  
v = 0
  
while (1):
    iterations += 1
    v = beta * v + (1 - beta) * grad(x)
      
    x_prev = x
      
    x = x - alpha * v
      
    print("Value of objective function on iteration", iterations, "is", x)
      
    if x_prev == x:
        print("Done optimizing the objective function. ")
        break