http://faculty.bicmr.pku.edu.cn/~wenzw/optbook/pages/stograd/Adam.html

版权声明

此页面为《最优化:建模、算法与理论》、《最优化计算方法》配套代码。 代码作者:文再文、刘浩洋、户将,代码整理与页面制作:杨昊桐。

Adam 算法

考虑优化问题:

minx∈Rnf(x)=1N∑i=1Nfi(x).

Adam 算法本质上是在 RMSProp 的基础上增加了动量项,其利用梯度的一阶矩记录动量

Sk=ρ1Sk−1+(1−ρ)gk,

记录梯度的二阶矩(与 RMSProp 相同)

Mk=ρ2Mk−1+(1−ρ)gk⊙gk,

并进行修正: Sk^=Sk1−ρk1

, Mk^=Mk1−ρk2

。 利用修正的一阶矩作为下降方向,并且利用修正的二阶矩来逐分量调整步长,其迭代格式为

xk+1=xk−αMk+ϵ1n−−−−−−−−√⊙Sk.

目录

初始化和迭代准备

迭代主循环

参考页面

版权声明

初始化和迭代准备

输入信息:迭代初始值 x0 ,数据集大小 N ,样本梯度计算函数 pgfun,目标函数值与梯度计算函数 fun 以及提供算法参数的结构体 opts 。

输出信息:迭代得到的解 x 和包含迭代信息的结构体 out 。

out.fvec :迭代过程中的目标函数值信息

out.nrmG :迭代过程中的梯度范数信息

out.epoch :迭代过程中的时期 (epoch)信息

function [x,out] = Adam(x0,N,pgfun,fun,opts)

从输入的结构体 opts 中读取参数或采取默认参数。

opts.maxit :最大迭代次数

opts.alpha :步长

outs.thres :保证梯度分量累计严格为正的小量

opts.rho1 :一阶矩累计的权重值

opts.rho2 :二阶矩累计的权重值

opts.batchsize :随机算法的批量大小

opts.verbose :不小于 1 时输出每步迭代信息,否则不输出

if ~isfield(opts, 'maxit'); opts.maxit = 5000; end

if ~isfield(opts, 'alpha'); opts.alpha = 1e-3; end

if ~isfield(opts, 'thres'); opts.thres = 1e-7; end

if ~isfield(opts, 'rho1'); opts.rho1 = 0.9; end

if ~isfield(opts, 'rho2'); opts.rho2 = 0.999; end

if ~isfield(opts, 'batchsize'); opts.batchsize = 10; end

if ~isfield(opts, 'verbose'); opts.verbose = 1; end

以 x0 为迭代初始点。 计算初始点处的目标函数值和梯度,记初始时刻时期 (epoch) 为 0。

x = x0;

out = struct();

[f,g] = fun(x);

out.fvec = f;

out.nrmG = norm(g,2);

out.epoch = 0;

gsum 记录一阶矩,|ssum| 记录二阶矩。\(\rho_1\), ρ2

分别为一阶矩和二阶矩的衰减率。 count 用于计算时期(epoch)。

gsum = zeros(size(x));

ssum = gsum;

rho1 = opts.rho1;

rho2 = opts.rho2;

count = 1;

迭代主循环

Adam 的迭代循环,以 opts.maxit 为最大迭代次数。

for k = 1:opts.maxit

等概率地从 {1,2,…,N}

中选取批量 sk

记录在 idx 之中,批量大小为 opts.batchsize 。计算对应的样本的梯度。

idx = randi(N,opts.batchsize,1);
g = pgfun(x,idx);

更新一阶、二阶矩累计,并进行修正。 利用修正的一阶矩和二阶矩对 x

进行更新。

ssum = rho1*ssum +  (1 - rho1)*g;
gsum = rho2*gsum + (1 - rho2)*(g.*g);
ssum_mod = ssum/(1 - rho1^k);
gsum_mod = gsum/(1 - rho2^k); x = x - opts.alpha./sqrt(gsum_mod + opts.thres).*ssum_mod;

每当参与迭代的总样本次数超过数据集的总样本时,记为一个时期 (epoch)。每一个时期, 记录当前的目标函数值和梯度范数,并令时期计数加一。

