[ML]机器学习_高级优化算法

目录

一、高级优化算法

二、详细介绍

1、梯度下降算法

梯度下降算法的原理

批量梯度下降(Batch Gradient Descent)

随机梯度下降(Stochastic Gradient Descent)

小批量梯度下降(Mini-Batch Gradient Descent)

梯度下降算法的实现

总结

2、牛顿法

牛顿法的原理

DFP算法

BFGS算法

总结

4、随机优化算法

随机梯度下降(Stochastic Gradient Descent, SGD)

随机漫步算法(Random Walk Algorithm, RWA)

总结

5、共轭梯度算法

共轭梯度算法的原理

总结       

6、Momentum算法

Momentum算法的原理

总结

7、AdaGrad算法

AdaGrad算法的原理        

总结

8、Adam算法

Adam算法的基本思想

总结


一、高级优化算法

  1. 梯度下降算法:是机器学习中最常用的优化算法之一。它是通过计算函数的导数来找到使函数最小化的参数值。梯度下降算法有多个变种,包括批量梯度下降、随机梯度下降和小批量梯度下降。

  2. 牛顿法:牛顿法是一种较快的优化算法,它是通过使用函数的一阶和二阶导数来更新参数。它在求解凸优化问题时效果很好,但当目标函数具有非凸性时效果可能不佳。

  3. 拟牛顿法:拟牛顿法是基于牛顿法的一种优化算法,它克服了牛顿法在求解非凸函数时的局限性。拟牛顿法使用函数的一阶导数来构建函数的海森矩阵的逆矩阵,并根据此矩阵来更新参数。

  4. 随机优化算法:随机优化算法是一类基于随机采样的优化算法,其中包括随机梯度下降、随机坐标下降和随机平均梯度等算法。这些算法通常用于大规模数据集的优化问题。

  5. 共轭梯度算法:共轭梯度算法是一种用于求解大规模线性方程组的优化算法。它是通过迭代解决这些方程组,从而得到最小化目标函数的参数。

  6. Momentum算法:引入了一个动量项,它考虑了历史梯度对当前梯度的影响,从而加速了神经网络的学习过程。

  7. AdaGrad算法:会为每个参数维护一个学习率,并且该学习率随着时间的推移逐渐降低。

  8. ADAM算法:ADAM是一种基于梯度下降的自适应学习率算法。它使用梯度的一阶和二阶矩估计来自适应地调整学习率,从而更好地处理高峰值、低梯度和非平稳优化问题。

        这些高级优化算法在不同的机器学习问题中都有用武之地,熟练掌握它们有助于提高模型的训练效率和性能。

二、详细介绍

1、梯度下降算法

        梯度下降算法是一种常用的优化算法,可以用来求解一些最小化误差函数的问题。在机器学习领域,梯度下降算法通常用来最小化损失函数,从而得到一个最优的模型参数。下面详细介绍梯度下降算法的原理和实现。

梯度下降算法的原理

        假设有一个损失函数J(\theta),其中\theta 是模型的参数。我们的目标是找到能够使损失函数最小化的参数\theta,从而得到最优的模型。

        梯度下降算法的基本思想是通过计算损失函数的梯度(导数),沿着梯度的方向对当前的参数进行更新,以达到使损失函数最小化的目标。因此,对于损失函数J(\theta),我们在参数空间中选择一个初始点\theta_0,不断迭代更新\theta直到收敛。每次迭代更新的公式如下:

\theta_{i+1} = \theta_i - \alpha \nabla J(\theta_i)

        其中,\alpha是学习率,\nabla J(\theta_i)是损失函数在当前参数\theta_i处的梯度。学习率决定了每次迭代更新时的步长大小,如果学习率太大可能会导致参数跳过最优解,如果学习率太小可能会导致收敛速度过慢。

        具体来说,梯度下降算法分为三种不同的变体:批量梯度下降(Batch Gradient Descent)、随机梯度下降(Stochastic Gradient Descent)和小批量梯度下降(Mini-Batch Gradient Descent)。

批量梯度下降(Batch Gradient Descent)

        批量梯度下降,也称为经典梯度下降,是梯度下降算法的最基本形式。在批量梯度下降中,每次迭代时都需要使用所有的训练样本来计算损失函数的梯度,因此训练过程比较耗时。批量梯度下降的更新公式如下:

\theta_{i+1} = \theta_i - \alpha \frac{1}{m}\sum_{j=1}^{m} \nabla J(\theta_i,x_j,y_j)

