神经网络——优化算法

神经网络——优化算法

课程:人工智能的数学思维

Author:RedamancyXun



基本介绍

Reference:一文概览神经网络优化算法

优化算法是一类数学方法和技术,用于寻找在给定约束条件下使目标函数取得最优值的参数或变量。在机器学习、数据挖掘、工程优化等领域中,优化算法被广泛应用于解决各种问题。

优化算法的目标通常是最小化最大化一个被称为目标函数或者代价函数的数学表达式。这个函数通常描述了一个系统的性能或者误差,例如机器学习中的损失函数或者工程中的成本函数。优化算法通过不断地调整参数或变量的取值,使得目标函数达到最小值或最大值

而对于我们这里即将介绍的神经网络中的优化算法,我们知道机器学习的优化(目标),简单来说是:搜索模型的一组参数 w,它能显著地降低代价函数J(w),该代价函数通常包括整个训练集上的性能评估(经验风险)和额外的正则化(结构风险)。与传统优化不同,它不是简单地根据数据的求解最优解,在大多数机器学习问题中,我们关注的是测试集(未知数据)上性能度量P的优化。

  • 对于模型测试集是未知,我们只能通过优化训练集的性能度量P_train,在独立同分布基础假设下,期望测试集也有较好的性能(泛化效果),这意味并不是一味追求训练集的最优解。
  • 另外,有些情况性能度量P(比如分类误差f1-score)并不能高效地优化,在这种情况下,我们通常会优化替代损失函数 (surrogate loss function)。例如,负对数似然通常用作 0 − 1 分类损失的替代。

当我们机器学习的学习目标是极大化降低(经验)损失函数,这点和传统的优化是比较相似的,那么如何实现这个目标呢?我们第一反应可能是直接求解损失函数最小值的公式/解析解(如最小二乘法),获得最优的模型参数。但是,通常机器学习模型的损失函数较复杂,很难直接求最优解。幸运的是,我们还可以通过优化算法(如遗传算法、梯度下降算法、牛顿法等)有限次迭代优化模型参数,以尽可能降低损失函数的值,得到较优的参数值(数值解)。上述去搜索一组最/较优参数解w所使用的算法,即是优化算法。

优化算法可以分为很多种类,包括梯度下降法、拟牛顿法、随机梯度下降法、遗传算法、模拟退火算法等。每种算法都有其特定的优势和适用场景,例如梯度下降法适用于光滑的目标函数,而遗传算法则适用于解决复杂的搜索空间问题。

总的来说,优化算法是解决各种问题的重要工具,在科学研究和工程实践中发挥着重要作用。通过不断地改进和发展优化算法,可以提高系统的性能和效率,推动科学技术的进步。

在这里插入图片描述


历史背景

机器学习优化算法的历史可以追溯到上个世纪中叶,随着计算机科学和人工智能的发展,人们开始探索如何利用计算机来解决各种问题,其中优化算法在机器学习领域尤为重要。以下是一些历史背景、产生原因以及重要人物、里程碑事件等的概述:

历史背景和产生原因:

  1. 计算机科学的发展:随着计算机硬件和软件技术的进步,人们开始关注如何利用计算机解决复杂的优化问题,其中包括在机器学习中的参数优化、模型构建等任务。
  2. 人工智能的兴起:上个世纪中叶,人工智能领域开始兴起,研究者们开始探索如何使计算机具有类似人类的智能,其中包括机器学习和优化算法的研究。
  3. 实际应用需求:随着数据量的不断增加和计算能力的提升,许多实际问题需要更高效、更精确的优化算法来解决,这促使了优化算法在机器学习中的发展和应用。

重要人物和里程碑事件:

  1. 艾伦·图灵(Alan Turing):图灵是计算机科学和人工智能领域的先驱之一,他的工作为机器学习和优化算法的发展奠定了基础。
  2. 赫伯特·西蒙(Herbert A. Simon):西蒙是计算机科学和认知心理学的杰出学者,他的研究涉及人工智能、机器学习和决策理论,对优化算法的发展产生了重要影响。
  3. 线性规划的发展:线性规划是优化领域的重要分支之一,1940年代至1950年代,乔治·丹齐格(George Dantzig)等人的工作奠定了线性规划的理论基础,为后续优化算法的发展提供了范例。
  4. 进化算法的提出:20世纪60年代至70年代,约翰·霍兰德(John Holland)等研究者提出了进化算法的概念,为后来遗传算法等优化算法的发展奠定了基础。
  5. 神经网络的复兴:20世纪80年代至90年代,神经网络领域经历了一次复兴,反向传播算法等优化算法的提出和应用推动了神经网络在机器学习中的发展。
  6. 遗传算法的兴起:20世纪70年代至80年代,约翰·霍兰德等人提出了遗传算法的概念,并在后续的研究中逐渐发展成熟,成为机器学习优化算法中的重要分支之一。
  7. 支持向量机(SVM)的提出:1990年代,Vladimir Vapnik等人提出了支持向量机(SVM)算法,将优化理论与机器学习相结合,成为机器学习领域的重要突破。
  8. 深度学习的崛起:21世纪初,随着大数据和计算能力的不断增强,深度学习成为机器学习的热点领域,优化算法的进步推动了深度学习模型的训练和优化。

