训练神经网络的五大算法

神经网络的模型图片大全,图像识别神经网络模型 BP算法的基本思想是:学习过程由信号正向传播与误差的反向回传两个部分组成;正向传播时,输入样本从输入层传入,经各隐层依次逐层处理,传向输出层,若输出层输出与期望不符,则将误差作为调整信号逐层反向回传,对神经元之间的连接权矩阵做出处理,使误差减小。经反复学习,最终使误差减小到可接受的范围。具体步骤如下:1、从训练集中取出某一样本,把信息输入网络中。2、通过各节点间的连接情况正向逐层处理后,得到神经网络的实际输出。3、计算网络实际输出与期望输出的误差。... 阅读详情

神经网络模型的每一类学习过程通常被归纳为一种训练算法。训练的算法有很多,它们的特点和性能各不相同。

问题的抽象

人们把神经网络的学习过程转化为求损失函数f的最小值问题。一般来说,损失函数包括误差项和正则项两部分。误差项衡量神经网络模型在训练数据集上的拟合程度,而正则项则是控制模型的复杂程度,防止出现过拟合现象。

损失函数的函数值由模型的参数(权重值和偏置值)所决定。我们可以把两部分参数合并为一个n维的权重向量,记为w。下图是损失函数f(w)的图示。

如上图所示,w*是损失函数的最小值。在空间内任意选择一个点A,我们都能计算得到损失函数的一阶、二阶导数。一阶导数可以表示为一个向量:

ᐁif(w) = df/dwi (i = 1,…,n)

同样的,损失函数的二阶导数可以表示为海森矩阵( Hessian Matrix ):

Hi,jf(w) = d2f/dwi·dwj (i,j = 1,…,n)

多变量的连续可微分函数的求解问题一直被人们广泛地研究。许多的传统方法都能被直接用于神经网络模型的求解。

一维优化方法

尽管损失函数的值需要由多个参数决定,但是一维优化方法在这里也非常重要。这些方法常常用于训练神经网络模型。

许多训练算法首先计算得到一个训练的方向d,以及速率η来表示损失值在此方向上的变化,f(η)。下图片展示了这种一维函数。

f和η*在η1和η2所在的区间之内。

由此可见,一维优化方法就是寻找到某个给定的一维函数的最小值。黄金分段法和Brent方法就是其中两种广泛应用的算法。这两种算法不断地缩减最小值的范围,直到η1和η2两点之间的距离小于设定的阈值。

多维优化方法

我们把神经网络的学习问题抽象为寻找参数向量w*的问题,使得损失函数f在此点取到最小值。假设我们找到了损失函数的最小值点,那么就认为神经网络函数在此处的梯度等于零。

通常情况下,损失函数属于非线性函数,我们很难用训练算法准确地求得最优解。因此,我们尝试在参数空间内逐步搜索,来寻找最优解。每搜索一步,重新计算神经网络模型的参数,损失值则相应地减小。

我们先随机初始化一组模型参数。接着,每次迭代更新这组参数,损失函数值也随之减小。当某个特定条件或是终止条件得到满足时,整个训练过程即结束。

现在我们就来介绍几种神经网络的最重要训练算法。

1. 梯度下降法(Gradient descent)

梯度下降方法是最简单的训练算法。它仅需要用到梯度向量的信息,因此属于一阶算法。

我们定义f(wi) = fi and ᐁf(wi) = gi。算法起始于W0点,然后在第i步沿着di = -gi方向从wi移到wi+1,反复迭代直到满足终止条件。梯度下降算法的迭代公式为:

wi+1 = wi - di·ηi, i=0,1,…

参数η是学习率。这个参数既可以设置为固定值,也可以用一维优化方法沿着训练的方向逐步更新计算。人们一般倾向于逐步更新计算学习率,但很多软件和工具仍旧使用固定的学习率。

下图是梯度下降训练方法的流程图。如图所示,参数的更新分为两步:第一步计算梯度下降的方向,第二步计算合适的学习率。

梯度下降方法有一个严重的弊端,若函数的梯度变化如图所示呈现出细长的结构时,该方法需要进行很多次迭代运算。而且,尽管梯度下降的方向就是损失函数值减小最快的方向,但是这并不一定是收敛最快的路径。下图描述了此问题。

当神经网络模型非常庞大、包含上千个参数时,梯度下降方法是我们推荐的算法。因为此方法仅需要存储梯度向量(n空间),而不需要存储海森矩阵(n2空间)