其中,m表示训练样本的数量,(x_j,y_j)表示第j个样本的特征和标签。

随机梯度下降(Stochastic Gradient Descent)

        随机梯度下降是一种基于随机采样的梯度下降算法,每次迭代时只使用一个训练样本来计算损失函数的梯度,并更新模型的参数。由于每次迭代只使用一个训练样本,因此训练速度很快,但是缺点是更新的参数可能不够稳定。随机梯度下降的更新公式如下:

\theta_{i+1} = \theta_i - \alpha \nabla J(\theta_i,x_i,y_i)

其中,(x_i,y_i)表示随机从训练集中抽取的一个样本。

小批量梯度下降(Mini-Batch Gradient Descent)

        小批量梯度下降是批量梯度下降和随机梯度下降的折中,每次迭代时使用一部分训练样本来计算损失函数的梯度,而不是全部样本或一个样本。这样可以减少计算时间,同时也减小了更新参数的不稳定性。小批量梯度下降的更新公式如下:

\theta_{i+1} = \theta_i - \alpha \frac{1}{b}\sum_{j=1}^{b} \nabla J(\theta_i,x_j,y_j)

其中,b表示每个批次中的样本数量,通常取值为2^n

梯度下降算法的实现

梯度下降算法的实现通常涉及以下几个步骤:

  1. 初始化模型参数。
  2. 循环进行如下步骤直到收敛或达到最大迭代次数:
    1. 计算当前参数下的损失函数和梯度。
    2. 根据梯度和学习率更新模型参数。
  3. 返回最终的模型参数。

在实现时,还需要注意以下几点:        

  1. 梯度的计算可以使用自动微分库或手动计算。自动微分库可以帮助快速计算梯度,而手动计算梯度可以提高代码的可读性和运行效率。
  2. 学习率的选择是很重要的,通常需要进行调参。一般来说,可以从较小的学习率开始,逐渐增大学习率,直到发现收敛速度变慢或者不稳定。
  3. 在实现时,还需要注意参数的初始化、迭代次数、收敛条件等问题,以保证梯度下降算法能够正确收敛。

总结

        梯度下降算法是机器学习中最常用的优化算法之一,可以用来最小化损失函数,得到最优的模型参数。批量梯度下降、随机梯度下降和小批量梯度下降是梯度下降算法的三种不同变体,适用于不同的训练数据集大小和模型复杂度。在实现时,需要注意学习率的选择、收敛条件的判断以及参数的初始化等问题,以保证梯度下降算法能够正确地收敛。

2、牛顿法

        在高级优化算法中,牛顿法通常是解决非线性最小化问题的常用算法。在非线性最小化问题中,我们需要寻找使得目标函数f(x)最小的变量x,其中f(x)是一个非线性函数。牛顿法通过使用目标函数的一阶和二阶导数(或者海森矩阵)来构建关于$x$的二次近似模型,并通过最小化该二次近似模型来寻找目标函数的极小值。

牛顿法的原理

具体地,牛顿法的迭代公式如下:

x_{k+1} = x_k - \alpha_k (H_f(x_k))^{-1} \nabla f(x_k)

其中,x_k是第k步的迭代点,

\nabla f(x_k)是目标函数的梯度向量,它的第i个分量是\frac{\partial f}{\partial x_i}(x_k)

H_f(x_k)是目标函数的海森矩阵,它的第(i,j)个分量是\frac{\partial^2 f}{\partial x_i \partial x_j}(x_k)

\alpha_k是步长因子,它决定了每一步的步长大小。可以使用线性搜索、二分搜索、牛顿线搜索等方法来计算步长因子。

        牛顿法的优点在于收敛速度快,尤其是当目标函数是凸函数时,牛顿法的收敛速度是二次的。此外,牛顿法可以直接求解二次优化问题,因此它可以在较少的迭代次数内获得高精度的解。但是,牛顿法也有一些缺点。首先,计算海森矩阵的代价很高。当变量 $x$的维度非常大时,计算和存储海森矩阵可能会变得离谱。其次,当海森矩阵不可逆时,牛顿法会失效。针对这些问题,可以使用拟牛顿法、共轭梯度法等算法来替代牛顿法。

