神经网络算法性能分析

简介: 训练神经网络的算法有成千上万个,最常用的有哪些,哪一个又最好?作者在本文中介绍了常见的五个算法,并从内存和速度上对它们进行对比。最后,他最推荐莱文贝格-马夸特算法。

训练神经网络的算法有成千上万个,最常用的有哪些,哪一个又最好?作者在本文中介绍了常见的五个算法,并从内存和速度上对它们进行对比。最后,他最推荐莱文贝格-马夸特算法。
  用于神经网络中执行学习过程的程序被称为训练算法。训练算法有很多,各具不同的特征和性能。
  问题界定
  神经网络中的学习问题是以损失函数f的最小化界定的。这个函数一般由一个误差项和一个正则项组成。误差项评估神经网络如何拟合数据集,正则项用于通过控制神经网络的有效复杂性来防止过拟合。
  损失函数取决于神经网络中的自适应参数(偏差和突触权值)。我们可以简便地把它们组合成单个n维权值向量w。下图表示损失函数f(w)
  


  如上图所示,点w 是该损失函数的最小值。在任何点A,我们可以计算损失函数的一阶和二阶导数。一阶导数用梯度向量组成,可以写成:
  ?if(w) = df/dwi(i = 1,...,n)
  类似地,损失函数的二阶导数可以用Hessian矩阵,写成:
  Hi,jf(w) = d2f/dwi·dwj(i,j = 1,...,n)
  许多连续和可微函数的最小化问题已经有许多研究。这些问题的常规方法可直接适用于训练神经网络。
  一维优化方法
  虽然损失函数取决于许多参数,一维优化方法在这里非常重要。实际上,一维优化方法经常用于神经网络的训练过程。
  许多训练算法先计算训练方向d,然后计算使该方向上的损失最小的训练速率η,写作f(n)。下图描述了一维损失函数:
  

  点η1和η2定义包含f(n)的最小值η