2.牛顿算法(Newton’s method)

因为牛顿算法用到了海森矩阵,所以它属于二阶算法。此算法的目标是使用损失函数的二阶偏导数寻找更好的学习方向。

我们定义f(wi) = fi, ᐁf(wi) = gi and Hf(wi) = Hi。用泰勒展开式估计函数f在w0值

f = f0 + g0 · (w - w0) + 0.5 · (w - w0)2 · H0

H0是函数f在w0的海森矩阵值。在f(w)的最小值处g = 0,我们得到了第二个等式

g = g0 + H0 · (w - w0) = 0

因此,将参数初始化在w0,牛顿算法的迭代公式为

wi+1 = wi - Hi-1·gi, i = 0,1,…

Hi-1·gi 被称为牛顿项。值得注意的是,如果海森矩阵是一个非正定矩阵,那么参数有可能朝着最大值的方向移动,而不是最小值的方向。因此损失函数值并不能保证在每次迭代都减小。为了避免这种问题,我们通常会对牛顿算法的等式稍作修改:

wi+1 = wi - (Hi-1·gi) ·ηi, i=0,1,…

学习率η既可以设为固定值,也可以动态调整。向量d = Hi-1·gi被称为牛顿训练方向。

下图展示的是牛顿法的流程图。参数的更新也分为两步,计算牛顿训练方向和合适的学习率。

牛顿法的性能如下图所示。从相同的初始值开始寻找损失函数的最小值,它比梯度下降方法需要更少的步骤。

然而,牛顿法的难点在于准确计算海森矩阵和其逆矩阵需要大量的计算资源。

3.共轭梯度法(Conjugate gradient)

共轭梯度法介于梯度下降法与牛顿法之间。它的初衷是解决传统梯度下降法收敛速度太慢的问题。不像牛顿法,共轭梯度法也避免了计算和存储海森矩阵。

共轭梯度法的搜索是沿着共轭方向进行的,通常会比沿着梯度下降法的方向收敛更快。这些训练方向与海森矩阵共轭。

我们将d定义为训练方向向量。然后,将参数向量和训练方向训练分别初始化为w0和d0 = -g0,共轭梯度法的方向更新公式为:

di+1 = gi+1 + di·γi, i=0,1,…

其中γ是共轭参数,计算它的方法有许多种。其中两种常用的方法分别是Fletcher 和 Reeves 以及 Polak 和 Ribiere发明的。对于所有的共轭梯度算法,训练方向会被周期性地重置为梯度的负值。

参数的更新方程为:

wi+1 = wi + di·ηi, i=0,1,…

下图是共轭梯度法训练过程的流程图。参数更新的步骤分为计算共轭梯度方向和计算学习率两步。

此方法训练神经网络模型的效率被证明比梯度下降法更好。由于共轭梯度法不需要计算海森矩阵,当神经网络模型较大时我们也建议使用。

4. 准牛顿法(Quasi-Newton method)

由于牛顿法需要计算海森矩阵和逆矩阵,需要较多的计算资源,因此出现了一个变种算法,称为准牛顿法,可以弥补计算量大的缺陷。此方法不是直接计算海森矩阵及其逆矩阵,而是在每一次迭代估计计算海森矩阵的逆矩阵,只需要用到损失函数的一阶偏导数。

海森矩阵是由损失函数的二阶偏导数组成。准牛顿法的主要思想是用另一个矩阵G来估计海森矩阵的逆矩阵,只需要损失函数的一阶偏导数。准牛顿法的更新方程可以写为:

wi+1 = wi - (Gi·gi)·ηi, i=0,1,…

学习率η既可以设为固定值,也可以动态调整。海森矩阵逆矩阵的估计G有多种不同类型。两种常用的类型是Davidon–Fletcher–Powell formula (DFP)和Broyden–Fletcher–Goldfarb–Shanno formula (BFGS)。

准牛顿法的流程图如下所示。参数更新的步骤分为计算准牛顿训练方向和计算学习率。

许多情况下,这是默认选择的算法:它比梯度下降法和共轭梯度法更快,而不需要准确计算海森矩阵及其逆矩阵。

5. Levenberg-Marquardt算法

Levenberg-Marquardt算法又称为衰减的最小平方法,它针对损失函数是平方和误差的形式。它也不需要准确计算海森矩阵,需要用到梯度向量和雅各布矩阵。