这些重要人物和里程碑事件共同推动了机器学习优化算法的发展,使其在理论和应用上取得了长足的进步,并为人工智能的发展做出了重要贡献。

早期优化算法的发展:

  1. 线性规划的奠基
    • 20世纪中叶,乔治·丹齐格等人的工作奠定了线性规划的理论基础。线性规划是一种在给定约束条件下寻找最优解的数学方法,为后续优化算法的发展提供了重要范例。
  2. 进化算法的概念提出
    • 1960年代至1970年代,约翰·霍兰德等研究者提出了进化算法的概念,试图模拟生物进化过程来解决优化问题。进化算法的出现为后来的遗传算法等算法奠定了基础。

神经网络的复兴和优化算法的应用:

  1. 神经网络的复兴
    • 20世纪80年代至90年代,神经网络领域经历了一次复兴,反向传播算法等优化算法的提出和应用推动了神经网络在机器学习中的发展。
  2. 优化算法在神经网络中的应用
    • 优化算法在训练神经网络中发挥着关键作用,例如反向传播算法通过优化损失函数来更新神经网络的参数,使其逐步逼近最优解。

深度学习时代的到来:

  1. 大数据和计算能力的提升
    • 21世纪初,随着大数据的涌现和计算能力的提升,深度学习成为机器学习的热点领域,对优化算法提出了更高的要求。
  2. 优化算法在深度学习中的角色
    • 随着深度学习模型的复杂性增加,优化算法也在不断演进,包括随机梯度下降(SGD)的改进、自适应学习率算法的提出等,以应对深度学习模型训练中的挑战。
  3. 深度学习优化算法的发展
    • 随着深度学习的发展,出现了各种针对深度神经网络训练的优化算法,如动量法、Adam优化算法等。这些算法在加速模型收敛、处理非凸优化问题等方面发挥了重要作用。

持续的研究和创新:

  1. 优化算法的研究方向
    • 当前,优化算法的研究仍然是机器学习领域的热点之一,研究者们不断提出新的算法和优化技术,以解决在实际应用中遇到的挑战,如局部最优解、收敛速度、泛化能力等问题。
  2. 交叉学科的融合
    • 优化算法的发展也受益于不同学科的交叉融合,如数学、计算机科学、统计学等领域的知识相互渗透,推动了优化算法的创新和发展。
  3. 开放源代码和开放数据集的贡献
    • 开放源代码的优化算法库和开放数据集为研究者和开发者提供了丰富的资源,促进了优化算法的广泛应用和实践。

这些里程碑事件和重要人物共同构成了机器学习优化算法发展的历史,推动了该领域的不断进步与创新。总的来说,机器学习优化算法的发展历程是一个不断演进和创新的过程,受到多个学科和领域的影响,同时也为人工智能和机器学习的发展做出了重要贡献。


算法及其数学思维

Reference 1:【机器学习】优化算法_机器学习优化算法

Reference 2:一文概览神经网络优化算法

Reference 3:深度学习中的优化算法研究——陈 爽、张长伦、黎铭亮

Reference 4:【中英字幕】吴恩达机器学习系列课程

Reference 5:最优化–梯度下降法–牛顿法(详解)

深度学习作为处理神经网络的一个热门研究方向,在近些年来备受关注。深度学习模型是一个多层次的网络结构,评价模型最终效果优劣的网络参数必须通过深度学习优化器进行训练,因此深度学习中的优化算法成为了国内外的研究热点。本部分对深度学习中的优化算法进行综述

一、梯度下降算法(GD)

优化算法主要分为一阶算法和二阶算法:一阶算法基于梯度下降法,是目前深度学习理论和实际应用中的主导优化方法;二阶算法有牛顿法和共轭梯度法等,由于二阶优化算法需要进行二阶求导,受限于计算量与内存成本,很少应用在深度学习的各项任务中。

**梯度下降法(Gradient Descent)**最初是最优化理论中的基础方法,常常用于求解无约束最优化问题, 广泛应用于目标追踪、工程设计和产品优化等方面,后来拓展到机器学习和深度学习领域中。

深度学习网络模型训练的目标是最小化损失函数,即尽可能降低目标真实值和模型预测值之间的差距,如果将损失函数看作目标函数,那么任务目标等价于求解一个最优化问题。梯度下降法正是一个可以找到最小损失函数值的优化算法,它首先利用所定义的损失函数来计算当前参数值的损失,然后计算网络中每个参数的梯度,并且在梯度的相反方向上通过与梯度成比例的因子更新参数值,重复上述步骤直到符合需要。

梯度下降算法可以直观理解成一个下山的方法,将损失函数J(w)比喻成一座山,我们的目标是到达这座山的山脚(即求解出最优模型参数w使得损失函数为最小值)。

