深度学习遇到的问题

文章目录

梯度爆炸,梯度消失

在梯度函数上出现的以指数级递增或递减的情况分别被称为梯度爆炸,梯度消失

这个写的很清楚
梯度消失和梯度爆炸

鞍点问题

在鞍点附近,基于梯度的优化算法(几乎目前所有的实际使用的优化算法都是基于梯度的)会遇到较为严重的问题:

鞍点处的梯度为零,鞍点通常被相同误差值的平面所包围(这个平面又叫Plateaus,Plateaus是梯度接近于零的平缓区域,会降低神经网络学习速度),在高维的情形,这个鞍点附近的平坦区域范围可能非常大,这使得SGD算法很难脱离区域,即可能会长时间卡在该点附近(因为梯度在所有维度上接近于零)。

在SGD中可能第n个样本使其脱离鞍点,但由于鞍点附近的平坦区域范围可能非常大,导致损失函数值梯度非常小,从而使后续样本的训练使其在鞍点附近波动

局部最小问题

因为训练样本多,所以总有很多样本可以使其摆脱局部最小

解决策略

初始化参数策略

  • 初始化参数,权重随机,使其不相等

  • 在tanh中,权重尽量小使其数值在原点附近,梯度大,变化更明显

Mini梯度下降法

  • Batch(批量):Batch 是指将整个训练数据集作为一个大批量进行训练。在每次迭代时,模型使用整个训练数据集的样本进行前向传播、计算损失和反向传播,然后根据这些样本的梯度更新模型的参数。相比于 mini-batch,使用 batch 的训练过程可能会占用更多的内存和计算资源,因为需要同时处理整个数据集。

  • Mini-batch(小批量):Mini-batch 是指从训练数据集中选择的较小的数据子集。在训练模型时,通常将整个训练数据集划分为多个 mini-batch。每个 mini-batch 包含一定数量的训练样本,通常是2的幂次方,例如 32、64 或 128。模型使用每个 mini-batch 的样本来进行前向传播、计算损失和反向传播,然后根据这些样本的梯度更新模型的参数。使用 mini-batch 的主要目的是减少计算开销和内存占用,冲分利用计算资源,提高训练的效率。

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

    batch_size=1,由于失去了GPU并行计算,所以计算慢

epoch含义

  • Batch, Mini-batch,随机梯度下降对比
特性 Batch GD Mini-Batch GD SGD
梯度计算 全数据集 小批量样本 单样本
更新频率 每epoch一次 每batch一次 每样本一次
内存需求 极高 中等 极低
收敛速度 最快(初期)
梯度噪声 中等 极高
收敛稳定性 稳定 适中 震荡
硬件利用率 高(GPU并行)

现代深度学习实践:95%+场景使用Mini-Batch(批次大小32-512),仅在极小数据集或理论研究中使用Batch方法。

  • 损失函数值变化

    随机梯度下降的噪声比mini-batch更大(波动更多)

因此,选择一个合适的大小进行 Mini-batch 梯度下降,可以实现快速学习,也应用了向量化带来的好处,且成本函数的下降处于前两者之间。

如何选择合适的

  • 如果训练样本的大小比较小,如m≤2000时,选择batch梯度下降法;

  • 如果训练样本的大小比较大,选择Mini-Batch梯度下降法。为了和计算机的信息存储方式相适应,代码在mini-batch大小为2的幂次时运行要快一些。典型的大小为26,27,28,29,mini-batch的大小要符合CPU/GPU内存。

  • Mini-Batch通常是更合适的

梯度下降算法的优化

学习率衰减