3、拟牛顿法

        拟牛顿法是一种高级优化算法,用于求解无约束非线性优化问题。相比其他优化算法,拟牛顿法通常具有更快的收敛速度和更高的精度。

        拟牛顿法的基本思想是在优化过程中构造出一系列的近似海森Hessian矩阵,并利用这些矩阵来更新搜索方向。具体来说,拟牛顿法通过逐步更新近似海森Hessian矩阵来模拟牛顿法的思路,但是使用了一些近似海森Hessian矩阵的计算方法来代替精确海森Hessian矩阵的计算,从而大大降低了计算复杂度。

下面介绍两种典型的拟牛顿算法:DFP算法和BFGS算法。

DFP算法

        DFP算法是由Davidon、Fletcher和Powell三位学者提出的,其基本思想是通过一系列的迭代,构造出一系列的Hessian矩阵的逆矩阵的近似值,从而构造出近似的Hessian矩阵。

该算法迭代公式如下:

s_k = x_{k+1} - x_k

y_k = \nabla f(x_{k+1}) - \nabla f(x_k)

H_{k+1} = H_k + \frac{s_k s_k^T}{s_k^T y_k} - \frac{H_k y_k y_k^T H_k}{y_k^T H_k y_k}

        其中,s_k表示两次迭代的搜索方向差,y_k表示两次迭代的梯度差,H_k表示第k次迭代获得的近似海森Hessian矩阵的逆矩阵。

BFGS算法

        BFGS算法是由Broyden、Fletcher、Goldfarb和Shanno四位学者提出的,其基本思想是通过一系列的迭代,构造出一系列的Hessian矩阵的逆矩阵的近似值,从而构造出近似的Hessian矩阵。

该算法迭代公式如下:

s_k=x_{k+1}- x_k

y_k=\nabla f(x_{k+1})-\nabla f(x_k)

\rho_k=\frac{1}{y_k^T s_k}

H_{k+1}=(I-\rho_ks_k y_k^T)H_k(I - \rho_k y_k s_k^T)+\rho_k s_k s_k^T

         其中,T表示矩阵的转置,s_k表示两次迭代的搜索方向差,y_k表示两次迭代的梯度差,\rho_k表示通过BFGS公式计算得到的近似海森Hessian矩阵逆矩阵的系数,H_k表示第k次迭代获得的近似海森Hessian矩阵的逆矩阵。

        需要注意的是,BFGS算法对于初值Hessian矩阵的逆矩阵的选择比较重要,通常情况下,初始值使用单位矩阵或者梯度矩阵来进行近似。

总结

        拟牛顿法的优点在于它具有比较快的收敛速度,特别是在处理大规模问题时,它的效率要比牛顿法高。此外,相对于牛顿法,拟牛顿法还有一些其他的优点,例如拟牛顿法不需要求解海森Hessian矩阵的逆矩阵,因此计算量更小,对于非凸问题也更加适用。

4、随机优化算法

        随机优化算法是一类基于随机化的优化算法,通常用于求解大规模、高维数据下的优化问题。这类算法通过随机化的方式来解决问题,具体来说,就是通过引入随机性来避免算法陷入局部极小值,并且可以在许多情况下保证全局最优解的收敛性。本文将主要介绍两种常见的随机优化算法:随机梯度下降和随机漫步算法。

随机梯度下降(Stochastic Gradient Descent, SGD)

        随机梯度下降是一种常用的优化算法,它可以用来求解大规模的无约束凸优化问题。相比于传统的批量梯度下降(Batch Gradient Descent, BGD),SGD在计算梯度时,每次只随机选择一个数据样本进行计算,因此在迭代过程中,计算量较小,收敛速度也更快。

该算法的迭代公式如下:

x_{k+1} = x_k - \eta_k \nabla f_i(x_k)

        其中,x_k表示第k次迭代时的解向量,\eta_k表示学习率,在SGD中通常取较小的值,\nabla f_i(x_k)表示在x_k处随机选择的第i个数据样本的梯度。

随机漫步算法(Random Walk Algorithm, RWA)

        随机漫步算法是一种基于随机化的优化算法,它通过引入随机步长和随机方向来进行搜索,可以用于求解高维非凸优化问题。该算法的基本思想是从当前位置出发,以一定的概率和步长随机地朝着某个方向移动,然后在新位置重新计算目标函数的值,不断重复这个过程,直到满足一定的停止准则。

该算法的迭代公式如下:

x_{k+1} = x_k + \eta_k d_k

        其中,x_k表示第k次迭代时的解向量,\eta_k表示随机步长,在RWA中通常取一个较小的固定值,d_k表示随机方向,可以通过随机生成一个高维向量来实现。

