梯度下降的可视化解释(Adam,AdaGrad,Momentum,RMSProp)

从学习速率中解开自适应梯度法(Disentangling Adaptive Gradient).pdf 我们研究了深度学习优化算法评估中的几个混合因素。首先,我们深入研究自适应梯度方法如何与学习速率调整相互作用,这是一个众所周知的难以调整的超参数,它对神经网络训练的收敛和推广具有显着影响。我们引入了一个“嫁接”实验,该实验将更新的大小与其方向解耦,发现文献中的许多现有信念可能是由于对步长的隐式时间表的隔离不足而产生的。除了这一贡献之外,我们还对自适应梯度方法的推广进行了一些实证和理论回顾,旨在为这一空间带来更清晰的视角。 立即下载

阅读大概需要15分钟

Follow小博主,每天更新前沿干货

作者丨McGL

来源丨https://zhuanlan.zhihu.com/p/147275344

编辑丨极市平台

导读

 

一图胜千言,什么?还是动画,那就更棒啦!本文引用了大量的资源来解释各种梯度下降法(gradient descents),直观地介绍了这些方法是如何工作的。

A Visual Explanation of Gradient Descent Methods (Momentum, AdaGrad, RMSProp, Adam) by Lili Jiang

https://towardsdatascience.com/a-visual-explanation-of-gradient-descent-methods-momentum-adagrad-rmsprop-adam-f898b102325c

在一个表面上动画演示5个梯度下降法: 梯度下降(青色) ,momentum(洋红色) ,AdaGrad (白色) ,RMSProp (绿色) ,Adam (蓝色)。左坑是全局极小值,右坑是局部极小值

