4.6.1 经典优化算法(Classic Optimize Function)

常用的经典优化算法,主要有三种,分别是:随即梯度下降法(SGD)、批量梯度下降法(BGD)、小批梯度下降法(MBGD)。

随机梯度下降法(SGD [Stochastic Gradient Descent])

迭代公式:

θt=θt1η˙θJ(θ;xi;yi) {\displaystyle \begin{aligned} \theta_t = \theta_{t-1} - \eta \dot{} \nabla_\theta J(\theta ; x_i; y_i) \\ \end{aligned} }

每次更新时,只对当前对应批次的被选用样本数据,进行 损失函数(Loss) 计算,一次计算一次更新。因为计算少,所以速度快,并且可以实现实时计算,支持动态的样本添加。

批量梯度下降法(BGD [Batch Gradient Descent])

迭代公式:

θt=θt1η˙θJ(θ) {\displaystyle \begin{aligned} \theta_t = \theta_{t-1} - \eta \dot{} \nabla_\theta J(\theta) \\ \end{aligned} }

每次迭代需要计算当前批次整个数据集 损失函数(Loss) ,更新梯度。所以每次计算的耗时比较高。对于大批量数据来说,比较难以处理,更新不实时。简单的说,就是粒度太大。

小批梯度下降法(MBGD [Mini-Batch Gradient Descent])

迭代公式:

θt=θt1η˙θJ(θ;x(i:i+n);y(i:i+n)) {\displaystyle \begin{aligned} \theta_t = \theta_{t-1} - \eta \dot{} \nabla_\theta J(\theta ; x_{(i:i+n)}; y_{(i:i+n)}) \\ \end{aligned} }

针对 BGD 每次都需要对当前批次数据集的问题,MBGD 进行了改良,每一次更新,取当前批次中的一组子样本集合来进行 损失函数(Loss)计算,降低参数更新方差计算,收敛更稳定,并且因为采用子批次构成矩阵运算,更加有优势。

基础优化算法比较

三个经典算法各有优劣,基本可以以下表来判断。

: SGD<MBGD<BGD: BGD<MBGD<SGD: SGD<MBGD<BGD: SGD<MBGD<BGD {\displaystyle \begin{aligned} \text{粒度:} &\text{小} \ &SGD < MBGD < BGD \quad &\text{大} \\ \text{速度:} &\text{慢} \ &BGD < MBGD < SGD \quad &\text{快} \\ \text{收敛:} &\text{低} \ &SGD < MBGD < BGD \quad &\text{高} \\ \text{过拟合:} &\text{低} \ &SGD < MBGD < BGD \quad &\text{高} \\ \end{aligned} }

因为 SGD 每次处理数据单取一个样本点,相比于 MBGD 的当前批次全数据取子集,和 BGD 当前批次扫描全部数据,SGD 更新权重每次计算出的梯度变化幅度相对都会比较大一些,所以不容易在梯度更新上陷入局部最优解。这也是 SGD 较其余两种基本算法的最大优势。建议没有特殊要求,而需要在这三种算法中做选择的话,优先使用 SGD。

当然,他们都有同样的缺点,那就是:

  1. 仍存在易陷入局部最小值或鞍点震荡问题,以 BGD 为最
  2. 仍存在无法根据不同参数重要程度进行变速权重更新问题,即全权重更新速度统一问题

不过,既然有了疑问,那自然有解决办法。

Copyright © Since 2021 李述博 (Arikan.Li) , All Rights Reserved all right reserved,powered by GitbookLast Updated: 2024-03-22 18:02:18

results matching ""

    No results matching ""