总结

        需要注意的是,随机优化算法的性能通常与初始值和参数设置有关,因此需要对算法参数进行仔细的选择和调整。

        综上所述,随机优化算法是一类高效的优化算法,特别适用于处理大规模、高维的优化问题。这类算法通过引入随机性来避免算法陷入局部极小值,并且在很多情况下可以保证全局最优解的收敛性。

5、共轭梯度算法

        共轭梯度算法(Conjugate Gradient, CG)是一种用于求解对称正定线性方程组的迭代算法。相对于传统的直接求解法,CG算法具有计算量低、存储要求少、并行性好等优点,因此在实际应用中广泛使用。

共轭梯度算法的原理

        假设需要求解一组$n$元线性方程:Ax = b 其中,An\times n的对称正定矩阵,bn维列向量,xn维未知向量。CG算法的基本步骤如下:

  1. 初始化:设x_0为任意给定的$n$维向量,令r_0=b-Ax_0p_0=r_0k=0
  2. 迭代:对于k=0,1,2,...,重复如下迭代过程:
    • 计算步长\alpha_k\alpha_k = \frac{r_k^Tr_k}{p_k^TAp_k}
    • 计算新解向量x_{k+1}x_{k+1} = x_k + \alpha_k p_k
    • 计算新残差向量r_{k+1}r_{k+1} = r_k - \alpha_k A p_k
    • 如果r_{k+1}的范数已经足够小(比如小于某个给定的阈值),则停止迭代。
    • 计算新搜索方向p_{k+1}: p_{k+1} = r_{k+1} + \beta_{k+1} p_k,其中\beta_{k+1} = \frac{r_{k+1}^Tr_{k+1}}{r_k^Tr_k}

        其中,r_k表示第k次迭代时的残差向量,p_k表示第k次迭代时的搜索方向,\alpha_k表示第k次迭代时的步长,\beta_{k+1}表示第k+1次迭代时的下降因子。

总结       

        需要注意的是,对于对称正定矩阵来说,CG算法可以保证在n步以内收敛到精确解,其中n为矩阵的维数。

        综上所述,CG算法是一种迭代求解对称正定线性方程组的高效算法,其迭代次数远少于传统的直接求解方法,并且具有计算量小、存储要求少、并行性好等优点,在实际应用中广泛使用。

6、Momentum算法

Momentum算法的原理

        Momentum算法是一种加速梯度下降算法,用于优化神经网络模型中的损失函数。它的基本思想是利用历史梯度信息来加速参数更新,从而达到更快的收敛速度和更小的训练误差。Momentum算法的特点是能够消除噪声对梯度下降的影响,降低算法震荡的可能性,提高训练效率和性能。

        Momentum算法的主要原理是引入一个动量变量来记录历史梯度信息,并用该变量的加权平均值来调整梯度下降的方向和速度。具体来说,Momentum算法的算法步骤如下:

  1. 初始化:随机初始化模型参数;设置动量变量v=0,和学习率\alpha

  2. 计算梯度:计算当前批次样本的梯度;

  3. 更新动量变量:将当前梯度和历史梯度进行加权平均,得到新的历史梯度;如:v = \beta v + (1 - \beta)g(t),其中,\beta为动量系数,通常取值为0.9或0.99,g(t)为当前样本的梯度;

  4. 计算参数更新量:根据新的历史梯度和学习率,计算参数更新的量;如:\Delta w(t) = \alpha v

  5. 更新参数:根据计算出的更新量,更新网络参数;如:w(t+1) = w(t) - \Delta w(t)

  6. 重复以上步骤:持续训练神经网络,直到达到预设的精度或训练次数。

        Momentum算法的核心在于引入了动量变量v,并用历史梯度的加权平均值来更新v。这样做的好处是,历史梯度信息会被动态地积累和平滑,可以减少梯度下降的震荡和偏移现象,加快模型收敛速度。此外,动量变量v类似于一个惯性力的作用,可以使模型在更新时具有一定的“惯性”,避免因单次梯度估计的不准确性带来的更新不准确的问题。

总结

        总的来说,Momentum算法是一种基于加速梯度下降的优化算法,能够加速神经网络的训练速度,提高模型的训练效率和性能。在实际应用中,常常与其他优化算法结合使用,如反向传播算法、批次标准化、L1和L2正则化等。

7、AdaGrad算法