假设损失函数f是平方和误差的形式:

f = ∑ ei2, i=0,…,m

其中m是训练样本的个数。

我们定义损失函数的雅各布矩阵由误差项对参数的偏导数组成,

Ji,jf(w) = dei/dwj (i = 1,…,m & j = 1,…,n)

m是训练集中的样本个数,n是神经网络的参数个数。雅各布矩阵的规模是m·n

损失函数的梯度向量是:

ᐁf = 2 JT·e

e是所有误差项组成的向量。

最后,我们可以用这个表达式来估计计算海森矩阵。

Hf ≈ 2 JT·J + λI

λ是衰减因子,以确保海森矩阵是正的,I是单位矩阵。

此算法的参数更新公式如下:

wi+1 = wi - (JiT·Ji+λiI)-1·(2 JiT·ei), i=0,1,…

若衰减因子λ设为0,相当于是牛顿法。若λ设置的非常大,这就相当于是学习率很小的梯度下降法。

参数λ的初始值非常大,因此前几步更新是沿着梯度下降方向的。如果某一步迭代更新失败,则λ扩大一些。否则,λ随着损失值的减小而减小,Levenberg-Marquardt接近牛顿法。这个过程可以加快收敛的速度。

下图是Levenberg-Marquardt算法训练过程的流程图。第一步计算损失值、梯度和近似海森矩阵。然后衰减参数和衰减系数。

由于Levenberg-Marquardt算法主要针对平方和误差类的损失函数。因此,在训练这类误差的神经网络模型时速度非常快。但是这个算法也有一些缺点。首先,它不适用于其它类型的损失函数。而且,它也不兼容正则项。最后,如果训练数据和网络模型非常大,雅各布矩阵也会变得很大,需要很多内存。因此,当训练数据或是模型很大时,我们并不建议使用Levenberg-Marquardt算法。

内存使用和速度的比较

下图绘制了本文讨论的五种算法的计算速度和内存需求。如图所示,梯度下降法往往是最慢的训练方法,它所需要的内存也往往最少。相反,速度最快的算法一般是Levenberg-Marquardt,但需要的内存也更多。柯西-牛顿法较好地平衡了两者。

总之,如果我们的神经网络模型有上千个参数,则可以用节省存储的梯度下降法和共轭梯度法。如果我们需要训练很多网络模型,每个模型只有几千个训练数据和几百个参数,则Levenberg-Marquardt可能会是一个好选择。其余情况下,柯西-牛顿法的效果都不错。


人工智能——神经网络算法入门 神经网络算法是一种模拟人脑神经元网络结构的计算方法,核心思想是通过大量简单的基本计算单元(即神经元)相互连接来处理复杂的模式识别、优化等问题。典型的神经网络算法包括输入层、隐藏层和输出层。输入层负责接收外部输入的数据,隐藏层通过一系列复杂的计算将输入转化为有意义的特征,最后输出层将特征转化为具体的输出结果。神经网络算法的优势在于其具有良好的自适应性、自组织和自学习能力,可以自动地根据输入数据进行学习和优化,从而在很大程度上解决了复杂的模式识别、优化等问题。 阅读详情

相关推荐

DL之BP:FFNN(前馈神经网络)结构与BP(一种训练神经网络的方法)算法的简介、训练神经网络的五大方法(RLS/GA/SA/PSO/BP)、FFNNLM对比BP之详细攻略

