5分钟快速掌握 Adam 优化算法

梯度下降是一种优化算法,遵循目标函数的负梯度以定位函数的最小值。

梯度下降的局限性是,所有输入变量都使用单个步长(学习率)。像AdaGrad和RMSProp这样的梯度下降的扩展会更新算法,以对每个输入变量使用单独的步长,但可能会导致步长迅速减小到非常小的值。自适应运动估计算法(Adam)是梯度下降的扩展,是AdaGrad和RMSProp等技术的自然继承者,该技术可自动为目标函数的每个输入变量调整学习率,并通过使用以指数方式降低梯度的移动平均值以更新变量。

在本教程中,您将发现如何从头开始使用Adam优化算法开发梯度下降。完成本教程后,您将知道:

  • 梯度下降是一种优化算法,它使用目标函数的梯度来导航搜索空间。

  • 可以通过使用称为Adam的偏导数的递减平均值,将梯度下降更新为对每个输入变量使用自动自适应步长。

  • 如何从头开始实施Adam优化算法并将其应用于目标函数并评估结果。

教程概述

本教程分为三个部分:他们是:

  • 梯度下降

  • Adam优化算法

  • Adam梯度下降

    二维测试问题

    Adam的梯度下降优化

    Adam可视化

梯度下降

梯度下降是一种优化算法。它在技术上称为一阶优化算法,因为它明确利用了目标目标函数的一阶导数。一阶导数,或简称为“导数”,是目标函数在特定点(例如,点)上的变化率或斜率。用于特定输入。如果目标函数采用多个输入变量,则将其称为多元函数,并且可以将输入变量视为向量。反过来,多元目标函数的导数也可以视为向量,通常称为梯度。

梯度:多元目标函数的一阶导数。

对于特定输入,导数或梯度指向目标函数最陡峭的上升方向。

梯度下降是指一种最小化优化算法,该算法遵循目标函数的下坡梯度负值来定位函数的最小值。梯度下降算法需要一个正在优化的目标函数和该目标函数的导数函数。目标函数f()返回给定输入集合的分数,导数函数f'()给出给定输入集合的目标函数的导数。梯度下降算法需要问题中的起点(x),例如输入空间中的随机选择点。

假设我们正在最小化目标函数,然后计算导数并在输入空间中采取一步,这将导致目标函数下坡运动。下坡运动是通过首先计算输入空间中的运动量来进行的,计算方法是将步长(称为alpha或学习率)乘以坡度。然后从当前点减去该值,以确保我们逆梯度移动或向下移动目标函数。

x(t)= x(t-1)–step* f'(x(t-1))

在给定点的目标函数越陡峭,梯度的幅度越大,反过来,在搜索空间中采取的步伐也越大。使用步长超参数来缩放步长的大小。

步长(alpha):超参数,控制算法每次迭代时相对于梯度在搜索空间中移动多远。

如果步长太小,则搜索空间中的移动将很小,并且搜索将花费很长时间。如果步长太大,则搜索可能会在搜索空间附近反弹并跳过最优值。

现在我们已经熟悉了梯度下降优化算法,下面让我们看一下Adam算法。

Adam优化算法

自适应运动估计算法(简称“Adam”)是梯度下降优化算法的扩展。Diederik Kingma和Jimmy Lei Ba在2014年发表的题为“Adam:随机优化方法”的论文中描述了该算法。Adam旨在加速优化过程,例如减少达到最佳状态所需的功能评估次数,或提高优化算法的功能,例如产生更好的最终结果。这是通过为每个要优化的输入参数计算步长来实现的。重要的是,每个步长都将根据每个变量遇到的梯度(偏导数)自动调整搜索过程的吞吐量。

让我们逐步介绍该算法的每个元素。首先,对于作为搜索一部分而被优化的每个参数,我们必须维持一个矩矢量和指数加权无穷大范数,分别称为m和v(真是希腊字母nu)。在搜索开始时将它们初始化为0.0。

m = 0 

v = 0

该算法在从t=1开始的时间t内迭代执行,并且每次迭代都涉及计算一组新的参数值x,例如。从x(t-1)x(t)。如果我们专注于更新一个参数,这可能很容易理解该算法,该算法概括为通过矢量运算来更新所有参数。首先,计算当前时间步长的梯度(偏导数)。

g(t)= f'(x(t-1))

接下来,使用梯度和超参数beta1更新第一时刻。

m(t)= beta1 * m(t-1)+(1 – beta1)* g(t)

然后,使用平方梯度和超参数beta2更新第二时刻。

v(t)= beta2 * v(t-1)+(1 – beta2)* g(t)^ 2

由于第一和第二力矩是用零值初始化的,所以它们是有偏的。接下来,对第一力矩和第二力矩进行偏差校正,并以第一力矩为起点:

mhat(t)= m(t)/(1 – beta1(t))

然后第二个时刻:

vhat(t)= v(t)/(1 – beta2(t))

注意,beta1(t)beta2(t)指的是beta1beta2超参数,它们在算法的迭代过程中按时间表衰减。可以使用静态衰减时间表,尽管该论文建议以下内容:

beta1(t)= beta1 ^ t

beta2(t)= beta2 ^ t

最后,我们可以为该迭代计算参数的值。

x(t)= x(t-1)– alpha * mhat(t)/(sqrt(vhat(t))+ eps)

其中alpha是步长超参数,eps是一个较小的值(epsilon)ÿ

  • 6
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值