基于动量的梯度下降算法
系列文章概览[*]从头开始简单理解线性回归(附Python 实现)
[*]线性回归中的梯度下降法(Python实现)
[*]理解局部加权线性回归
[*]简单理解朴素贝叶斯分类器实现
[*]使用Tensorflow简单实现线性回归
[*]梯度下降的优化技术
[*]基于动量的梯度下降算法
梯度下降是机器学习框架中用于训练不同模型的优化技术。训练过程由一个目标函数(或误差函数)组成,它决定了机器学习模型在给定数据集上的误差。
在训练时,该算法的参数被初始化为随机值。随着算法的迭代,参数会被更新,使得我们越来越接近函数的最优值。
然而,自适应优化算法因其快速收敛的能力而越来越受欢迎。与传统的梯度下降相反,所有这些算法都使用先前迭代的统计数据来加强收敛过程。
基于动量的优化
自适应优化算法使用先前迭代的梯度指数加权平均值来稳定收敛,从而实现更快的优化。例如,在大多数深度神经网络的实际应用中,训练是在有噪声的数据上进行的。 因此,在优化期间分批输入数据时,有必要减少噪声的影响。 这个问题可以使用指数加权平均数(或指数加权移动平均数)来解决。
实施指数加权平均值:
为了近似大小为N的嘈杂数据集中的趋势 \theta_{0}, \theta_{1}, \theta_{2}, ..., \theta_{N},我们维护一组参数 v_{0}, v_{1}, v_{2}, v_{3}, ..., v_{N}。当我们遍历数据集中的所有值时,我们计算参数如下:
On iteration t:
Get next\theta_{t}
v_{\theta} = \beta v_{\theta} + (1 - \beta) \theta_{t}
该算法 v_{\theta}对先前 \frac{1}{1 - \beta}迭代的值取平均值。这种平均可确保仅保留趋势并平均掉噪声。该方法被用作基于动量的梯度下降的策略,以使其对数据样本中的噪声具有鲁棒性,从而加快训练速度。
例如,如果您要优化参数f(x)的 函数X,以下伪代码说明了该算法:
On iteration t:
On the current batch,
compute \frac{\partial f(x)}{\partial x} v := v + (1 - \beta) \frac{\partial f(x)}{\partial x} x := x - \alpha v
此优化算法的超参数是a,称为学习率和,\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
欢迎关注(fork),我会不间断、持续分享一些统计学习方法知识和有趣的内容。
页:
[1]