训练神经网络的五大算法

article/2025/10/6 6:40:51

原文: 5 algorithms to train a neural network
作者: Alberto Quesada 译者: KK4SBB
责编:何永灿,关注人工智能,投稿请联系 heyc@csdn.net 或微信号 289416419

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

问题的抽象

人们把神经网络的学习过程转化为求损失函数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·JiiI)-1·(2 JiT·ei), i=0,1,…

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

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

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

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

内存使用和速度的比较

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

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


想了解人工智能背后的那些人、技术和故事,欢迎关注人工智能头条:
图片描述


http://chatgpt.dhexx.cn/article/gWFVQiy2.shtml

相关文章

论文阅读2--《融合多因素的短时交通流预测研究》

1.问题的提出 现有的交通流预测研究大多为常态下的预测,而未考虑天气、节假日等外部因素的影响。 2.交通流预测相关工作 (1)传统的短时交通流研究方法: 卡尔曼滤波模型、历史平均模型、时间序列模型、非参数回归模型、混沌理论…

用于交通流预测的时间多图卷积网络

为了联合建模道路网络中各种全局特征的空间、时间和语义关联,本文提出了一种用于交通流预测的深度学习框架T-MGCN(时态多图卷积网络)。首先,我们识别了几种语义关联,并将道路之间的非欧几里德空间关联和异构语义关联编…

交通流分析1:《基于大数据的城市公路交通流短时预测研究_张红》阅读总结

大概读了一下,第6节小波分析那里实在没有看懂。 如果有理解不对的地方欢迎批评指正。 建模方法 这篇论文选用的是时间序列模型和小波理论,小波理论那里我实在没看懂,说说他基于时间序列模型的组合建模方法,这是选择时间序列模型的…

matlab中的AR模型短时预测交通流

1、内容简介 略 438-可以交流、咨询、答疑 2、内容说明 智能交通系统的宗旨,就是利用丰富的交通检测数据,对未来的交通流状态进行预测,对于最大效率的利用快速路资源,减少出行者时间,减少快速路交通拥挤与交通事故。短时交通流预测是道路交通控制系统、交通流诱导系统等领域…

交通流预测爬坑记(三):使用pytorch实现LSTM预测交通流

很长时间没有更新内容了,上一篇可以看做是刚接触深度学习写的,看法非常狭隘,内容非常粗糙。 在最近的学习中接触到了Pytorch,不得不承认,相对于TensorFlow来讲,灵活很多。 这次就使用pytroch来进行一下交通…

Python交通流仿真【含源码】

虽然交通并不总是畅通无阻,但汽车无缝穿越交叉路口,在交通信号灯处转弯和停车看起来相当壮观。这种沉思让我思考交通流对人类文明的重要性。 在此之后,内心的书呆子特质让我忍不住思考一种模拟交通流的方法。我在一个涉及交通流量的本科项目…

基于深度学习的短时交通流预测与优化

TOC 第二章 数据预处理与短时交通流量特性分析 2.1 数据来源 数据记录了明尼苏达州双子城19条高速环城公路一整年的交通流量,交通流量数据采样间隔为30秒(采用2018年6月1日至8月31日期间,采集间隔为5分钟,选取公路上的5个车辆检测站点的交…

基于Spatial-Temporal Transformer的城市交通流预测

文章信息 本周阅读的论文是题目为《Spatial-Temporal Transformer Networks for Traffic Flow Forecasting》的一篇2021年发布在arXiv网站上的使用时空Transformer网络(STTNs)预测交通流的文章。 摘要 交通预测已成为智能交通系统的核心组成部分。然而&a…

基于推特数据挖掘交通事件的城市交通流深度学习预测模型

文章信息 本周阅读的论文是题目为《A deep-learning model for urban traffic flow prediction with traffic events mined from twitter》的一篇2021年发表在《World Wide Web》涉及交通事故下的城市交通客流预测的文章。 摘要 短期交通预测是现代城市交通管理和控制系统的关键…

交通流优化:一种强化学习方法

1. 文章信息 《Traffic flow optimization: A reinforcement learning approach》是2016年发表在Engineering Applications of Artificial Intelligence的一篇文章。 2. 摘要 交通拥堵会导致诸如延误、燃油消耗增加和额外污染等重要问题。本文提出了一种新的基于强化学习的交通…

SUMO交通流仿真实战

理解、预测并最终减少城市路网中的交通拥堵是一个复杂的问题。即使了解最简单的单车道情况下出现的交通拥堵, 也是具有挑战性的。SUMO是一个开源平台,可模拟复杂环境中的交通流。在这个教程里,我们将学习如何从零创建复杂的交通流模拟&#x…

python交通流预测算法_一种高速公路交通流预测方法与流程

本发明涉及智能交通领域,更具体地,涉及一种高速公路交通流预测方法。 背景技术: 随着社会经济的不断增长,国内汽车的拥有量越来越多,高速公路车流量急剧上升,从而导致高速公路上车辆拥堵愈发严重。现有方法采用径向基函数神经网络训练网络参数的算法,在粗略搜索过程中容…

交通流特征工程小技巧与思考

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、交通流是什么?二、特征工程是什么?三、处理数据时的一些小技巧四、一些常用的机器学习python库总结 前言 小编最近参与了一些工程方…

初等模型---交通流和道路通行能力

交通流的基本参数及其特性 为明确和简单起见,这里的交通流均指由标准长度的小型汽车在单方向的。 道路上行驶而形成的车流,没有外界因素如岔路、信号灯等的影响。 借用物理学的概念,将交通流近似看作一辆辆汽车组成的连续的流体,可以 用流量、…

交通流理论 第一章 绪论

第一章 绪论 1.1 交通流理论研究的内容和意义 交通流理论是运用物理学和数学的定律描述交通特性的交通工程学基础理论之一;道路设施可以分为两类:连续流和间断流设施。连续流设施为机动车流提供了相对连续的运行环境,几乎没有强制性阻断干扰…

数学小游戏:原创字谜几则

昨天晚上躺在床上发呆,想了几则数学字谜。下面每个式子都对应一个英文单词,例如的意思就是tank。 你能猜出多少个来呢? 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.

纵横字谜的答案

1.问题描述 输入一个r行c列(1<r,c<10)的网格&#xff0c;黑格用”*”表示&#xff0c;每个白格都填有一个字母&#xff0c;如果一个白格的左边相邻的位置或者边上相邻的位置没有白格&#xff08;可能是黑格&#xff0c;也可能除了网格边界&#xff09;&#xff0c; 则称…

猜字谜 C++

解析&#xff1a; 1.由于五位数*一位数等于六位数 而且万位等于第二位数各位所以A>3 2.D为1-9 3.整式变形为 DDDDDD/AABCAB 我们需判断一个每位数都一样的六位数除以一个3-9中的某个数A 结果需满足 万位等于十位等于A 千位等于个位 且没有余数 answer: #include<iostr…

猜字小游戏

文章目录 猜字小游戏猜字游戏升级版 猜字小游戏 编写程序 运行程序 猜字游戏升级版 编写程序 运行程序