if k*opts.batchsize/N >= count
[f,g] = fun(x);
out.fvec = [out.fvec; f];
out.nrmG = [out.nrmG; norm(g,2)];
out.epoch = [out.epoch; k*opts.batchsize/N];
count = count + 1;
end

end

end

数。

for k = 1:opts.maxit

等概率地从 {1,2,…,N}

中选取批量 sk

记录在 idx 之中,批量大小为 opts.batchsize 。计算对应的样本的梯度。

idx = randi(N,opts.batchsize,1);
g = pgfun(x,idx);

更新一阶、二阶矩累计,并进行修正。 利用修正的一阶矩和二阶矩对 x

进行更新。

ssum = rho1*ssum +  (1 - rho1)*g;
gsum = rho2*gsum + (1 - rho2)*(g.*g);
ssum_mod = ssum/(1 - rho1^k);
gsum_mod = gsum/(1 - rho2^k); x = x - opts.alpha./sqrt(gsum_mod + opts.thres).*ssum_mod;

每当参与迭代的总样本次数超过数据集的总样本时,记为一个时期 (epoch)。每一个时期, 记录当前的目标函数值和梯度范数,并令时期计数加一。

if k*opts.batchsize/N >= count
[f,g] = fun(x);
out.fvec = [out.fvec; f];
out.nrmG = [out.nrmG; norm(g,2)];
out.epoch = [out.epoch; k*opts.batchsize/N];
count = count + 1;
end

end

end

参考页面

在页面 实例:利用随机算法求解逻辑回归问题 中, 我们展示了该算法的一个应用,并且与其它随机算法进行比较。

其它随机算法参见: 随机梯度下降法、 AdaGrad、 RMSProp、 AdaDelta。

此页面的源代码请见: Adam.m。

版权声明

此页面为《最优化:建模、算法与理论》、《最优化计算方法》配套代码。 代码作者:文再文、刘浩洋、户将,代码整理与页面制作:杨昊桐。

著作权所有 (C) 2020 文再文、刘浩洋、户将

SciTech-BigDataAIML-Adam动量自适应的梯度快速收敛的更多相关文章

  1. K-Means算法的收敛性和如何快速收敛超大的KMeans?

    不多说,直接上干货! 面试很容易被问的:K-Means算法的收敛性. 在网上查阅了很多资料,并没有看到很清晰的解释,所以希望可以从K-Means与EM算法的关系,以及EM算法本身的收敛性证明中找到蛛丝 ...

  2. px批量转vw方法,适用于用户临时突发自适应需求,快速搞出项目多屏幕适应方案postcss-px-to-viewport,postcss.config.js配置

    方案一: 1. 下载依赖 npm install postcss-import postcss-loader postcss-px-to-viewport --save-dev npm install ...

  3. NLP之基于词嵌入(WordVec)的嵌入矩阵生成并可视化

    词嵌入 @ 目录 词嵌入 1.理论 1.1 为什么使用词嵌入? 1.2 词嵌入的类比推理 1.3 学习词嵌入 1.4 Word2Vec & Skip-Gram(跳字模型) 1.5 分级& ...

  4. 各种梯度下降 bgd sgd mbgd adam

    转载  https://blog.csdn.net/itchosen/article/details/77200322 各种神经网络优化算法:从梯度下降到Adam方法     在调整模型更新权重和偏差 ...

  5. 深度学习面试题03:改进版梯度下降法Adagrad、RMSprop、Momentum、Adam

    目录 Adagrad法 RMSprop法 Momentum法 Adam法 参考资料 发展历史 标准梯度下降法的缺陷 如果学习率选的不恰当会出现以上情况 因此有一些自动调学习率的方法.一般来说,随着迭代 ...

  6. 梯度下降:SGD vs Momentum vs NAG vs Adagrad vs Adadelta vs RMSprop vs Adam

    原文地址:https://www.jianshu.com/p/7a049ae73f56 梯度下降优化基本公式:\({\theta\leftarrow\theta-\eta\cdot\nabla_\th ...

  7. 神经网络优化算法:梯度下降法、Momentum、RMSprop和Adam

    最近回顾神经网络的知识,简单做一些整理,归档一下神经网络优化算法的知识.关于神经网络的优化,吴恩达的深度学习课程讲解得非常通俗易懂,有需要的可以去学习一下,本人只是对课程知识点做一个总结.吴恩达的深度 ...

  8. SGD vs Momentum vs NAG vs Adagrad vs Adadelta vs RMSprop vs Adam

    梯度下降优化基本公式:\({\theta\leftarrow\theta-\eta\cdot\nabla_\theta{J(\theta)}}\) 三种梯度下降优化框架 这三种梯度下降优化框架的区别在 ...

  9. 最优化方法系列:Adam+SGD—>AMSGrad

    自动调参的Adam方法已经非常给力了,不过这主要流行于工程界,在大多数科学实验室中,模型调参依然使用了传统的SGD方法,在SGD基础上增加各类学习率的主动控制,以达到对复杂模型的精细调参,以达到刷出最 ...

  10. 深度学习必备:随机梯度下降(SGD)优化算法及可视化

    补充在前:实际上在我使用LSTM为流量基线建模时候,发现有效的激活函数是elu.relu.linear.prelu.leaky_relu.softplus,对应的梯度算法是adam.mom.rmspr ...