在这里插入图片描述

下山要做的无非就是“往下坡的方向走,走一步算一步”,而在损失函数这座山上,每一位置的下坡的方向也就是它的负梯度方向(直白点,也就是山的斜向下的方向)。在每往下走到一个位置的时候,求解当前位置的梯度,向这一步所在位置沿着最陡峭最易下山的位置再走一步。这样一步步地走下去,一直走到觉得我们已经到了山脚。 当然这样走下去,有可能我们不是走到山脚(全局最优,Global cost minimun),而是到了某一个的小山谷(局部最优,Local cost minimun),这也后面梯度下降算法的可进一步调优的地方。

具体算法如下:

在这里插入图片描述

视频学习:

梯度下降是一个大类,常见的梯度下降算法及优缺点,如下图:

在这里插入图片描述

  • 1.1 随机梯度下降(SGD)

    为了寻找最优参数,大部分深度学习神经网络中采取的最基本方法是随机梯度下降法(SGD) 。根据参数更新时实际学习率是否固定为常数,可以将SGD算法大体分为两类:第一类是随机梯度下降及其动量变体算法,第二类是自适应学习率算法

    对于深度学习而言,SGD其实就是基于小批量(mini-batch)的随机梯度下降,当batchsize为1也就是在线学习优化。随机梯度下降可能每次不是朝着真正最小的方向,这样反而可以跳出局部的最优解

    随机梯度下降(SGD)与梯度下降(GD)的关系可以这样理解:随机梯度下降方法以损失很小的一部分精确度和增加一定数量的迭代次数为代价,换取了总体的优化效率的提升。增加的迭代次数远远小于样本的数量。

    由此可见,mini-batchbatchsize的选择也就极为重要,尽可能在**内存效率(时间)内存容量(空间)**之间寻找最佳平衡。

    • 较大的batchsize会使得训练更快,但可能导致泛化能力下降,计算梯度估计的更精确,使其拥有更小的梯度噪声,不足以将参数带出一个尖锐极小值的吸引区域
    • 较小的batchsize可以提供类似正则化效果的梯度噪声,有更好的泛化能力,但对于多核架构来讲,太小的batch并不会相应地减少计算时间(考虑到多核之间的同步开销),同时带来的极大的梯度估计值方差,导致其需要非常小的学习速率以维持稳定性。

    在这里插入图片描述

    具体的算法为:

    在这里插入图片描述

  • 1.2 动量优化算法

    随机梯度下降法四个主要缺点:高度敏感于参数空间的某些方向、目标损失函数中局部最小值或鞍点会将卡住参数更新、产生随机噪声扰动、每个参数采取相同的学习率超参数进行更新… …为改进随机梯度下降法的几个缺陷,设计更适合神经网络的优化方法,研究人员陆续提出了几种SGD变体动量优化算法是SGD的一个广泛使用的拓展。

    动量优化方法引入物理学中的动量思想,加速梯度下降,有MomentumNesterov两种算法。当我们将一个小球从山上滚下来,没有阻力时,它的动量会越来越大,但是如果遇到了阻力,速度就会变小,动量优化法就是借鉴此思想,使得梯度方向在不变的维度上,参数更新变快,梯度有所改变时,更新参数变慢,这样就能够加快收敛并且减少动荡。动量优化算法将动量定义为梯度的指数移动平均值(EMA),引入动量超参数β用于调节先前梯度的衰减效果,相对于学习率超参数,动量超参数越大,历史梯度对当前方向的影响也越大。

    • 1.2.1 Momentum(SGDM)

      具有动量的随机梯度下降法(SGD with Momentum,SGDM)是最早提出并且流行的将动量融入SGD中的里程碑式算法。

      Momentum算法思想:参数更新时在一定程度上保留之前更新的方向,同时又利用当前batch的梯度微调最终的更新方向,简言之就是通过积累之前的动量来加速当前的梯度。将某一时刻的实际采用的梯度称为 M n Mn Mn

      1. 在没有动量的情况下,某一时刻的梯度就是损失函数对 W W W求导的值 d W dW dW,即:
        M n = d W n Mn = dWn Mn=dWn
        然后权重更新的公式是非常标准的:

        在这里插入图片描述

      2. 引入动量后,实际的梯度 M n Mn Mn仅与此时刻的计算梯度 d W n dWn dWn有关,还与上一时刻的实际梯度 M n − 1 Mn-1 Mn1有关,根据指数加权平均计算公式 M n Mn Mn等于:

        在这里插入图片描述

        但是在实际中,为了简便计算, M n Mn Mn直接由下式计算,即学习率乘以当前计算梯度 d W n dWn dWn,加上前一次的实际梯度 M n − 1 Mn-1 Mn1 μ μ μ表示动量因子,通常取值0.9。即可以理解为,在当前梯度 d W n dWn dWn的基础上增加上一次的实际梯度 M n − 1 Mn-1 Mn1

        在这里插入图片描述

        之后有:

        在这里插入图片描述

      在梯度方向改变时,Momentum能够降低参数更新速度,从而减少震荡;在梯度方向相同时,Momentum可以加速参数更新, 从而加速收敛。总而言之,Momentum能够加速SGD收敛,抑制震荡

      形象图示:

      在这里插入图片描述

      动量方法解决了SGD中梯度敏感于参数空间某些方向和易陷入局部最小值或鞍点的问题,并且加快了参数的学习和收敛

      在这里插入图片描述

    • 1.2.2 Nesterov

      2013 年,Sutskever 等人受到 Nesterov 动量的启发,提出了具有动量的随机梯度下降法的另一个变体——NAG优化器(Nesterov’s Accelerated Gradient)。

      NAG和SGDM的差别在于:NAG先跟随历史累计梯度信息更新一步临时参数点,然后再计算临时参数点处的梯度,将该梯度加入动量后更新到实际参数点;SGDM则不“先走一步”进行临时更新,而是直接计算梯度和动量来更新参数。NAG比SGDM多应用了一次梯度信息,对参数的当前梯度方向进行了修正,得到了更为精确的更新梯度,进一步地提升了SGDM的算法稳定性,并且加快收敛速度

      在这里插入图片描述

      在平滑的凸函数的优化中,对比批量梯度下降,NAG的收敛速度超出 1 / k 1/k 1/k 1 / ( k 2 ) 1/(k^2) 1/(k2)

  • 1.3 自适应学习率优化算法

    随机梯度下降及其动量变体算法都使用固定的常数作为学习率,参数以相同的步长更新, 不考虑梯度行为,因此如何设定学习率的大小在实际应用中十分重要。然而,学习率是一个难以设置的超参数,它对模型性能有显著的影响。近年来,深度网络优化的有效方法是为每个参数制定自适应步长, 即在整个迭代过程中自动地调整学习率,该类算法被称为自适应学习率优化算法

    自适应学习率优化算法(Adaptive Learning Rate Optimization Algorithm)是梯度下降算法的一种改进形式,旨在解决传统梯度下降算法中需要手动调整学习率的问题。这些算法通过在训练过程中动态地调整学习率,使得每个参数都可以拥有不同的学习速率,从而更有效地更新模型参数。

    目前,Adam算法在实践中表现出色,并且通常被认为是训练深度神经网络时的优秀选择之一。然而,对于不同的任务和数据集,其他自适应学习率优化算法(如AdagradRMSProp等)也可能更适合,因此在实际应用中需要进行合理的选择和调优。

    • 1.3.1 Adagrad

      2011年,Duchi等人受到 Delta-bar-delta 算法训练早期时适应参数的学习率的启发,提出了第一个经典自适应学习率优化算法——AdaGrad。

      Adagrad亦称为自适应梯度(adaptive gradient),允许学习率基于参数进行调整,而不需要在学习过程中人为调整学习率。Adagrad根据不常用的参数进行较大幅度的学习率更新,根据常用的参数进行较小幅度的学习率更新,根据前面所有轮迭代的历史梯度值动态调整学习率,且优化变量向量x的每一个分量都有自己的学习率。然而Adagrad的最大问题在于,在某些情况,学习率变得太小,学习率单调下降使得网络停止学习过程。

      AdaGrad算法采用参数的过去累计梯度平方和的平方根来划分学习率,可以很好地处理稀疏数据。它对不频繁的参数执行较大的更新,使得步长较大,多学习一些知识;而对频繁的参数执行较小的更新,使得步长较小,学习过程更稳定,不至于被单个样本影响太多。AdaGrad减少了传统SGD及其动量变体算法中需要手动调节学习率的需要,实现了学习率的动态调节,提高了超参数的鲁棒性

      参数更新公式为:

      在这里插入图片描述

      其中 α α α是学习率, G t Gt Gt是第 t t t次迭代时参数的梯度向量,下标 i i i表示向量的分量。和标准梯度下降法唯一不同的是多了分母中的这一项,它是 i i i这个分量从第1轮到第 t t t轮梯度的平方和,即累积了到本次迭代为止梯度的历史值信息用于生成梯度下降的系数值

      可以看到,此时实质上的学习率由 α α α变成了梯度下降算法图解14,随着迭代的增加,学习率是在逐渐变小的。这在“直观上”是正确的:当我们越接近最优解时,函数的“坡度”会越平缓,我们也必须走的更慢来保证不会穿过最优解。这个变小的幅度只跟当前问题的函数梯度有关,是 ε ε ε为了防止0除,一般取1e-7。

    • 1.3.2 RMSProp

      AdaGrad 的缺点是会不断累积梯度的平方,在一段时间后分母过大,会大幅降低学习率甚至使其逐渐递减至零,反而扼杀了学习过程,导致训练提前结束。为了改进 AdaGrad 算法的上述缺点,2012年 Adadelta 算法和 RMSProp 算法被提出。

      RMSProp使用指数移动平均法计算累计梯度平方,替代了AdaGrad中直接计算梯度平方和的方法,主要是解决学习速率过快衰减的问题,避免了后期更新时更新幅度逐渐趋近于0。利用指数移动平均法的好处在于,计算二阶动量时不累积全部历史梯度,而只关注最近某一段时间窗内的梯度信息,衰减率超参数 β β β用来控制时间窗长短。

      RMSProp算法的伪代码如下:

      在这里插入图片描述

    • 1.3.3 AdaDelta

      RMSProp 和 AdaDelta 是不同研究者在同年提出的,都是对 Adagrad 的改进,从形式上来说,AdaDelta 是对 RMSProp 的分子作进一步的改进,去掉了对人工设置全局学习率的依赖。

      AdaDelta算法是一种自适应学习率优化算法,旨在解决学习率衰减过快的问题,同时不需要手动设置全局学习率。它是由 Matthew D. Zeiler 提出的,被设计用于训练神经网络。

      AdaDelta算法的主要思想是基于RMSProp算法的改进,它通过在更新过程中使用历史梯度的平均值来自适应地调整学习率。与RMSProp不同的是,AdaDelta不需要手动设置全局学习率和衰减率。

      RMSProp的计算公式上面已经给出,这里将分母简记为RMS,表示梯度平方和的平均数的均方根的意思 :

      在这里插入图片描述

      此外,还将学习率 η η η换成了 RMS[Δθ],这样的话,我们甚至就不需要提前设定学习率了:

      在这里插入图片描述

      其中RMS[Δθ]的计算公式与RMS[g]计算公式类似,等于下式开根号,可以看出学习率是通过梯度的历史值确定的

      参数更新的迭代公式为:

      在这里插入图片描述

      在计算前需要初始化两个向量为0:

    在这里插入图片描述

    AdaDelta算法可以完全自适应全局学习率,加速效果好,但后期容易在小范围内产生震荡。

    AdaDelta算法的特点包括:

    • 自适应学习率AdaDelta算法根据梯度的变化情况自适应地调整学习率,不需要手动设置全局学习率。
    • 无需超参数调整:与其他自适应学习率算法不同,AdaDelta算法不需要设置额外的超参数,使得使用更为简单。
    • 减少了学习率衰减的影响:通过动态地调整学习率,AdaDelta算法能够减少学习率衰减对模型训练的影响,更好地应对非平稳目标函数。

    总的来说,AdaDelta算法是一种高效的自适应学习率优化算法,适用于训练深度神经网络和处理非平稳目标函数的优化问题。

    • 1.3.4 Adam

      2014年,Adam算法被提出,它是现今最为广泛使用的一种自适应学习率优化算法,在深度学习 相关的各种任务实践上都很受欢迎。Adam算法可以看作是SGDM算法和RMSprop算法的结合,基于被 称为一阶矩和二阶矩的两个向量来自适应地调节学习率。

      Adam(Adaptive Moment Estimation)是深度学习领域中流行且广泛使用的自适应学习率优化算法。它旨在改进传统的梯度下降算法,通过在训练过程中动态调整每个参数的学习率,从而更有效地更新模型参数,相当于RMSprop + Momentum

      Adam算法为两种随机梯度下降的优点集合

      • **适应性梯度算法(AdaGrad)**为每一个参数保留一个学习率以提升在稀疏梯度(即自然语言和计算机视觉问题)上的性能。
      • **均方根传播(RMSProp)**基于权重梯度最近量级的均值为每一个参数适应性地保留学习率。这意味着算法在非稳态和在线问题上有很有优秀的性能。

      Adam算法同时获得了AdaGradRMSProp算法的优点,像RMSprop一样存储了过去梯度平方和的指数衰减平均值 ,也像Momentum一样保持了过去梯度 m m m的指数衰减平均值。算法用梯度构造了两个向量 m m m v v v,前者为动量项,后者累积了梯度的平方和,用于构造自适应学习率。

      在这里插入图片描述

      如果 M t Mt Mt v t vt vt被初始化为 0 0 0向量,那它们就会向 0 0 0偏置,所以做了偏差校正,通过计算偏差校正后的 M t Mt Mt V t Vt Vt来抵消这些偏差:

    在这里插入图片描述

    参数的更新公式为:
    在这里插入图片描述

    可以看到,分母与RMSPropAdaDelta一样,只是分子引入了动量Momentum。如果我们把矩想象成是一个球滚下斜坡,Adam表现得像一个有摩擦的重球,因此可以更快速更准确地朝着目标曲面上的平坦极小值前进。

    Adam算法的伪代码流程:
    在这里插入图片描述