的间隔。这里,一维优化方法搜索给定的一维函数的最小值。广泛使用的算法有黄金分割法和布伦特法。
  多维优化方法
  神经网络的学习问题被界定为搜索使损失函数f得到最小值的参数向量w*。如果神经网络的损失函数已经取得最小值,则梯度是零向量。
  一般来说,损失函数是参数的非线性函数。因此,不可能找到最小值的封闭训练算法。反之,我们考虑通过在一系列步骤组成的参数空间中搜寻最小值。每一步中,损失会随着神经网络参数的调整而减少。
  这样,我们从一些参数向量(通常随机选择)着手训练神经网络。然后,我们会生成一系列参数,使得损失函数在算法的每次迭代中减小损失值。两次迭代间的损失值变化称为损失减量。当满足特定条件或到达停止标准使,训练算法停止。
  接下来将介绍训练神经网络的五种最重要的算法。
  

  1. 梯度下降法(Gradient descent)
  梯度下降法,又称最速下降法,是最简单的训练算法。它需要来自梯度向量的信息,因此它是一阶方法。
  设f(wi) = fi,?f(wi) = gi。该方法从点w0开始,在训练方向di = -gi上从wi移动到wi+1,直到满足停止标准。因此,梯度下降法按照以下公式迭代:
  wi+1= wi- di·ηi, i=0,1,...
  参数η是训练速率。该值可以设置为固定值,或者在沿训练方向的每一步一维优化中找到。训练速率的最佳值通常可通过每个连续步骤的线性最小化得到。然而,仍然有许多软件工具只使用固定值的训练速率。
  下图描绘了梯度下降法的训练过程。可以看到,参数向量通过两个步骤提升:首先,计算梯度下降训练方向; 然后,找到合适的训练速率。
  

  梯度下降训练算法的严重缺点是需要对具有长而窄的山谷结构的函数进行许多次迭代。实际上,下坡梯度是损失函数下降最快的方向,但不一定能产生最快的收敛性。下图说明了这个问题。
  

  当神经网络非常大、参数非常多时,梯度下降法是推荐的算法。因为该方法仅存储梯度向量(大小是n),而不存储Hessian矩阵(大小是n2)。
  2. 牛顿法(Newton's method)
  牛顿法是一种二阶算法,因为它使用了Hessian矩阵。这种方法的目的是通过使用损失函数的二阶导数找到更好的训练方向。
  设f(wi) = fi,?f(wi) = gi,同时Hf(wi)= Hi。使用泰勒级数得到f在w0上的二次近似值:
  f = f0+ g0· (w - w0) + 0.5 · (w - w0)2· H0
  H0是在点w0处估计的f的Hessian矩阵。通过对f(w)的最小值设置g=0,得到下一个等式:
  g = g0+ H0· (w - w0) = 0
  这样,从参数向量w0开始,牛顿法按照下面的公式迭代:
  wi+1= wi- Hi-1·gi, i=0,1,...
  矢量Hi-1·gi被称为牛顿步。需要注意的是,这些参数的变化可能朝向最大值而不是最小值移动。如果Hessian矩阵不是正定的,就会发生这种情况。因此,不能保证每次迭代都减小函数值。为了避免这种麻烦,牛顿法的方程式通常修改为:
  wi+1= wi- (Hi-1·gi)·ηi, i=0,1,...
  训练速率η可以设置为固定值或通过线性最小化找到。向量d = Hi-1·gi现在称为牛顿训练方向。
  牛顿法的训练过程如下图所示,先是得到牛顿训练方向,然后得到合适的训练速率来执行参数的改进。
  

  下图描述了这种方法的性能。可以看到,牛顿法需要的梯度下降步骤比寻找损失函数的最小值所需的步骤更少。
  

  但是,牛顿法的缺点在于,它对Hessian矩阵及其逆矩阵的精确估计在计算层面上是相当昂贵的。
  3. 共轭梯度法(Conjugate gradient)
  共轭梯度法可以被认为是介于梯度下降和牛顿法之间的方法。它能加快梯度下降法典型的慢收敛,同时避免了牛顿法对Hessian矩阵的评估、存储和反转所需的信息。
  在共轭梯度训练算法中,搜索沿着共轭方向执行,通常能比梯度下降方向产生更快的收敛。这些训练方向与Hessian矩阵相关。
  用d表示训练方向向量。然后,从初始参数向量w0和初始训练方向向量d0 = -g0开始,共轭梯度法构造训练方向的序列可表示为:
  di+1= gi+1+ di·γi, i=0,1,...
  这里γ称为共轭参数,有不同的计算方法。其中两种最常用的方法是Fletcher–Reeves和Polak–Ribière。对于所有共轭梯度算法,训练方向周期性地重置为梯度的负值。
  然后,参数根据以下等式改进,训练速率η通常通过线性最小化得到:
  wi+1= wi+ di·ηi, i=0,1,...
  下图描述了使用共轭梯度法的训练过程。如图所示,参数的改进步骤是先计算共轭梯度训练方向,然后计算该方向上的合适训练速率。
  
  这种方法已经证明比梯度下降法在训练神经网络方面更有效。因为它不需要Hessian矩阵,所以当神经网络非常大时,也建议使用共轭梯度法。
  4. 拟牛顿法(Quasi-Newton method)
  牛顿法在计算上是相当昂贵的,因为它需要许多操作来评估Hessian矩阵并计算其逆矩阵。为了解决这个缺点,出现了被称为拟牛顿法或可变矩阵法的替代方法。这种方法在算法的每次迭代中建立并逼近Hessian逆矩阵,而不是直接计算Hessian矩阵,然后评估其逆矩阵。该近似值仅使用损失函数的一阶导数的信息来计算。
  Hessian矩阵由损失函数的二阶偏导数组成。拟牛顿法背后的主要思想是仅使用损失函数的一阶偏导数,通过另一矩阵G得到近似Hessian矩阵的逆。拟牛顿法的公式可表示为:
  wi+1= wi- (Gi·gi)·ηi, i=0,1,...
  训练速率η可以设置为固定值或通过线性最小化得到。最常用的两个公式是Davidon-Fletcher-Powell公式(DFP)和Broyden-Fletcher-Goldfarb-Shanno公式(BFGS)。
  拟牛顿法的训练过程如下图所示。先得到拟牛顿训练方向,然后找到满意的训练速率来执行参数的改进。
  

  这是在大多数情况下使用的默认方法:它比梯度下降法和共轭梯度法更快,并且不需要精确计算和反转Hessian矩阵。
  5. Levenberg-Marquardt algorithm(莱文贝格-马夸特算法)
  Levenberg-Marquardt算法,又称阻尼最小二乘法,被设计为采用误差平方和形式的损失函数特定的算法。它不需精确计算Hessian矩阵,适用于梯度向量和Jacobian矩阵。
  下图是使用Levenberg-Marquardt算法的神经网络训练过程。第一步是计算损失值、梯度和Hessian逼近,然后调整阻尼参数,以减少每次迭代的损失。
  

  Levenberg-Marquardt算法是针对误差平方和型函数的特定方法。这使它在训练神经网络中测量这种误差时非常快。但是,该算法也有一些缺点。缺点之一是它不能应用于诸如均方根误差或交叉熵误差函数。此外,它与正则项不兼容。最后,对于非常大的数据集和神经网络,Jacobian矩阵会变得非常大,因此需要的内存也非常大。因此,当数据集和/或神经网络非常大时,不推荐使用Levenberg-Marquardt算法。
  内存和速度比较
  下图比较了本文中讨论的训练算法的计算速度和存储要求。可以看到,最慢的训练算法是梯度下降法,但它需要的内存最小。相反,最快的是Levenberg-Marquardt算法,但需要的内存也最大。比较好的折衷可能是拟牛顿法。
  

  总而言之,如果我们的神经网络有成千上万的参数,我们可以使用梯度下降法或共轭梯度法,以节省内存。如果我们要训练的神经网络只有几千个样本和几百个参数,最好的选择可能是Levenberg-Marquardt算法。其余情况下,可以选择拟牛顿法。

目录
相关文章
|
8天前
|
机器学习/深度学习 人工智能 算法
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
眼疾识别系统,本系统使用Python作为主要开发语言,基于TensorFlow搭建卷积神经网络算法,并收集了4种常见的眼疾图像数据集(白内障、糖尿病性视网膜病变、青光眼和正常眼睛) 再使用通过搭建的算法模型对数据集进行训练得到一个识别精度较高的模型,然后保存为为本地h5格式文件。最后使用Django框架搭建了一个Web网页平台可视化操作界面,实现用户上传一张眼疾图片识别其名称。
26 4
基于Python深度学习的眼疾识别系统实现~人工智能+卷积网络算法
|
21天前
|
机器学习/深度学习 算法
基于改进遗传优化的BP神经网络金融序列预测算法matlab仿真
本项目基于改进遗传优化的BP神经网络进行金融序列预测,使用MATLAB2022A实现。通过对比BP神经网络、遗传优化BP神经网络及改进遗传优化BP神经网络,展示了三者的误差和预测曲线差异。核心程序结合遗传算法(GA)与BP神经网络,利用GA优化BP网络的初始权重和阈值,提高预测精度。GA通过选择、交叉、变异操作迭代优化,防止局部收敛,增强模型对金融市场复杂性和不确定性的适应能力。
156 80
|
9天前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a实现时间序列预测,采用CNN-GRU-SAM网络结构。卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征。完整代码含中文注释和操作视频,运行效果无水印展示。算法通过数据归一化、种群初始化、适应度计算、个体更新等步骤优化网络参数,最终输出预测结果。适用于金融市场、气象预报等领域。
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
|
8天前
|
存储 监控 算法
局域网网络管控里 Node.js 红黑树算法的绝妙运用
在数字化办公中,局域网网络管控至关重要。红黑树作为一种自平衡二叉搜索树,凭借其高效的数据管理和平衡机制,在局域网设备状态管理中大放异彩。通过Node.js实现红黑树算法,可快速插入、查找和更新设备信息(如IP地址、带宽等),确保网络管理员实时监控和优化网络资源,提升局域网的稳定性和安全性。未来,随着技术融合,红黑树将在网络管控中持续进化,助力构建高效、安全的局域网络生态。
27 9
|
14天前
|
机器学习/深度学习 算法
基于遗传优化的双BP神经网络金融序列预测算法matlab仿真
本项目基于遗传优化的双BP神经网络实现金融序列预测,使用MATLAB2022A进行仿真。算法通过两个初始学习率不同的BP神经网络(e1, e2)协同工作,结合遗传算法优化,提高预测精度。实验展示了三个算法的误差对比结果,验证了该方法的有效性。
|
17天前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-GRU-SAM网络在时间序列预测中的应用。算法通过卷积层、GRU层、自注意力机制层提取特征,结合粒子群优化提升预测准确性。完整程序运行效果无水印,提供Matlab2022a版本代码,含详细中文注释和操作视频。适用于金融市场、气象预报等领域,有效处理非线性数据,提高预测稳定性和效率。
|
15天前
|
算法 网络协议 Python
探秘Win11共享文件夹之Python网络通信算法实现
本文探讨了Win11共享文件夹背后的网络通信算法,重点介绍基于TCP的文件传输机制,并提供Python代码示例。Win11共享文件夹利用SMB协议实现局域网内的文件共享,通过TCP协议确保文件传输的完整性和可靠性。服务器端监听客户端连接请求,接收文件请求并分块发送文件内容;客户端则连接服务器、接收数据并保存为本地文件。文中通过Python代码详细展示了这一过程,帮助读者理解并优化文件共享系统。
|
11天前
|
传感器 算法
基于GA遗传优化的WSN网络最优节点部署算法matlab仿真
本项目基于遗传算法(GA)优化无线传感器网络(WSN)的节点部署,旨在通过最少的节点数量实现最大覆盖。使用MATLAB2022A进行仿真,展示了不同初始节点数量(15、25、40)下的优化结果。核心程序实现了最佳解获取、节点部署绘制及适应度变化曲线展示。遗传算法通过初始化、选择、交叉和变异步骤,逐步优化节点位置配置,最终达到最优覆盖率。
|
8天前
|
算法 数据安全/隐私保护
室内障碍物射线追踪算法matlab模拟仿真
### 简介 本项目展示了室内障碍物射线追踪算法在无线通信中的应用。通过Matlab 2022a实现,包含完整程序运行效果(无水印),支持增加发射点和室内墙壁设置。核心代码配有详细中文注释及操作视频。该算法基于几何光学原理,模拟信号在复杂室内环境中的传播路径与强度,涵盖场景建模、射线发射、传播及接收点场强计算等步骤,为无线网络规划提供重要依据。
|
9天前
|
算法
基于龙格库塔算法的锅炉单相受热管建模与matlab数值仿真
本设计基于龙格库塔算法对锅炉单相受热管进行建模与MATLAB数值仿真,简化为喷水减温器和末级过热器组合,考虑均匀传热及静态烟气处理。使用MATLAB2022A版本运行,展示自编与内置四阶龙格库塔法的精度对比及误差分析。模型涉及热传递和流体动力学原理,适用于优化锅炉效率。