DL之BP:FFNN(前馈神经网络)结构与BP(一种训练神经网络的方法)算法的简介、训练神经网络的五大方法(RLS/GA/SA/PSO/BP)、FFNNLM对比BP之详细攻略 目录 FFNN(前馈神经网络)结构与BP(一种训练神经网络的方法)算法 1、训练神经网络的五大方法:RLS/GA/SA/PSO/BP FFNNLM(前馈神经网络语言模型)和BP(反向传播)神经网络的对比 FFNN(前馈神经网络)结构与BP(一种训练神经网络的方法)算法 简介 前馈神经网络(Fee

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 2165

神经网络算法

每个神经元有一个输出,它可以连接到许多其他神经元,每个神经元输入有多个连接通路,每个连接通路对应一个连接权系数。x1~ xn是从其他神经元传来的输入信号,wij表示表示从神经元j到神经元i的连接权值,θ表示一个阈值(或称为偏置),则神经元i的输出与输入的关系表示为:yi表示神经元i的输出,函数f称为激活函数或转移函数,net称为净激活。

太可惹的博客 6813

5、机器学习:算法、训练与未来展望

本文深入探讨了机器学习的核心算法、训练机制及其在各领域的广泛应用。从符号推理到类比学习,五大主流算法技术被逐一解析;通过表示、评估与优化三要素揭示了模型训练的本质。文章还展示了机器学习在机器人、医疗、工业等领域的现实应用,并展望了其在智慧城市、金融科技和教育等新兴场景中的潜力。同时,讨论了算法通用性、数据质量、伦理安全等挑战,提出了技术创新、人才培养与政策监管相结合的可持续发展策略,全面呈现了机器学习的现状与未来路径。

u8v9w0x1y的博客 57

神经网络算法详解

线性模型有一个 n 维权重 ω 和一个标量偏差 b :对于给定的输入 x :线性模型得到的输出 y 等于输入 x 与权重 ω 的加权求和, 再加上偏置 b, 即:向量版本的写法为:线性模型相乘求和的含义是什么?相乘的含义是通过权重对输入信息进行重要程度的重分配;而求和的目的是综合考虑所有信息。例如, 生活中房价。

极光喵的博客 8909

IAR9.4报错之编码方式

IAR9.40编码方式错误导致的报错

qq_36081075的博客 2626

避坑指南:PyTorch ConvLSTM参数配置的那些坑(hidden_dim/kernel_size/num_layers详解)

本文深度解析PyTorch ConvLSTM中hidden_dim、kernel_size和num_layers三大核心参数的配置技巧,提供实战指南和性能优化建议。通过实验数据揭示参数组合的内在规律,帮助开发者避免常见配置陷阱,提升时空序列建模效果。特别针对视频预测、气象预报等应用场景,给出黄金参数组合方案和调试技巧。

vv45678的博客 703

最新训练神经网络的五大算法

作者: Alberto Quesada 译者: KK4SBB   责编:何永灿,关注人工智能,投稿请联系 heyc@youkuaiyun.com 或微信号 289416419   神经网络模型的每一类学习过程通常被归纳为一种训练算法。训练的算法有很多,它们的特点和性能各不相同。      问题的抽象   人们把神经网络的学习过程转化为求损失函数f的最小值问题。一般来说,损失函数包括误差项和正

sinat_36394053的博客 9589

一文了解向量数据库在RAG中扮演的角色

向量数据库:AI新纪元的基石。探索如何通过这一创新技术优化RAG,提高语言模型的信息处理能力

2401_82452722的博客 2452

java神经网络该怎么训练_浅谈训练神经网络的五大算法

作者: Alberto Quesada 译者: KK4SBB责编:何永灿,关注人工智能,投稿请联系 heyc@youkuaiyun.com 或微信号 289416419神经网络模型的每一类学习过程通常被归纳为一种训练算法。训练的算法有很多,它们的特点和性能各不相同。问题的抽象人们把神经网络的学习过程转化为求损失函数f的最小值问题。一般来说,损失函数包括误差项和正则项两部分。误差项衡量神经网络模型在训练数据集上...

weixin_36274355的博客 335

STM32F103C8T6+I2C+DMA读取陀螺仪模块JY901S(硬件I2C

说明:1.本实验代码适用移植一切stm32f1系列;2.本实验使用的是外设资源硬件I2C2;3.本实验运用的是DMA单次模式,如果需要DMA的循环模式,请移步我的另一篇文章;4.本文章不提供陀螺仪校准教学,并是在没有校准陀螺仪情况下读取数据;5.本文章是作者的学习记录及心得,如有不足,欢迎指正。 总结:亲测stm32f103c8t6最小系统板通过片上外设资源I2C配合DMA读去陀螺仪模块jy901s偏航角有效。

anquanyuanqqadsy的博客 6172

【Agent实战】Agent Skills 深度解析:从原理到落地的完整指南

本文深入解析了Agent Skills的概念及其在AI协作中的实际应用。Skill是一种可被AI按需发现和加载的任务执行说明书,它将团队经验、规则和步骤固化为结构化文档,如SKILL.md。文章阐明了Skill与Prompt、MCP、Function Calling的关系,强调Skill专注于"怎么做"而非底层能力。重点介绍了SKILL.md的编写规范,包括元数据命名规则、描述技巧和正文内容优化,旨在帮助开发者高效构建可复用的知识资产,提升Agent的任务执行稳定性与专业性。通过清晰的示例和对比,为AI架构

少说,多做 117

浅谈训练神经网络的五大算法

  作者: Alberto Quesada 译者: KK4SBB   责编:何永灿,关注人工智能,投稿请联系 heyc@youkuaiyun.com 或微信号 289416419   神经网络模型的每一类学习过程通常被归纳为一种训练算法。训练的算法有很多,它们的特点和性能各不相同。      问题的抽象   人们把神经网络的学习过程转化为求损失函数f的最小值问题。一般来说,损失函数包...

weixin_30458043的博客 980

使用 Simulink + Simscape Electrical 实现一个三相半控桥式整流器的仿真模型

本文详细介绍了使用Simulink搭建三相半控桥式整流器仿真模型的方法。主要内容包括系统结构设计、建模步骤(从创建项目到参数配置)、移相触发控制的实现,以及阻感负载下的动态响应分析。通过合理设置三相电源、整流器模块、触发控制和测量模块,实现了输出电压和电流波形的仿真观测。文章还提供了优化建议,如添加滤波器、实时控制等改进方向,为电力电子变换器的仿真研究和性能优化提供了实用指导。

amy_mhd的博客 140

人工神经网络研究的发展及特性,以前不叫人工智能

https://www.toutiao.com/a6644776351553290755/   2019-01-10 16:05:54 人工神经网络研究的先锋麦卡洛克和皮茨曾于1943年提出一种叫做“似脑机器(mindlike machine)”的思想,这种机器可由基于生物神经元特性的互连模型来制造,这就是神经学网络的概念。他们构造了一个表示大脑基本组成部分的神经元模型,对逻辑操作系统表现出...

喜欢打酱油的老鸟 1154

【JTAG】1500协议详解

随着集成电路的规模不断扩大,1149.1的板级测试无法满足要求越来越高的芯片测试需求。芯片规模变大后,测试需求不在是一次测试整片芯片,而是芯片分为好几个区域去测试,而1500协议正是对1149.1在该方面的一个补充即1149.1主要测试板级间的互连,而1500用来测试芯片内不同core之间的互连。IEEEStd1500已经为包含不同模块的集成电路(ICs)开发了一种可测试性设计标准方法。............

xuhe0206的博客 7032

dolphinscheduler-3.4.0

dolphinscheduler集群部署

docsz的博客 660

突破训练瓶颈:MosaicML Streaming高效数据混洗机制全解析

你是否在分布式训练中遭遇过数据混洗质量与吞吐量的两难困境?当训练数据量从百万级飙升至数十亿级,传统数据加载方案要么因混洗不足导致模型收敛困难,要么因过度混洗造成网络带宽瓶颈。MosaicML Streaming作为专为神经网络训练优化的数据流处理库,通过创新的混洗算法实现了"鱼与熊掌兼得"——在保持95%+吞吐量的同时,提供接近完美的混洗质量。本文将深入剖析Streaming的5大核心混洗参数、4

gitblog_01067的博客 648

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Matlab中newff函数实战:从参数解析到BP神经网络高效训练

本文详细解析了Matlab中newff函数在构建和训练BP神经网络时的核心参数与实战技巧。文章从数据准备、网络结构设计、激活函数选择到高效的trainlm训练算法,提供了从入门到进阶的完整指南,并通过拟合正弦函数的实例演示了如何避免常见错误,实现神经网络的快速搭建与高效训练。

julia4scientist的博客 820

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

计算机控制技术及应用

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

Norse性能优化指南:如何提升脉冲神经网络训练效率50%

脉冲神经网络(Spiking Neural Networks, SNN)作为第三代神经网络,以其生物启发特性和事件驱动计算优势,在神经形态计算和边缘AI领域展现出巨大潜力。Norse是一个基于PyTorch的脉冲神经网络深度学习库,专为高效训练和部署SNN而设计。本文将为您揭示如何通过Norse的优化技巧,将脉冲神经网络训练效率提升50%以上,让您充分利用这一前沿技术。 ## 🔥 为什么选择N

gitblog_00179的博客 320

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

上一篇: HIVE 中内连接(JOIN ON) 与 LEFT SEMI JOIN 分析
下一篇: 特征工程分析
Shadow_mi
博客等级 码龄10年 12粉丝 27原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值