二、最小二乘法

最小二乘法是一种经典的数学方法,用于拟合数据并找到数据中的最佳拟合曲线或平面。它被广泛应用于统计学、机器学习和工程领域。

最小二乘法常用在机器学习回归模型求解析解(对于复杂的深度神经网络无法通过这方法求解),其几何意义是高维空间中的一个向量在低维子空间的投影(通俗一点将就是求导)。

最小二乘法的基本思想是通过最小化数据观测值与拟合值之间的残差平方和来找到最佳拟合曲线或平面。在一维情况下,即拟合一条直线,最小二乘法的目标是找到一条直线,使得数据点到该直线的距离之和最小。

如下以一元线性回归用最小二乘法求解为例。
在这里插入图片描述

其损失函数mse为:

在这里插入图片描述

对损失函数求极小值,也就是一阶导数为0。通过偏导可得关于参数 a a a及偏置 b b b的方程组:

在这里插入图片描述

代入数值求解上述线性方程组,可以求解出 a a a b b b的参数值。也就是求解出上图拟合的那条直线 a x + b ax+b ax+b

三、遗传算法

遗传算法是一种基于生物进化原理的优化算法,在机器学习中被广泛应用于参数优化、特征选择和模型构建等领域。它模拟了生物进化过程中的自然选择、交叉和变异等机制,通过对个体(解)的不断迭代和演化,逐步优化适应度函数,从而得到最优解或近似最优解。

