毫升 |基于动量的梯度优化器介绍
梯度下降是机器学习框架中用于训练不同模型的一种优化技术。训练过程由一个目标函数(或误差函数)组成,它确定机器学习模型在给定数据集上的误差。
在训练时,该算法的参数被初始化为随机值。随着算法的迭代,参数被更新,以便我们越来越接近函数的最优值。
然而,自适应优化算法因其快速收敛的能力而越来越受欢迎。与传统的梯度下降相比,所有这些算法都使用来自先前迭代的统计数据来增强收敛过程。
基于动量的优化:
一种自适应优化算法,它使用之前迭代中梯度的指数加权平均值来稳定收敛,从而加快优化速度。例如,在深度神经网络的大多数实际应用中,训练是在噪声数据上进行的。因此,在优化过程中分批输入数据时,有必要减少噪声的影响。这个问题可以使用指数加权平均(或指数加权移动平均)来解决。
实施指数加权平均:
为了近似大小为 N 的嘈杂数据集中的趋势:
,我们维护一组参数 .当我们遍历数据集中的所有值时,我们计算参数如下:
在迭代 t:获取下一个
该算法平均超过它以前的值迭代。这种平均可确保仅保留趋势并平均消除噪音。该方法在基于动量的梯度下降中用作策略,以使其对数据样本中的噪声具有鲁棒性,从而加快训练速度。
例如,如果您要优化一个函数在参数上 ,以下伪代码说明了该算法:
在迭代 t:在当前批次上,计算
此优化算法的超参数是 ,称为学习率和, ,类似于力学中的加速度。
以下是基于动量的梯度下降在函数 :
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