AdaGrad算法的原理        

        AdaGrad算法是一种自适应学习率的优化算法,能够对不同的参数计算不同的学习率,具有良好的收敛性能。其核心思想是对每个参数的学习率进行自适应调整,使其在训练过程中能够更好地适应参数的梯度值。具体地,AdaGrad算法是在普通SGD算法基础上对学习率进行了改进。   

        Adagrad算法的参数更新公式为:

w_{t+1} = w_t - \frac{\eta}{\sqrt{G_t + \epsilon}} \cdot g_t

        其中,w_t表示在第t个时间步的参数值,g_t表示在第t个时间步计算出的梯度,\eta表示学习率,G_t为在前t个时间步中梯度的平方和,\epsilon为一个很小的常数,避免除数为0。

        具体地,Adagrad算法对每个参数w_i维护一个梯度平方和的累加变量G_t,然后根据这个平方和的值来动态调整每个参数的学习率。因此,Adagrad算法可以自适应地为每个参数计算不同的学习率。

        在Adagrad算法中,梯度平方和G_t被累加为:

G_t = \sum_{i=1}^t g_i^2

        然后,利用G_t来更新参数的学习率:

\eta_t = \frac{\eta}{\sqrt{G_t + \epsilon}}

        通过这种方式,Adagrad算法可以动态地减小学习率,使得梯度较大的参数获得较小的学习率,从而使得参数更加稳定,避免了在训练过程中出现梯度爆炸的问题。

        最后,根据更新后的学习率来更新参数值:

w_{t+1} = w_t - \eta_t \cdot g_t

        这样,Adagrad算法就更新了训练过程中的参数值,使得每个参数的学习率都能够得到更好的调整,从而实现更优秀的模型训练效果。

总结

        总之,AdaGrad算法是一种可以自适应地改变学习率的优化算法,能够对不同的参数计算不同的学习率,使其在训练过程中能够更好地适应参数的梯度值,能够有效地提高模型的收敛速度和精度。

8、Adam算法

        Adam(Adaptive Moment Estimation)是一种自适应学习率的随机优化算法,常用于深度学习神经网络的训练中。Adam结合了梯度下降法的基本思想和动量法的优点,可以在处理高维度和大规模数据时达到比传统随机梯度下降法更快的收敛速度。

Adam算法的基本思想

        Adam算法的基本思想是在梯度下降的基础上,对每个参数引入了其历史梯度平方的指数加权平均,以自适应的方式调整各参数的学习率。具体而言,在每一次迭代中,Adam算法会计算当前梯度对应参数的一阶矩估计和二阶矩估计,分别表示对应参数的梯度和梯度平方的均值和平均值,并将其用于更新对应参数的学习率。

具体而言,Adam算法的更新步骤如下:

  1. 初始化:设t=0,给定初始参数\theta_0,定义初始的一阶矩估计m_0 = 0和二阶矩估计v_0=0
  2. 迭代:对于t=0,1,2,...,重复如下迭代过程:
  • 计算当前梯度g_t
  • 计算当前一阶矩估计m_t和二阶矩估计v_t

m_t = \beta_1 m_{t-1} + (1-\beta_1) g_t

v_t = \beta_2 v_{t-1} + (1-\beta_2) g_t^2

(其中,\beta_1\beta_2分别为一阶矩和二阶矩的指数加权平均的衰减率,一般取值为0.90.999。)

  • 计算偏差修正后的一阶矩估计\hat{m_t}和二阶矩估计\hat{v_t}

\hat{m_t} = \frac{m_t}{1-\beta_1^t}

\hat{v_t} = \frac{v_t}{1-\beta_2^t}

  • 更新参数\theta_t

\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat{v_t}}+\epsilon}\hat{m_t}

(其中,\eta为学习率,\epsilon为避免除数为0而添加的小常数。)

总结

        需要注意的是,Adam算法的超参数\beta_1\beta_2、学习率\eta以及\epsilon的设置对算法的性能有着重要的影响,一般需要针对不同的问题和数据进行调试。

        综上所述,Adam算法是一种自适应学习率的随机优化算法,具有快速收敛、对超参数不敏感等优点,常用于深度学习神经网络的训练中。

notes:

        Adam可以自动调整学习率。

        并不使用单一的全局学习率Alpha,对模型的每个参数使用不同的学习率。

        Adam算法大致为,如果参数似乎继续沿着大致相同的方向移动,就增加该参数的学习率,使之朝该方向走得更快;相反,如果参数不断来回振荡,就减少该参数的学习率,阻止其继续来回摆动或弹跳。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IAz-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值