遗传算法(Genetic Algorithms,GA)是模拟自然界遗传和生物进化论而成的一种并行随机搜索最优化方法。与自然界中“优胜略汰,适者生存”的生物进化原理相似,遗传算法就是在引入优化参数形成的编码串联群体中,按照所选择的适应度函数并通过遗传中的选择、交叉和变异对个体进行筛选,使适应度好的个体被保留,适应度差的个体被淘汰,新的群体既继承了上一代的信息,又优于上一代。这样反复循环迭代,直至满足条件。

遗传算法的主要步骤包括:

  1. 初始化种群:随机生成一定数量的个体作为初始种群,每个个体代表一个可能的解。
  2. 评估适应度:对种群中的每个个体,根据问题定义的适应度函数计算其适应度值,评估其解的质量。
  3. 选择操作:通过一定的选择策略(如轮盘赌选择、竞标赛选择等),从种群中选择适应度较高的个体作为父代,用于产生下一代。
  4. 交叉操作:对选出的父代个体,进行交叉操作(交配),产生新的个体。
  5. 变异操作:对交叉后的个体进行变异操作,引入随机性,增加种群的多样性。
  6. 更新种群:将新生成的个体加入到种群中,并根据一定的策略(如精英保留策略)更新种群。
  7. 重复迭代:重复进行选择、交叉和变异等操作,直到满足停止条件(如达到最大迭代次数或解的收敛)。