在这篇文章中,我用了大量的资源来解释各种梯度下降法(gradient descents),想直观地介绍一下这些方法是如何工作的。通过我写的一个梯度下降可视化工具(https://github.com/lilipads/gradient_descent_viz)的帮助,希望可以向你展示一些独特的见解,或者至少是很多GIF :-)

我假设大家已经对梯度下降在机器学习中的使用原因和方式有基本的了解。这里的重点是比较这些方法。如果你已经熟悉了所有的方法,可以拉到底部观看一些有趣的“赛马”。

原版梯度下降(Vanilla Gradient Descent)

让我们快速复习一下。在机器学习的场景下,梯度下降学习的目标通常是最小化机器学习问题的损失函数。一个好的算法能够快速可靠地找到最小值(也就是说,它不会陷入局部极小值、鞍点或高原区域,而是寻找全局最小值)。

基本的梯度下降算法遵循的思想是,梯度的相反方向指向较低的区域。所以它在梯度的相反方向迭代。对于每个参数 theta,它做如下操作:

delta = - learning_rate * gradient

theta += delta

Theta 是一些需要优化的参数(例如,神经网络中神经元与神经元之间连接的权重,线性回归特征的系数,等等)。在机器学习优化设置中可能有成千上万个这样的 thetas 。Delta 是算法中每次迭代后 theta 的变化量; 希望随着每次这样的变化,theta 逐渐接近最优值。

由于人类的感知仅限于三维,在我所有的可视化中,假设我们只有两个参数(或者 thetas)需要优化,它们由图中的 x 和 y 维表示。曲面是损失函数。我们要找到在曲面最低点的(x,y)组合。这个问题对我们来说是显而易见的,因为我们可以看到整个曲面。但是这个球(下降算法)不能,它一次只能走一步,探索周围的环境,就像在黑暗中只用手电筒走路一样。

原版梯度下降法之所以叫原版,是因为它只按照梯度来执行。下面的方法对梯度进行一些额外的处理,使其更快、更好。

动量(Momentum)

带有动量的梯度下降算法(简称动量)借鉴了物理学的思想。想象一下在无摩擦的碗里滚动一个球。没有在底部停止,而是积累的动量推动它前进,球继续前后滚动。

我们可以把动量的概念应用到我们的原版梯度下降算法中。在每个步骤中,除了常规的梯度之外,它还增加了前一步中的移动。在数学上,它通常表示为:

delta = - learning_rate * gradient + previous_delta * decay_rate (方程1)

theta += delta (方程2)

我发现如果我稍微修改一下这个方程,然后跟踪(衰减的)累积梯度之和,会更直观。当我们稍后引入 Adam 算法时,这也会使事情变得更简单。

sum_of_gradient = gradient + previous_sum_of_gradient * decay_rate(方程3)

delta = -learning_rate * sum_of_gradient (方程4)

theta += delta (方程5)

(我所做的是分解出学习率。为了看到数学等价性,可以用-learning_rate * sum_of_gradient代替方程1中的delta 以得到方程3.)

让我们考虑两个极端情况来更好地理解这个衰减率(decay rate)参数。如果衰减率为0,那么它与原版梯度下降完全相同。如果衰减率是1,那么它就会像我们开始提到的无摩擦碗的类比一样,前后不断地摇摆; 你不会想要这样的结果。通常衰减率选择在0.8-0.9左右,它就像一个有一点摩擦的表面,所以它最终会减慢并停止。

那么,在哪些方面动量比原版梯度下降更好呢?在上面的比较中,你可以看到两个优点:

  1. 动量移动得更快(因为它积累的所有动量)

  2. 动量有机会逃脱局部极小值(因为动量可能推动它脱离局部极小值)。同样,我们将在后面看到,它也将更好地通过高原区

AdaGrad

Adaptive Gradient 算法,简称 AdaGrad,不是像动量一样跟踪梯度之和,而是跟踪梯度平方之和,并使用这种方法在不同的方向上调整梯度。这些方程通常用张量表示。我将避免使用张量来简化这里的语言。对于每个维度:

sum_of_gradient_squared = previous_sum_of_gradient_squared + gradient²

delta = -learning_rate * gradient / sqrt(sum_of_gradient_squared)

theta += delta

在机器学习优化中,一些特征是非常稀疏的。稀疏特征的平均梯度通常很小,所以这些特征的训练速度要慢得多。解决这个问题的一种方法是为每个特征设置不同的学习率,但这很快就会变得混乱。

Adagrad 解决这个问题的思路是: 你已经更新的特征越多,你将来更新的就越少,这样就有机会让其它特征(例如稀疏特征)赶上来。用可视化的术语来说,更新这个特征的程度即在这个维度中移动了多少,这个概念由梯度平方的累积和表达。注意在上面的一步一步的网格插图中,如果没有重新缩放调整(1b) ,球大部分会垂直向下移动; 如果有调整(1d) ,它会沿对角线方向移动。

这个属性让 AdaGrad (以及其它类似的基于梯度平方的方法,如 RMSProp 和 Adam)更好地避开鞍点。Adagrad 将采取直线路径,而梯度下降(或相关的动量)采取的方法是“让我先滑下陡峭的斜坡,然后才可能担心较慢的方向”。有时候,原版梯度下降可能非常满足的仅仅停留在鞍点,那里两个方向的梯度都是0。

RMSProp

然而,AdaGrad 的问题在于它非常慢。这是因为梯度的平方和只会增加而不会减小。Rmsprop (Root Mean Square Propagation)通过添加衰减因子来修复这个问题。

sum_of_gradient_squared = previous_sum_of_gradient_squared * decay_rate+ gradient² * (1- decay_rate)

delta = -learning_rate * gradient / sqrt(sum_of_gradient_squared)

theta += delta

更精确地说,梯度的平方和实际上是梯度平方的衰减和。衰减率表明的是只是最近的梯度平方有意义,而很久以前的梯度基本上会被遗忘。顺便说一句,“衰减率”这个术语有点用词不当。与我们在动量中看到的衰减率不同,除了衰减之外,这里的衰减率还有一个缩放效应: 它以一个因子(1 - 衰减率)向下缩放整个项。换句话说,如果衰减率设置为0.99,除了衰减之外,梯度的平方和将是 sqrt (1-0.99) = 0.1,因此对于相同的学习率,这一步大10倍。

为了看到衰减的效果,在这个对比中,AdaGrad (白色)最初与 RMSProp (绿色)差不多,正如调整学习率和衰减率的预期。但是 AdaGrad 的梯度平方和累计得非常快,以至于它们很快变得非常巨大(从动画中方块的大小可以看出)。买路费负担沉重,最终 AdaGrad 几乎停止了。另一方面,由于衰变率的原因,RMSProp 一直将方块保持在一个可控的大小。这使得 RMSProp 比 AdaGrad 更快。

Adam

最后但并非最不重要的是,Adam (Adaptive Moment Estimation)同时兼顾了动量和 RMSProp 的优点。Adam在实践中效果很好,因此在最近几年,它是深度学习问题的常用选择。

让我们来看看它是如何工作的:

sum_of_gradient = previous_sum_of_gradient * beta1 + gradient * (1 - beta1) [Momentum]

sum_of_gradient_squared = previous_sum_of_gradient_squared * beta2 + gradient² * (1- beta2) [RMSProp]

delta = -learning_rate * sum_of_gradient / sqrt(sum_of_gradient_squared)

theta += delta

Beta1是一阶矩梯度之和(动量之和)的衰减率,通常设置为0.9。Beta2是二阶矩梯度平方和的衰减率,通常设置为0.999。

Adam 的速度来自于动量和RMSProp 适应不同方向的梯度的能力。这两者的结合使它变得更强大。

结束语

现在我们已经讨论了所有的方法,让我们观看几个比赛,包含所有我们上面提到的下降方法!(有一些不可避免的参数挑选。最好自己玩一下)

在这个地形中,有两座小山阻挡了通往全局极小值的道路。Adam是唯一一个能够找到通往全局极小值的算法。无论以哪种方式调整参数,至少从这个起始位置开始,没有任何其它方法可以到达那里。这意味着不管是动量还是自适应梯度都不能单独做到这一点。这实际上是两者的结合: 首先,动量使Adam越过了所有其它球停止的局部极小值点; 然后对梯度平方和的调整使其侧向移动,因为这是一个未被探索的方向,导致了它的最终胜利。

这是另一场比赛。在这个地形中,围绕着全局极小值有一个平坦的区域(高原)。通过一些参数调整,Momentum 和 Adam (多得其动量组件)可以到达中心,而其它方法不能。

总之,梯度下降法算法是一类通过梯度来寻找函数最小点的算法。原版梯度下降只遵循梯度(按学习速率进行调整)。改善梯度下降法的两个常用工具是梯度之和(一阶矩)和梯度平方之和(二阶矩)。动量利用一阶矩的衰减率来获得速度。Adagrad 使用没有衰减的二阶矩来处理稀疏特征。Rmsprop 使用二阶矩的衰减率来加速 AdaGrad。Adam同时使用一阶矩和二阶矩,通常是最好的选择。还有一些其它的梯度下降算法,比如 Nesterov 加速梯度算法,AdaDelta 算法等等,在本文中没有涉及。

最后,展示一下带着没有衰减的动量下降。它的路径构成了一个有趣的模式。没有什么实际的用处,但是在这里展示它只是为了好玩。

玩下这个在这篇文章中用来生成所有的可视化效果的可视化工具(https://github.com/lilipads/gradient_descent_viz),看看你会发现什么!

参考资料及相关链接:

[1] http://www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf
[2] https://ruder.io/optimizing-gradient-descent
[3] https://bl.ocks.org/EmilienDupont/aaf429be5705b219aaaf8d691e27ca87

文末福利

各位猿们,还在为记不住API发愁吗,哈哈哈,最近发现了国外大师整理了一份Python代码速查表和Pycharm快捷键sheet,火爆国外,这里分享给大家。

这个是一份Python代码速查表

下面的宝藏图片是2张(windows && Mac)高清的PyCharm快捷键一览图

怎样获取呢?可以添加我们的AI派团队的程序媛姐姐

一定要备注【高清图】哦

????????????????????

➕我们的程序媛小姐姐微信要记得备注【高清图】哦

STM32F4实战:手把手教你实现USB OTG双模式切换(Host/Slave) 本文详细介绍了如何在STM32F4上实现USB OTG双模式切换(Host/Slave),包括硬件架构解析、软件实现机制、主机模式下的U盘读写以及从机模式下的自定义设备开发。通过实战案例和优化技巧,帮助开发者快速掌握USB双角色功能,提升嵌入式系统开发的灵活性和效率。 阅读详情

相关推荐

如何在win11中用双硬盘或移动硬盘装Ubuntu 20.04 双系统

win11 安装双系统

qq_42817360的博客 5143

AdaGrad、RMSProp、Adam优化器

AdaGrad Adaptive Gradient ,自适应梯度,它能够对每个不同的参数调整不同的学习率,对频繁变化的参数以更小的步长进行更新,而稀疏的参数以更大的步长进行更新。 公式: gt表示第t时间步的梯度(向量,包含各个参数对应的偏导数,gt,i表示第i个参数t时刻偏导数) gt2表示第t时间步的梯度平方(向量,由gt各元素自己进行平方运算所得,即Element-wise) 与SGD的核心区别在于计算更新步长时,增加了分母:梯度平方累积和的平方根。此项能够累积各个参数gt,i的历史梯度平方,频繁更

qq_39667860的博客 2311

WPF实战:HelixToolkit 3D图形开发入门指南

本文详细介绍了如何使用HelixToolkit在WPF中进行3D图形开发,从环境搭建到创建第一个3D程序(如彩色立方体),再到进阶技巧和常见问题排查。通过实战案例和性能优化建议,帮助开发者快速掌握3D场景构建和模型导入技术,提升开发效率。

weixin_29197051的博客 761

深度学习中的优化算法之AdaGrad

之前在https://blog.youkuaiyun.com/fengbingchun/article/details/123955067 介绍过SGD(Mini-Batch Gradient Descent(MBGD),有时提到SGD的时候,其实指的是MBGD)。这里介绍下自适应梯度优化算法。 AdaGrad:全称Adaptive Gradient,自适应梯度,是梯度下降优化算法的扩展。AdaGrad是一种具有自适应学习率的梯度下降优化方法。它使参数的学习率自适应,对不频繁的参数执行较大的更...

网络资源是无限的 1万+

【脑电分析系列】第15篇:脑电功能连接性与脑网络分析(二):Granger因果性、图论指标与复杂网络构建

摘要: 本文深入探讨了脑电(EEG)分析中的高阶连接性方法——有效连接(Effective Connectivity),重点介绍了Granger因果性(Granger Causality, GC)的原理与应用。GC通过统计预测揭示脑区间信息流动方向,超越了传统功能连接的同步性分析。文章还结合图论指标(如度、路径长度、聚类系数和模块化)量化脑网络的拓扑结构,并通过Python代码(MNE和NetworkX库)演示了从EEG数据构建、分析复杂脑网络的完整流程。该研究为理解大脑动态互动、认知任务信息流及神经系统疾

qq_32516809的博客 1571

L298N电机驱动模块的接线使用与代码实现

#include "iostm8s208mb.h" #define u8 uint8_t #define u16 uint16_t #define u32 uint32_t typedef unsigned char uint8_t; typedef unsigned short uint16_t; typedef unsigned long uint32_t; // 关于LED灯的宏定义 #define LED2 PI_ODR_ODR2 //输出量 #define LE

Clichong 13万+

深度学习优化算法大全系列4:AdaGrad(Adaptive Gradient)

1.参数调整 之前提到的SGD-Momentum(动量), NAG等算法,都是针对梯度的方向做相关优化,而且使用的都是一阶动量。而神经网络有许多超参数(Hyper-Parameter),这些超参数的选择也是模型选择调优的一项重要工作,因此很多算法工程师也自己戏谑为"调参工程师"或者"调包侠",就可以看出参数的重要性。 在经典的梯度下降中,不同的变量,采用的是一个全局的学习率。但是实际情况中,不同的变量对于目标函数的依赖不同。举个简单的例子,对于有些参数,因为特征出现次数多属于稠密特征,可能在训练开始不就以后

bitcarmanlee的博客 1754

Dify 第 13 篇 Dify 工作流 详解

工作流通过将复杂任务分解为节点降低复杂度,提升LLM应用的性能和稳定性。Dify工作流分为两类:Chatflow面向对话场景(如客服),支持多轮对话;Workflow面向批处理场景(如翻译),提供逻辑节点实现自动化。核心概念包括节点、变量(系统/会话/环境变量)及应用类型差异:Chatflow支持中间输出和对话历史,Workflow仅支持结束节点输出。系统变量以"sys"开头,用于全局数据传递,不同应用类型变量不同,如Chatflow的sys.query存储用户输入,Workflow的s

甘蓝的专栏 3253

卷积神经网络的可视化(基于keras)

在通常的认知中,神经网络的模型是一个“黑盒”,即模型学到的内容很难用人能够理解的方式来提取和表现,虽然对于某些类型的深度学习模型来说,这种表述部分正确,但对卷积神经网络来说绝对不是这样,卷积神经网络学到的表示非常适合可视化,很大程度上是因为它们是视觉概念的表示。到现在为止,人们开发了多种技术来对这些表示进行可视化和理解,这里介绍3种最容易理解也是最有效的方法。 可视化卷积神经网络的中间输出(中间激活):有助于理解卷积神经网络连续的层如何对输入进行变换,也有助于初步了解卷积神经网络每个过滤器的含义。 可视化

Keras深度学习 4万+

Matlab之机载雷达系统中的空时自适应处理(STAP)技术(附源码)

在第一个脉冲期间,天线 1 通过天线 N-1 接收的杂波返回与第二个脉冲期间天线 2 通过天线 N 接收的杂波返回相同。该算法可能需要搜索角度和多普勒的所有组合来定位目标,但对于示例,由于确切知道目标的位置,因此可以将处理器定向到该点。然而,接收到的信号不仅包含来自目标的反射回波,还包含来自被照亮地表的回波。然而,由于干扰器的白噪声性质,接收到的干扰信号占据了整个多普勒频段。在以下部分中,您将模拟来自目标、杂波和干扰器的返回,并说明 STAP 技术如何过滤来自接收信号的干扰。假设元件间距是波形波长的一半。

珞瑜的博客 7140

C#与数据采集卡集成开发全指南:从硬件连接到实时数据处理(附工业传感器监测实战)

C#数据采集卡集成开发指南 本文系统介绍了不同类型数据采集卡(DAQ卡)与C#的集成方法。主要内容包括: 数据采集卡分类:按接口分为PCIe/PCI(高带宽低延迟)、USB(便携即插即用)和以太网(远距离组网);按信号类型分为模拟量输入、数字量输入/输出等。 C#集成核心方法: 优先使用厂商SDK(如NI DAQmx),提供完整功能封装 无SDK时采用通用协议(如USB HID、Modbus TCP) 具体实现示例: NI DAQmx采集热电偶温度代码 USB HID协议读取模拟量电压值 工业应用要点:实时

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1975

【转】梯度下降的可视化解释(Adam,AdaGrad,Momentum,RMSProp)

梯度下降的可视化解释(Adam,AdaGrad,Momentum,RMSProp) 强烈推荐看原文:梯度下降的可视化解释(Adam,AdaGrad,Momentum,RMSProp),https://mp.weixin.qq.com/s/Wx7aHnJCTJ3y6vpRNe6fuA 原版梯度下降(Vanilla Gradient Descent) 在机器学习的场景下,梯度下降学习的目标通常是最小化机器学习问题的损失函数。一个好的算法能够快速可靠地找到最小值(也就是说,它不会陷入局部极小值、鞍点或高..

Toby的博客 624

使用python中pypower进行电力潮流计算

使用python中pypower进行电力潮流计算

总裁余(余登武)博客 4864

adam算法_梯度下降的可视化解释(Momentum,AdaGrad,RMSProp,Adam)

编译:McGL公众号:PyVision(欢迎关注,专注CV,偶尔CS)一图胜千言,什么?还是动画,那就更棒啦! A Visual Explanation of Gradient Descent Methods (Momentum, AdaGrad, RMSProp, Adam) by Lili Jianghttps://towardsdatascience.com/a-visual-explana...

weixin_39732640的博客 555

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

图解深度学习-梯度下降法优化器可视化(SGD, Momentum,Adam, Adagrad and RMSProp)

图解深度学习-梯度下降法可视化(SGD, Momentum, Adagrad and RMSProp)前言定义了4个基本函数机器学习原理原始的梯度下降算法带动量的梯度下降算法带惯性的梯度下降算法Adagrad 自适应调整的梯度下降RMSPropAdam 前言 主要用了Jupyter Notebook的插件ipywidgets,可以进行交互,可以自己调整参数来看结果,用于理解来说非常好,今后也会继续...

王伟王胖胖的博客 3776

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

adam算法_震惊!有人将梯度下降算法做了可视化解释!快来一睹为快!

在这篇文章中,由于有大量的资源可以解释梯度下降,因此,我想在视觉上引导您了解每种方法的工作原理。借助我构建的梯度下降可视化工具,希望我可以为您提供一些独特的见解,或者至少提供许多GIF。这里的重点是比较和对比这些方法。Vanilla Gradient Descent在机器学习的上下文中,梯度下降的目标通常是使机器学习问题的损失函数最小化。一个好的算法可以快速,可靠地找到最小值(即,它不会卡在局部最...

weixin_39993989的博客 277

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

梯度下降法与优化算法的python实现

梯度下降法与优化算法的python实现 1.SGD(随机梯度下降法): 每一个参数按照梯度的方向来减小以追求最小化损失函数 目前梯度下降法有三种,它们的区别就是每次更新参数时所需的数据量不一样:批量梯度下降法,小批量梯度下降法,随机梯度下降法 SGD的缺点: 容易收敛到局部最优,但有的时候会被限制在鞍点 class SGD: def __init__(self, lr=0.01): s...

qq_43807997的博客 1266

自适应辛普森公式_数学公式、可视化图齐齐上阵,神经网络如何一步步走向最优化看得见!...

继在《要做好深度学习任务,不妨先在损失函数上「做好文章」》一文中为大家深入浅出地介绍了损失函数的相关知识后,Deep Learning Demystified 编辑、数据科学家 Harsha Bommana 本次接着从优化的角度,结合数学方式和可视化图,带大家以「看得见」的方式来了解神经网络如何一步步找到最小化的损失值,并最终实现最优化。在前一篇文章《要做好深度学习任务,不妨先在损失函数...

weixin_30794381的博客 482

优化器(Optimizer)(SGD、Momentum、AdaGrad、RMSProp、Adam)

文章目录3.1、传统梯度优化的不足(BGD,SGD,MBGD)3.1.1 一维梯度下降3.1.2 多维梯度下降3.2、动量(Momentum)3.3、AdaGrad算法3.4、RMSProp算法3.5、Adam算法 优化器在机器学习、深度学习中往往起着举足轻重的作用,同一个模型,因选择不同的优化器,性能有可能相差很大,甚至导致一些模型无法训练。所以了解各种优化器的基本原理非常重要。下面介绍各种常用优化器或算法的主要原理,及各自的优点或不足。 3.1、传统梯度优化的不足(BGD,SGD,MBGD) BGD、S

tcn760的博客 6万+
上一篇: 网络IO谁更快?Python与Go请求速度对比
下一篇: 腾讯增长技术:智能投放篇
Wang_AI
博客等级 码龄12年 997粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值