随机推荐

  1. 【记录】ChatGPT|使用技巧(更新至2023年2月8日)

      昨天,2022年12月13日,在下午和晚上,ChatGPT 就开始因为请求过多而写到一半就崩溃,出现network error,可见它的关注度确实是越来越可观了.   正好最近世界杯,有博客活动, ...

  2. 用AI开发AI翻译助手:初学者也能轻松做出第一个应用

    在过去,学习编程往往意味着大量阅读文档.理解晦涩的语法.查找资料,甚至要面对一个接一个的报错信息,这对初学者来说常常是一个令人望而生畏的过程.但在AI时代,这一切都变得不一样了. 我最近完成了一个小项 ...

  3. 关于HarmonyOS NEXT中的模块化开发

    今天不写页面和动画,斗胆给大家讲一讲软件工程. 软件工程讲究高内聚低耦合,意思就是把整个工程按照分工不同分成不同的模块,每一个模块紧密联系又互不影响.就像一座摩天大楼,它里面的电路网非常庞大和复杂,它 ...

  4. 中国版 Cursor:CodeBuddy

    我正在参加CodeBuddy「首席试玩官」内容创作大赛,本文所使用的 CodeBuddy 免费下载链接:腾讯云代码助手 CodeBuddy - AI 时代的智能编程伙伴 一句话即可让 AI 助手生成网 ...

  5. windows环境下的常用命令

    1.appwiz.cpl 程序和功能 2.certmgr.msc 证书管理实用程序 3.control 控制面板 4.firewall.cpl 防火墙 5.fsmgmt.msc 共享文件夹管理器 6. ...

  6. 如何下载DingTalk的直播视频?

    如何下载DingTalk的直播视频? 说明:本文未经授权禁止转载 绪言 如果有天早上 你突发奇想 突然就想把老师上课的视频下载下来 但是 正在寻找下载按钮时 突然发现-- 灰色的?!?! 看来是老师禁 ...

  7. 「Note」您想来点数据结构吗?

    大分块系列 最初分块 \(\color{black}{P4119}\) 考虑数列分块+值域分块 数列分块需要维护: \(nid_{i,j}\) \(fid_i\) \(f_i\) 块 \(i\) 中数 ...

  8. 国内用什么邮箱比较正式 个人邮箱对比qq邮箱网易新浪搜狐阿里云

    本文永久链接:https://forum.piwind.com/d/19-guo-nei-yong-shi-yao-you-xiang-bi-jiao-zheng-shi-ge-ren-you-xia ...

  9. HarmonyOS运动开发:如何选择并上传运动记录

    ##鸿蒙核心技术##运动开发##Core File Kit(文件基础服务) 前言 在运动类应用中,能够快速导入和分析其他应用的运动记录是一个极具吸引力的功能.这不仅为用户提供便利,还能增强应用的实用性 ...

  10. HashSet的泛型应用

    1 package com.lv.study.pm.first; 2 3 import java.util.HashSet; 4 import java.util.Set; 5 6 //无序不可重复 ...