遗传算法的优点包括:

  • 全局搜索能力强:由于引入了随机性和多样性维护机制,遗传算法能够有效地进行全局搜索,找到问题的全局最优解或较好的近似解。
  • 适应于复杂问题:适用于解决复杂、高维、非线性和不可微的优化问题,具有较强的鲁棒性和通用性。
  • 并行化处理:算法的并行性强,易于并行化处理,加速求解过程。

然而,遗传算法也存在一些缺点,如收敛速度较慢、参数调节困难等。在实际应用中,需要根据具体问题的特点和要求,选择合适的优化算法和参数设置。实际上,神经网络优化算法以梯度下降类算法较为高效,也是主流的算法。而遗传算法、贪心算法、模拟退火等优化算法用的相对较少。

四、牛顿法(二阶优化算法)

牛顿法(Newton’s method),也称为牛顿-拉弗森方法(Newton-Raphson method),是一种用于寻找方程或函数的根的数值逼近方法。它是由英国科学家艾萨克·牛顿在17世纪提出的,后来由约瑟夫·拉弗森在18世纪进一步发展和推广。

牛顿法(Newton’s Method),是一种用于求解方程根或函数的最小值的迭代优化算法。它利用函数的二阶导数信息(Hessian矩阵)来逼近函数的局部性质,能够更快地收敛到最优解。

牛顿法的基本思想是通过构造函数的泰勒级数展开来近似原函数,并使用近似函数的根或最小值来逐步逼近原函数的根或最小值。在每一次迭代中,牛顿法使用当前点的切线来估计函数的根或最小值,并将切线与x轴的交点作为下一次迭代的点。这样,通过不断迭代,可以逐渐逼近函数的根或最小值。

牛顿法和梯度下降法相比,两者都是迭代求解,不过梯度下降法是梯度求解(一阶优化),而牛顿法是用二阶的海森矩阵的逆矩阵求解。相对而言,使用牛顿法收敛更快(迭代更少次数),但是每次迭代的时间比梯度下降法长(计算开销更大,实际常用拟牛顿法替代)。

在这里插入图片描述

通俗来讲,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,后面坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。但是,牛顿法对初始值有一定要求,在非凸优化问题中(如神经网络训练),牛顿法很容易陷入鞍点(牛顿法步长会越来越小),而梯度下降法则更容易逃离鞍点(因此在神经网络训练中一般使用梯度下降法,高维空间的神经网络中存在大量鞍点)。

牛顿法的基本思想:在现有的极小值估计值的附近对 f ( x ) f(x) f(x)做二阶泰勒展开,进而找到极小点的下一个估计值,反复迭代直到函数的一阶导数小于某个接近0的阀值。最终求出极小点的估计值。

在这里插入图片描述

牛顿法实现的动图如下所示:

在这里插入图片描述


优劣比较

Reference:机器学习中优化算法的比较

优化算法优点缺点适用情况
梯度下降法 (Gradient Descent)简单易实现。 对于凸函数,能够找到全局最优解。对于非凸函数,易陷入局部最优解。 学习率的选取需要谨慎,影响收敛速度和稳定性。收敛速度慢,需要用到全部数据,内存消耗大。不适用于大数据集,不能在线更新模型。
随机梯度下降法(SGD)计算速度快,适用于大规模数据集。避免冗余数据的干扰,收敛速度加快,能够在线学习。对于稀疏数据或不平衡数据,收敛速度可能较慢。 学习率的选取对收敛效果影响较大。更新值的方差较大,收敛过程会产生波动,可能落入极小值,选择合适的学习率比较困难。适用于需要在线更新的模型,适用于大规模训练样本情况。
Momentum能够在相关方向加速SGD,抑制振荡,从而加快收敛。需要人工设定学习率。可能会在某些情况下导致“摆动”。适用于有可靠的初始化参数。
Nesterov梯度在大的跳跃后,进行计算对当前梯度进行校正。需要人工设定学习率。与动量法类似,但更快地收敛的优化问题。
AdaGrad自适应调整学习率,对于稀疏数据和非平稳目标函数有较好的效果。仍依赖于人工设置一个全局学习率,学习率设置过大,对梯度的调节太大。中后期,梯度接近于0,使得训练提前结束。需要快速收敛,训练复杂网络时;适合处理稀疏梯度。
AdaDelta不需要预设一个默认学习率,训练初中期,加速效果不错,很快,可以避免参数更新时两边单位不统一的问题。训练后期,反复在局部最小值附近抖动。需要快速收敛,训练复杂网络时。
RMSProp解决 Adagrad 激进的学习率缩减问题。依然依赖于全局学习率。需要快速收敛,训练复杂网络时;适合处理非平稳目标,对于RNN效果很好。
Adam结合了动量法和自适应学习率的优点,适用于不同类型的数据和目标函数。收敛速度快,对于大规模数据和参数较多的情况表现较好。对内存需求较小,为不同的参数计算不同的自适应学习率。对于一些数据和问题,可能需要调整默认参数。需要快速收敛,训练复杂网络时;善于处理稀疏梯度和处理非平稳目标的优点,也适用于大多非凸优化。适用于大数据集和高维空间。
最小二乘法 (Ordinary Least Squares, OLS)对线性模型求解简洁高效,在一些特定问题中表现优异。对异常值敏感,对非线性关系不适用。线性模型,对异常值较敏感但需快速求解的情况下的优化。
遗传算法 (Genetic Algorithm)可以全局搜索解空间,适用于复杂的非线性优化问题。需要大量的计算资源和时间。复杂的非线性优化问题,对计算资源和时间要求不高的情况下的优化。
牛顿法 (Newton’s Method))收敛速度快,通常表现出色于凸函数的优化。需要计算二阶导数,对于大规模数据和高维参数较为耗时。凸函数优化,计算资源充足且不考虑二阶导数计算开销的情况下的优化。

深度学习中的应用

Reference:深度学习中的优化算法研究——陈 爽、张长伦、黎铭亮

目前,在神经网络中,各种优化算法被广泛运用以提高模型的训练效率和性能。以下是一些常见优化算法在神经网络中的应用现状:

  1. 梯度下降法及其变种:梯度下降法是神经网络中最基础的优化算法之一,在实际应用中被广泛使用。随机梯度下降(SGD)和小批量梯度下降(Mini-Batch SGD)常用于大规模数据集的训练。此外,随着对学习率的调整和动量的引入,梯度下降的进化版本如MomentumAdam等也成为研究热点。
  2. 自适应学习率算法AdaGradRMSPropAdam等自适应学习率算法在神经网络中得到广泛应用。它们根据参数的历史梯度信息动态调整学习率,适应不同参数的更新速度,有助于加速训练过程并避免陷入局部最优解。
  3. 二阶优化算法LBFGS和牛顿法等二阶优化算法尽管计算复杂度高,但在一些情况下能够更快地收敛到全局最优解。特别是在参数较少或者计算资源充足的情况下,这些算法通常可以取得更好的效果。
  4. 加速梯度算法Nesterov加速梯度(NAG)和其它加速梯度算法通过修正传统梯度下降中的参数更新方式,在一定程度上提高了收敛速度和结果稳定性。
  5. 遗传算法:虽然遗传算法在神经网络中相对不常见,但在某些特定任务中,如网络结构搜索和超参数优化,遗传算法可以作为一种有效的优化手段。

神经网络模型的训练离不开优化算法的支持,不同的优化算法适用于不同的问题和场景。研究人员在不断改进现有算法、提出新的算法,以应对神经网络模型越来越复杂的训练需求,提高训练效率和泛化能力。随着深度学习领域的快速发展,优化算法的研究和应用将继续是一个重要的研究方向。

梯度下降法在现今神经网络优化算法中仍然占据重要地位,尽管出现了许多改进和新的优化算法,但梯度下降法作为最基础、最经典的优化方法之一,仍然被广泛应用并引起研究者的关注。

梯度下降法通过不断沿着梯度的反方向更新参数,使得损失函数逐渐减小,从而找到最优解或局部最优解。在神经网络中,梯度下降法的变种包括批量梯度下降(BGD)、随机梯度下降(SGD)和小批量梯度下降(Mini-Batch SGD)等。

  • 批量梯度下降(BGD):在每个训练周期中,使用整个训练集的数据计算梯度并更新参数。虽然计算准确,但对于大规模数据集计算代价较高。
  • 随机梯度下降(SGD):每次迭代随机选择一个样本进行梯度计算和参数更新。虽然计算速度快,但由于随机性可能导致更新不稳定。
  • 小批量梯度下降(Mini-Batch SGD):将数据集划分为小批量数据集,每次迭代计算小批量数据的梯度并更新参数。综合了BGD和SGD的优点,是目前神经网络优化中应用最广泛的方法之一。

除了上述基本的梯度下降算法外,还有一些改进版的算法,如动量法(Momentum)、AdaGrad算法、RMSProp算法、Adam算法等,它们在梯度下降的基础上引入了动态学习率或者加速因子等机制,能够更快地收敛并避免陷入局部最优解。

总的来说,在神经网络中,梯度下降法及其改进版仍然是最常用的优化算法之一,对于大规模数据集和复杂神经网络模型的训练具有重要意义,并且研究人员也在不断地改进和优化这些算法,以应对不同类型的神经网络模型和训练任务。

近年来,深度学习中的优化算法层出不穷,但是在深度学习的实际任务中,选择和设计合适的优化器仍面临着许多困难。探索影响优化算法寻找目标点的损失曲面的性质,提升优化算法的收敛速度泛化性能是具有挑战和价值的研究方向。

  1. 损失曲面的性质

    深度学习神经网络的损失函数对优化算法的参数更新方向和步长有着关键影响,损失平面的几何特征与性质指导着如何设计优化算法。对于深度学习任务中非凸的目标函数,以及小批量会引起的随机噪声扰动,优化算法如何体现深度神经网络参数的分布信息、正确找到目标点是值得深入探索的问题。

  2. 收敛速度与泛化性能

    尽管诸如Adam等自适应学习率优化算法在大多深度学习实践任务中表现出优秀的性能,但SGD还是经常在任务训练后期时被使用。自适应学习率优化算法虽然在训练早期有着快速的收敛速度,但在测试时的泛化能力往往不如SGD优秀。目前,实验证实自适应学习率优化器更倾向于收敛到泛化性能效果差的尖锐极小值,而不是和SGD一样,收敛到所期望的平坦极小值。因此,如何提高自适应学习率优化算法的泛化效果、同时保证快速收敛是一个具有价值的研究方向。

深度学习优化算法的持续改进和探索,不仅能够提升模型在训练阶段的效率和性能,还能够增强模型在实际应用中的泛化能力鲁棒性。这些研究方向的探索有望为深度学习领域带来新的突破和进展,推动人工智能技术的发展和应用。期待更多更高效的优化算法的诞生。

  • 72
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
思维进化算法(Thought Evolution Algorithm,TEA)是一种启发式优化算法,可以用来优化神经网络的训练结果。对于非线性函数拟合问题,BP神经网络是一种经典的方法,但是它的收敛速度较慢且易于陷入局部最优解。因此,采用TEA算法优化BP神经网络可以提高其性能。 在使用TEA算法优化BP神经网络时,首先需要初始化神经网络的权重和偏置参数。然后,通过TEA算法对这些参数进行优化。TEA算法的核心思想是通过选择和改进个体来搜索最佳解,以便在解空间中进行进化。 TEA算法主要包含选择、交叉和突变三个基本操作。其中,选择阶段通过适应度函数选出优秀的个体作为父代,并且为个体分配相应的概率。交叉阶段将父代个体进行基因交换操作,生成新的子代个体。突变阶段通过微小的改变来引入新的个体。 在每一代中,通过选择、交叉和突变操作,更好的个体会逐渐被筛选出来,并逐渐趋近于最佳解。通过不断地迭代,TEA算法可以优化BP神经网络,提高其在非线性函数拟合问题上的性能。 总结起来,通过思维进化算法优化BP神经网络可以提高其在非线性函数拟合问题上的效果。TEA算法通过选择、交叉和突变等操作来搜索最佳解,通过不断迭代逐渐优化神经网络的参数,从而提高其训练性能和预测能力。这种综合运用两种算法的方法可以得到更好的非线性函数拟合结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值