文章目录
- 🌺深度学习面试八股汇总🌺
- 优化算法
- 方法
- 梯度下降 (Gradient Descent, GD)
- 动量法 (Momentum)
- AdaGrad (Adaptive Gradient Algorithm)
- RMSProp (Root Mean Square Propagation)
- Adam (Adaptive Moment Estimation)
- AdamW 优化算法
- 总结
- 经验和实践建议
- 使用 Adam 进行初始训练,之后用 SGD 进行微调
- 冷启动策略(Cold Start Strategy)
- 大批量与小批量交替训练
- 学习率逐步衰减(Learning Rate Decay)
- 总结
- 主要考虑的参数
- 学习率(Learning Rate, η \eta η)
- 动量(Momentum, β \beta β)
- 自适应学习率参数(如 Adam 的 β 1 \beta_1 β1, β 2 \beta_2 β2)
- 批量大小(Batch Size)
- 梯度裁剪(Gradient Clipping)
- 权重衰减(Weight Decay, λ \lambda λ)
- 初始化参数(Weight Initialization)
- 总结
- 激活函数
- 1) Sigmoid 函数
- 2) Tanh 函数
- 3) ReLU(Rectified Linear Unit)
- 4) Leaky ReLU
- 5) Parametric ReLU(PReLU)
- 6) ELU(Exponential Linear Unit)
- 7) SELU(Scaled Exponential Linear Unit)
- 8) Swish(SiLU)
- 总结
- 各种优化的归一化介绍(本质上进行标准化)
- 普通归一化过程
- 普通归一化分类
- 1. 批归一化(Batch Normalization, BN)
- 原理
- 优点
- 缺点
- 使用场景
- 2. 层归一化(Layer Normalization, LN)
- 原理
- 优点
- 缺点
- 使用场景
- 3. 实例归一化(Instance Normalization, IN)
- 原理
- 优点
- 缺点
- 使用场景
- 4. 组归一化(Group Normalization, GN)
- 原理
- 优点
- 缺点
- 使用场景
- 权重归一化(Weight Normalization, WN)
- 原理
- 权重归一化的步骤
- 权重归一化的作用
- 优点
- 缺点
- 使用场景
- 归一化方法对比总结
- 正则化
- L1 正则化(Lasso)
- 原理
- 使用场景
- 优缺点
- L2 正则化(Ridge)
- 原理
- 使用场景
- 优缺点
- Elastic Net 正则化
- 定义
- 公式
- 优点
- 缺点
- 应用场景
- Dropout
- 原理
- 使用场景
- 优缺点
- 早停法(Early Stopping)
- 原理
- 使用场景
- 优缺点
- Batch Normalization (BN)
- 原理
- 使用场景
- 优点
- 缺点
- 权重衰减(Weight Decay)
- 原理
- 使用场景
- 优点
- 缺点
- 剪枝(Pruning)
- 原理
- 应用场景
- 优点
- 缺点
- Q&A
- 权重归一化和权重衰减的异同
🌺深度学习面试八股汇总🌺
优化算法
在深度学习中,优化算法用于调整模型的参数(如权重和偏置)以最小化损失函数。
方法
梯度下降 (Gradient Descent, GD)
简介:
梯度下降是最基本的优化算法,通过计算损失函数相对于模型参数的梯度,沿着梯度下降的方向更新参数,以最小化损失函数。
- 批量梯度下降(Batch Gradient Descent):在每次迭代中使用整个训练集计算梯度,计算开销大但收敛稳定。
- 随机梯度下降(Stochastic Gradient Descent, SGD):每次迭代只使用一个样本计算梯度,效率高,但容易在训练中产生波动。
- 小批量梯度下降(Mini-batch Gradient Descent):在每次迭代中使用一小部分训练集进行梯度计算,平衡了批量梯度下降和随机梯度下降的优缺点。
优点:
-
简单直观:梯度下降的原理简单,计算损失函数的梯度,沿着梯度最速下降方向进行优化。
-
广泛适用:梯度下降可以应用于各种类型的机器学习问题,包括线性回归、逻辑回归和神经网络等。在许多优化问题中,梯度下降是基本的选择,适用范围广泛。
-
可扩展性强:梯度下降可以在不同的规模和复杂度下使用。通过调整批量大小(如批量梯度下降、随机梯度下降、小批量梯度下降),可以适应不同数据集的规模。
-
良好的收敛性:对于凸优化问题,梯度下降可以保证收敛到全局最优解。而在非凸问题中,梯度下降也能找到局部最优解,具有良好的泛化能力。
缺点:
-
收敛速度慢:梯度下降尤其是批量梯度下降(Batch Gradient Descent),收敛速度慢。在大型数据集上,批量梯度下降的效率较低。
-
容易陷入局部最优:在非凸优化问题中,梯度下降容易陷入局部最优解。
-
对学习率敏感:梯度下降依赖于超参数学习率(learning rate) 的选择。如果学习率太小,收敛速度非常慢;如果学习率太大,梯度下降可能无法收敛,甚至在训练过程中发散。
-
梯度消失或梯度爆炸问题:在深层神经网络中,由于链式法则,梯度值会在反向传播时逐层累积,容易导致梯度消失或梯度爆炸问题,导致网络训练不稳定或无法更新参数。
适用场景:
- 适用于数据量较大的场景,如深度学习中的大规模数据训练。
动量法 (Momentum)
简介:
动量法是对GD的改进,它在更新参数时不仅考虑当前的梯度还考虑前几次的梯度。这样就像给参数加上“惯性” ,从而避免震荡。
优点:
- 更快的收敛速度:由于动量的存在,它可以在损失函数的谷底处快速收敛。
- 减少震荡:动量法在梯度方向上能够更稳健,减少梯度震荡现象。
缺点:
- 需要调节动量系数:动量的超参数(通常设为0.9左右)需要精心调节,使用不当可能导致训练失效。
适用场景:
- 适用于数据噪声较多或梯度震荡较大的场景,如深度神经网络中使用的卷积层。
AdaGrad (Adaptive Gradient Algorithm)
简介:
AdaGrad是一种自适应学习率的方法。它为每个参数独立调整学习率,学习率的调整取决于历史梯度的平方和,这使得频繁更新的参数学习率逐渐减小,而较少更新的参数学习率保持较大。这种方式防止了步长过大导致的震荡,也避免了步长过小导致的收敛速度慢。
优点:
- 自适应学习率:不需要手动调整学习率,适应稀疏数据场景。
- 适合稀疏数据:对于稀疏数据(如NLP任务中的词嵌入学习),AdaGrad表现很好。
缺点:
- 学习率过快衰减:随着训练的进行,累积的梯度会导致学习率快速减小,最终学习率趋近于0,难以继续学习。
适用场景:
- 适合于稀疏特征的场景,如自然语言处理中的词嵌入或推荐系统中的高维特征。
RMSProp (Root Mean Square Propagation)
简介:
RMSProp 是为了解决 AdaGrad 中学习率过快衰减的问题。它引入了指数加权移动平均(梯度的二阶矩)来平滑历史梯度的平方,使得学习率不会迅速下降。
优点:
- 学习率调整更稳健:通过指数加权平均处理梯度,RMSProp 可以更好地适应复杂且多变的损失面。
- 解决AdaGrad的衰减问题:与AdaGrad相比,它能够维持适当的学习率,使得训练能持续有效进行。
缺点:
- 需要调节超参数:RMSProp中的超参数,如移动平均系数,可能需要手动调整以取得最佳效果。
适用场景:
- 适用于非平稳目标或在线学习场景,如强化学习中的Q-Learning。
Adam (Adaptive Moment Estimation)
简介:
Adam 结合了动量法和RMSProp的优点 ,既使用动量法来考虑历史梯度,也通过RMSProp来自适应调整学习率。它既利用了梯度的一阶矩(动量),又利用了梯度的二阶矩(RMSprop)。
- 一阶矩(First Moment):通常指梯度的均值,即梯度的期望值。它反映了梯度的方向和大小。
- 二阶矩(Second Moment):通常指梯度的方方差“ 或 “平方均值”,即梯度的平方的均值/期望值。它反映了梯度变化的幅度或不确定性。
优点:
- 收敛速度快:Adam在大多数情况下表现出良好的收敛性,能够加速模型的训练。
- 自适应学习率:每个参数都有独立的学习率,不需要太多的手动调参。
- 鲁棒性:在各种问题上都表现良好,适用于大多数深度学习任务。
缺点:
- 可能过早收敛:Adam在某些场景下可能会收敛到亚最优解。
- 需要额外的超参数:Adam的β1、β2以及学习率等超参数需要调整,可能影响训练效果。
适用场景:
- 适用于大多数深度学习任务,尤其是在梯度更新频繁且噪声较大的场景,如图像分类、语言模型训练等。
AdamW 优化算法
简介
Adam 优化算法的改进版本,专门针对优化正则化过程中的权重衰减问题。传统的 Adam 将权重衰减作为正则化的一部分,而 AdamW 通过将权重衰减与梯度更新过程分离,提供了更准确的正则化效果。
权重衰减(Weight Decay) 是一种用于正则化的技术,主要目的是防止模型过拟合。它通过在损失函数中添加一个与参数大小相关的惩罚项,来限制模型参数的大小,使得模型的权重不能无限增大。
公式:
AdamW 的公式与 Adam 的主要区别就在于第四步的参数更新。因此,只需要在第四步添加权重衰减项 λ ⋅ θ t \lambda \cdot \theta_t λ⋅θt 即可。AdamW 的其他部分,如梯度计算、一阶矩、二阶矩和偏差修正,和 Adam 是完全相同的。
优点
- 更好的正则化效果:AdamW 将权重衰减与梯度更新 分离,能够实现更精确的正则化,减少过拟合。
- 与 Adam 兼容:保留了 Adam 的所有优势,如自适应学习率和动量计算,同时修正了正则化问题。
- 更快的收敛:由于正则化效果更准确,模型能够更好地收敛,尤其是在复杂网络中。
- 广泛适用:适用于许多深度学习任务,特别是需要进行正则化的任务,如计算机视觉、自然语言处理等领域。
缺点
- 超参数更多:与 Adam 相比,AdamW 增加了一个权重衰减超参数 ( \lambda ),因此需要调试的超参数更多,调参复杂度增加。
- 计算复杂度略高:与 Adam 相比,虽然整体计算复杂度没有显著增加,但在包含权重衰减的场景下,其计算量稍有增加。
使用场景
- 深度神经网络中的正则化:适用于在深度学习模型中加入正则化以避免过拟合的场景,例如在大规模数据集上进行训练时,AdamW 能更好地控制权重更新。
- 计算机视觉任务:如图像分类、目标检测等任务,AdamW 可以通过有效的正则化提升模型的泛化能力。
- 自然语言处理(NLP):在语言模型、文本分类等任务中,AdamW 的正则化效果能使模型在复杂数据集上更好地训练。
- 需要长时间训练的任务:AdamW 在长时间训练任务中的表现通常比 Adam 更好,因为其优化的正则化可以避免模型随着时间过拟合。
总结
算法 | 原理 | 优点 | 缺点 | 适用场景 |
---|---|---|---|---|
GD | 梯度下降算法,通过每次使用整个训练集, 或者SGD和MGD。 计算损失函数相对于模型参数的梯度,沿着梯度下降的方向更新参数,以最小化损失函数。 | 理论稳定,易于实现 | 计算成本高,特别是在大数据集上更新缓慢 | 小规模数据集或批量处理场景 |
Momentum | 在 SGD 基础上增加动量,不仅考虑当前的梯度,还利用过去的梯度积累,加入惯性来加速收敛并减少震荡。 | 提升收敛速度、减少震荡 | 需调节动量系数 | 数据噪声较多的场景 |
AdaGrad | 对每个参数采用不同的学习率,自适应学习率,并根据历史梯度的平方和自动调整每个参数的学习率。 | 自适应学习率,适合稀疏数据 | 学习率快速衰减 | 稀疏特征数据场景 |
RMSProp | 在 AdaGrad 基础上,通过引入梯度的二阶矩来平衡学习率的更新,解决了 AdaGrad 学习率快速衰减的问题。 | 学习率调整更稳健,解决 AdaGrad 衰减问题 | 需调节超参数 | 非平稳目标、强化学习 |
Adam | 结合了 Momentum 和 RMSProp,采用自适应学习率和动量来更新参数,适应性强,收敛速度快。 利用了梯度的一阶矩(动量),又利用了梯度的二阶矩(RMSprop)。 | 收敛快,适应性强,鲁棒性好 | 可能过早收敛,需调整多个超参数 | 大多数深度学习任务,图像分类、语言模型 |
AdamW | 改进的 Adam 算法,结合权重衰减正则化,将权重衰减与梯度更新过程分离,解决过拟合。 | 改进的正则化,避免权重衰减导致的过拟合问题 | 增加超参数调试复杂度 | 正则化场景,如图像分类、NLP任务 |
- GD(Gradient Descent,梯度下降):每次迭代使用整个数据集计算梯度,并更新模型参数,确保模型稳步收敛,但在大数据集上计算成本高且更新缓慢。
- SGD(Stochastic Gradient Descent):每次参数更新只使用一个或小批量样本进行计算,虽然计算效率高,但更新不稳定,容易出现震荡。
- Momentum:通过在每次梯度更新时引入动量,动量会积累之前梯度的方向,帮助加速收敛,减少震荡。适合噪声较多的数据。
- AdaGrad:自适应调整学习率,梯度较大的参数学习率变小,适合处理稀疏数据,但学习率在训练后期可能过小,导致收敛缓慢。
- RMSProp:在 AdaGrad 基础上引入滑动平均(梯度的二阶矩)的机制,使学习率更新更加稳健,避免学习率过快衰减。常用于强化学习或非平稳目标。
- Adam:结合了 Momentum 和 RMSProp 的优势,采用自适应学习率和动量机制,使其在大多数深度学习任务中表现良好,收敛快且鲁棒性好。
- AdamW:在 Adam 的基础上,改进了权重衰减的方式,通过权重衰减的正则化防止模型过拟合,特别适用于需要正则化的任务,如图像分类和 NLP。
这使得每种优化算法在处理不同的任务时,能够根据具体的需要选择合适的优化方式。
经验和实践建议
训练模型时,结合不同优化方法和策略来提高模型性能的常见做法。接下来,我会详细解释每个策略和概念背后的原理及其作用。
使用 Adam 进行初始训练,之后用 SGD 进行微调
作用:
- 结合了 Adam 的快速收敛能力 和 SGD 的精细调整能力,Adam 用于快速收敛,而 SGD 用于微调,能够快速训练模型并进一步优化模型,使其参数更接近全局最优。
解释:
-
Adam 是一种自适应学习率优化算法,能够在早期阶段快速收敛。由于 Adam 能够自适应地调整每个参数的学习率,这使得 Adam 能够帮助模型尽快接近局部最优解。
-
SGD 则被认为在局部微调时表现得更为稳定。尽管收敛速度较慢,但在接近最优解时,SGD 具有更好的优化全局性能的能力。使用 SGD 可以细致地调整模型参数,使其更加接近全局最优。
其他:
- RMSProp + SGD:自适应学习率算法RMSProp 可以迅速找到损失函数的低谷(能很好地处理非平稳数据),可以用于在线学习或强化学习中。然后通过 SGD 进一步优化模型参数。
冷启动策略(Cold Start Strategy)
作用:
- 帮助模型快速找到一个初始的较好参数,避免一开始陷入局部最优,进而提高后续优化阶段的效果。
解释:
-
冷启动策略主要解决的是训练初期时,如何合理地设置参数、超参数以及模型结构,确保训练能够顺利进行,并尽快进入有效的学习阶段。
-
初始模型参数初始化或者初始优化器选择错误 ,导致模型一开始的训练进展缓慢,甚至收敛到较差的局部最优解。采用冷启动策略,即开始时使用较大批量、较高学习率或者自适应学习率优化算法(如 Adam)进行初始训练,以帮助模型快速找到一个可行的参数区域。
-
然后,再使用更稳健的优化方法(如 SGD)以及更小的学习率来进行进一步的训练,从而细化参数并找到更接近全局最优的解。
大批量与小批量交替训练
作用:
- 交替使用大批量和小批量训练,可以在一定程度上结合两者的优势:用小批量训练来加速模型的训练,同时用大批量训练来稳定模型,并帮助模型在更广的参数空间探索。
解释:
-
小批量(mini-batch) 对数据集的一部分进行更新来避免计算整个数据集的梯度,从而加速模型的训练。然而,小批量训练有时可能会陷入局部最优解。
-
大批量训练 则能够更稳定地更新梯度,因为它使用更多的数据,减小了梯度中的噪声。但大批量训练的缺点是训练速度较慢。
学习率逐步衰减(Learning Rate Decay)
作用:
- 学习率衰减 可以让模型在训练初期,使用较高的学习率进行快速探索,在后期逐渐减小学习率进行更精细的调整,从而帮助模型更加稳定地收敛到全局最优解。
解释
- 小学习率的优缺点
- 优点:
精细调整、避免震荡、适合后期微调:小学习率能够使模型在接近最优解时进行更细致的参数调整。能避免震荡,使模型更加平稳地优化。在模型训练的后期,小学习率能够帮助模型更精确地逼近全局最优。 - 缺点:
收敛速度慢、可能陷入局部最优:小学习率会导致参数更新幅度较小,因此模型的收敛速度较慢,特别是在训练初期时。由于更新幅度较小,模型可能会陷入局部最优解,难以跳出并探索更优的解。
- 优点:
- 大学习率的优缺点
-
优点:
收敛速度快、跳出局部最优:大学习率可以使模型在训练初期迅速调整参数,快速探索参数空间,帮助模型尽快接近局部最优解。较大的参数更新幅度有助于模型摆脱局部最优,探索更优的解。 -
缺点:
容易震荡或发散、难以精细调整:在接近最优解时,大学习率可能导致参数更新幅度过大,导致模型在局部区域内反复跳跃,甚至发散,无法收敛。大学习率使模型的参数更新过于粗糙,难以在训练后期进行精细优化。
-
总结
- 小学习率:适合训练的后期,帮助模型精细调整参数、稳定收敛。更容易过拟合。
- 大学习率:适合训练初期,帮助模型快速探索参数空间、提高收敛速度。更容易欠拟合。
常见的学习率衰减策略包括:
- 指数衰减:学习率按照某个指数函数衰减;
- 阶梯衰减:在训练的某些阶段手动减小学习率;
- 自适应衰减:当模型的损失停止下降时,自动减小学习率。
总结
将 Adam 和 SGD 结合使用,以及通过 冷启动策略、大批量与小批量交替训练 和 学习率逐步衰减,能够有效提升深度学习模型的训练效率和性能。Adam 初期的快速收敛可以节省时间和资源,而 SGD 的精细优化能力可以确保最终结果更接近全局最优。让模型在训练初期,使用较高的学习率进行快速探索,在后期逐渐减小学习率进行更精细的调整,从而帮助模型更加稳定地收敛到全局最优解。
主要考虑的参数
以下是选择优化器时需要重点关注的几个关键参数:
学习率(Learning Rate, η \eta η)
描述:
- 学习率决定了每次更新参数的步长,是最重要的超参数之一。学习率过大可能导致模型在训练过程中发散,无法收敛,更容易欠拟合;学习率过小则会导致模型训练速度缓慢,甚至陷入局部最优,更容易过拟合。
选择标准:
- 对于大多数优化器,学习率是必调的参数。常见的做法是从较大的学习率开始逐步衰减,或者使用自适应学习率算法(如 Adam)。学习率也可以与学习率衰减机制结合使用,在训练过程中逐步降低。
影响:
- 大学习率通常加快收敛速度,但可能不稳定,可能导致欠拟合;
- 小学习率则更稳定,但速度较慢,可能导致过拟合。
- 使用太高或太低的学习率都可能导致模型性能不佳。
动量(Momentum, β \beta β)
描述:
- 动量是用来加速梯度下降方向并减少更新抖动的参数,通常用于动量法。它通过引入梯度的历史信息,使得模型参数更新方向更平滑,减少震荡。
选择标准:
- 动量的典型取值范围在0.9到0.99之间。这个参数决定了历史梯度对当前梯度的影响,值越大,历史梯度的影响越大。
影响:
- 动量能够提高模型收敛速度,特别是在损失函数面比较复杂时有助于跳出局部极小值。但如果动量参数过大,可能导致模型更新过程中的震荡。
自适应学习率参数(如 Adam 的 β 1 \beta_1 β1, β 2 \beta_2 β2)
描述:
- 自适应优化器(如 Adam、RMSProp)会对每个参数动态调整学习率。这些优化器通常有两个主要的超参数
β
1
\beta_1
β1 和
β
2
\beta_2
β2 ,分别控制一阶和二阶矩估计的衰减率。
- β 1 \beta_1 β1:控制梯度的动量,一般取 0.9;
- β 2 \beta_2 β2:控制梯度平方的动量,通常取 0.999。
选择标准:
- 默认情况下, β 1 = 0.9 \beta_1 = 0.9 β1=0.9 和 β 2 = 0.999 \beta_2 = 0.999 β2=0.999 通常是一个不错的起点,适合大多数任务。但是在特殊任务中,可能需要调节这些参数以更好地控制学习率调整过程。
影响:
- β 1 \beta_1 β1 和 β 2 \beta_2 β2 主要影响 Adam 等优化器的稳定性和自适应能力。
- β 1 \beta_1 β1 过大:动量积累过强,模型更新滞后。
- β 1 \beta_1 β1 过小:动量作用弱化,导致更新震荡。
- β 2 \beta_2 β2 过大:自适应学习率变化过慢,优化器调整迟缓。
- β 2 \beta_2 β2 过小:自适应学习率波动大,优化过程不稳定。
批量大小(Batch Size)
描述:
- 批量大小决定了每次参数更新时使用的数据样本数量。小批量(mini-batch)能引入噪声,帮助模型跳出局部最优;大批量训练能让模型更稳定地收敛。
选择标准:
- 通常情况下,批量大小与优化器配合使用。小批量训练能使模型在参数空间中更充分地探索,而大批量训练有助于加速收敛过程。常见的批量大小在32、64、128等,根据计算资源和模型大小进行调整。
影响:
- 较小的批量大小能够帮助模型避免陷入局部最优解,但训练速度较慢,可能导致欠拟合;
- 较大的批量大小会使梯度估计更精确,从而使模型稳定,但可能收敛到局部最优,可能导致过拟合。
梯度裁剪(Gradient Clipping)
描述:
- 在某些任务(如序列生成任务、循环神经网络中),梯度爆炸问题会导致参数更新幅度过大。梯度裁剪是一种控制梯度最大值的方法,避免梯度爆炸。
选择标准:
- 在梯度可能会爆炸的场景(如长序列建模、循环神经网络中),通常会设置梯度裁剪的阈值,如5.0 或1.0,以防止梯度过大。裁剪后,梯度的 L2 范数会限制在指定的阈值内。
影响:
- 梯度裁剪可以防止梯度更新过大,导致模型参数发散,尤其适合用于梯度不稳定的任务中。
权重衰减(Weight Decay, λ \lambda λ)
描述:
- 权重衰减是一种正则化技术,通过在每次梯度更新时直接对权重参数乘以一个小于 1 的因子,从而限制权重的增长。从而减少参数的值,避免过拟合。
选择标准:
- λ \lambda λ(权重衰减系数)的典型取值通常是 1 0 − 4 10^{-4} 10−4到 1 0 − 6 10 ^{-6} 10−6之间。权重衰减的选择主要依赖于数据集的规模、模型复杂度以及是否存在过拟合。
影响:
- 适度的权重衰减可以有效防止模型过拟合,但过大的权重衰减会导致模型欠拟合。
说明:
- SGD 优化器中:可以直接使用 L2 正则化或者权重衰减,两者效果几乎相同。
- Adam 优化器中:建议使用 AdamW,因为它将权重衰减与正则化分离,使得模型训练更稳定、优化过程更合理。
初始化参数(Weight Initialization)
描述:
- 权重初始化对优化过程至关重要,因为不恰当的初始化会导致训练速度变慢,甚至无法收敛。常见的初始化方法包括:
- 随机初始化
- Xavier 初始化
- He 初始化
- 常数初始化。
参考:深度学习——评估指标、权重初始化、梯度消失和梯度爆炸
影响:
- 良好的初始化 能加速模型的收敛,并使得梯度在前向传播和反向传播时不会过快缩小或膨胀,尤其是在深层神经网络中非常重要。
- 不当的初始化 可能会导致训练过程中出现梯度消失或梯度爆炸现象,从而导致网络收敛困难或训练时间极长。
在选择优化器的过程中,参数初始化的策略至关重要。以下是一些常见的选择方案:
- Xavier 初始化:适用于 Sigmoid 和 Tanh 激活函数,防止梯度爆炸或消失。
- He 初始化:适用于 ReLU 和其变种激活函数的网络,如深度卷积神经网络(CNN)。
- LeCun 初始化:适用于 SELU 激活函数,尤其是在自归一化神经网络中效果良好。
- Orthogonal 初始化:特别适用于 RNNs 和深层神经网络。
- 常数初始化:所有权重被设置为相同的值,常用于偏置项的初始化。
总结
在选择优化器的过程中,关键是根据具体任务的需求来确定 学习率、动量、自适应参数、批量大小 等参数。同时,诸如 权重衰减、梯度裁剪 和 计算开销 等因素也必须纳入考量,以确保模型能够在有效的计算资源和时间范围内实现最佳性能。
最常见的策略是先使用自适应学习率优化器(如 Adam)快速收敛,然后用 SGD 进一步微调参数,以达到更好的全局优化效果。同时合理设置学习率衰减等机制,进一步提高训练效果。
激活函数
激活函数是核心组件之一,它赋予神经网络非线性能力,使得模型能够学习复杂的模式和函数映射。常见的激活函数有多种,每种激活函数都有其独特的特性、优缺点,并且往往是基于前一代激活函数的改进。
1) Sigmoid 函数
优点:
- 平滑输出:Sigmoid 函数将输入压缩到 [0, 1] 之间,输出可以解释为概率,特别适合用于二分类问题的输出层。
缺点:
- 梯度消失问题:当输入过大或过小时,Sigmoid 的梯度接近 0,导致梯度消失,特别是在深层网络中,训练效率大大降低。
- 非零中心:输出是非零中心的,这可能导致后续层的梯度更新不均衡。
适用场景:
- 用于 输出层,特别是二分类任务中,输出可以解释为概率值。
- 在现代深层网络中,Sigmoid 逐渐被其他激活函数替代,因为它的梯度消失问题限制了其在深层网络中的表现。
2) Tanh 函数
优点:
- 零中心输出:与 Sigmoid 函数相比,Tanh 函数的输出在 [-1, 1] 之间,输出接近 0 时,使得正负输入在更新时的方向性保持一致,收敛更快。
- 平滑性:类似 Sigmoid,它具有平滑的输出,在二分类问题中能产生强有力的激活效果。
缺点:
- 梯度消失问题:尽管 Tanh 的输出范围比 Sigmoid 更宽,但仍然会出现梯度消失的问题,尤其是在输入值非常大或非常小时。
基于 Sigmoid 的改进:
- Tanh 是对 Sigmoid 函数的改进,通过将输出范围调整为[-1, 1],零中心输出,使得网络能够更好地处理负值,并避免部分梯度不均衡问题。
适用场景:
- 在 隐藏层 中用于信号标准化和处理负数数据。特别适合需要中心化输出的场景,但在深层网络中仍存在梯度消失问题。RNN中
3) ReLU(Rectified Linear Unit)
优点:
- 计算简单:ReLU 是线性分段函数,计算简单高效,不需要复杂的指数计算。
- 减轻梯度消失问题:由于 ReLU 在 x > 0 的区间上保持梯度恒定为 1,避免了梯度消失问题,尤其在深层网络中表现优异。
- 稀疏性:ReLU 的输出是稀疏的,当输入为负值时输出为 0,这有助于网络在某些场景下提升效率。
缺点:
- 死亡神经元、Dying ReLU问题:当 ReLU 的输入为负值时,神经元的输出会一直为 0,导致某些神经元永远不会被激活,进而无法参与模型的学习。
- 不对称性:ReLU 只对输入的正值产生作用,负值部分被置为 0,导致某些场景下信息丢失。
基于 Tanh 的改进:
- ReLU 是一种非线性激活函数,但在设计上简化了 Tanh 和 Sigmoid 的复杂性,同时减轻了梯度消失的问题。
适用场景:
- 深度神经网络的 隐藏层 中使用最广泛的激活函数,特别适用于卷积神经网络(CNN)和全连接网络(FCN)。
4) Leaky ReLU
优点:
- 解决死亡神经元、Dying ReLU 问题:Leaky ReLU 在 x<=0 的区间上引入了一个小的【固定的】负斜率,避免了 ReLU 函数的死神经元问题。
- 梯度流动:通过允许负值的输入产生非零梯度,模型可以更好地更新权重。
缺点:
- 不一定总是比 ReLU 更好:虽然 Leaky ReLU 解决了死神经元的问题,但是引入了负值的输出,可能对模型效果有微小的影响,在某些任务中,它并不总是比 ReLU 有显著优势。
基于 ReLU 的改进:
- Leaky ReLU 是 ReLU 的改进版,通过为负值输入保留一个小的斜率来避免 ReLU 中的神经元失活问题。
适用场景:
- 常用于深层神经网络中,需要避免死神经元问题时。Leaky ReLU 的负斜率可以帮助梯度有效传播,特别适合于 生成对抗网络(GANs) 和 RNN 等需要更稳定梯度流的场景。
5) Parametric ReLU(PReLU)
优点:
- 可学习的斜率:与 Leaky ReLU 不同,PReLU 中的 α \alpha α 是通过训练学习的,而不是一个固定值,这使得模型能够自动调整负值部分的斜率。
- 提升模型性能:它可以动态适应每个神经元的输入,在一些深层网络中,比固定的 ReLU 或 Leaky ReLU 表现更好。
缺点:
- 增加了模型复杂度:PReLU 引入了额外的参数 α \alpha α,这增加了模型的复杂性和训练成本。
基于 Leaky ReLU 的改进:
- PReLU 是对 Leaky ReLU 的改进,使得负斜率 α \alpha α 不再固定,而是通过学习调整,以便模型在训练过程中更加灵活。
适用场景:
- 适用于 深度卷积神经网络(CNN) 和 其他大型深度网络,当模型需要更大的灵活性和动态调整时,PReLU 提供了更优的性能。
6) ELU(Exponential Linear Unit)
优点:
- 平滑负值处理:ELU 在 x<=0 时平滑输出,使得负值部分的输出更为柔和,解决了 ReLU 和 Leaky ReLU 在负值区间的突变问题。
- 零中心输出:相比 ReLU,ELU 的输出更接近零,有助于梯度均衡更新,提升训练速度。
缺点:
- 计算复杂度高:ELU 的负值部分包含指数计算,比 ReLU 和 Leaky ReLU 的计算复杂度更高。
基于 ReLU 的改进:
- ELU 是对 ReLU 的改进,它解决了 ReLU 处理负值时的过度稀疏问题,并通过指数函数使负值部分更平滑。
适用场景:
- ELU 常用于深层网络,如 卷积神经网络(CNN),尤其是需要更平滑输出的场景。它的平滑负值处理在一定程度上提高了模型的鲁棒性。
7) SELU(Scaled Exponential Linear Unit)
优点:
- 自归一化:SELU 激活函数的最大特点是具有自归一化(self-normalizing)特性,它能够使得神经元的输出保持零均值和单位方差,即便经过多层网络传递后,仍然保持这种归一化效果。这一特性有助于避免梯度消失和梯度爆炸问题。
- 消除梯度消失和爆炸:SELU 通过引入缩放因子 (\lambda) 和 (\alpha),在负值区域引入非线性并进行归一化处理,有效防止梯度消失和爆炸。
- 无需额外正则化:SELU 可以减少或完全消除对批归一化(Batch Normalization)等正则化方法的依赖,在某些场景中表现非常稳定。
缺点:
- 依赖特定初始化和架构:SELU 要发挥最大效果,必须搭配 LeCun 正态初始化(LeCun Normal Initialization)和 Alpha Dropout。这种依赖特定初始化和架构的特性使得 SELU 在某些情况下的灵活性较差。
- 对输入数据敏感:SELU 要求输入数据标准化,即数据需要经过归一化处理(零均值、单位方差),否则效果可能较差。
基于 ELU 的改进:
- SELU 是对 ELU 函数的改进,保留了 ELU 在负值区间的平滑处理,同时通过添加缩放因子使输出具有自归一化特性。这种自归一化特性使得神经网络更稳定,并且减轻了对批归一化等正则化手段的需求。
适用场景:
- 自归一化神经网络(SNNs):SELU 常用于自归一化神经网络,它可以减少梯度消失和爆炸问题,尤其适用于深层网络。
- 适合需要高度稳定的训练过程,并且对批归一化等方法不适合的场景,如某些 序列生成 或 生成对抗网络(GANs) 中,SELU 可以提高网络的训练稳定性。
8) Swish(SiLU)
优点:
- 平滑且非单调:Swish 是一个非单调的函数(即它既有递增区间,也有递减区间),这有助于捕捉复杂的非线性特性。
- 更好的性能:Swish 在一些任务中表现出优于 ReLU 和其他常见激活函数的性能,尤其是在深层网络中。
缺点:
- 计算复杂度略高:相比 ReLU,Swish 由于引入了 Sigmoid 计算,其计算复杂度稍高。
基于 ReLU 的改进:
- Swish 是一种由 Google 提出的激活函数,它保留了 ReLU 的线性部分,但结合了 Sigmoid 的平滑性,特别适用于深层神经网络。
适用场景:
- 深度卷积神经网络(CNN) 和 Transformer 等模型中,Swish 在一些任务(如图像分类、目标检测)中表现优异,特别适合深度模型。
- SD模型的三个组件中都用到了,GSC部件中的S。
总结
激活函数 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
Sigmoid | 平滑输出,适合二分类问题 | 梯度消失,非零中心 | 二分类输出层 |
Tanh | 零中心输出,平滑 | 梯度消失 | 中间层或输出层 |
ReLU | 计算简单,减轻梯度消失 | 死神经元问题,不对称输出 | 深层网络,特别是卷积神经网络(CNN) |
Leaky ReLU | 解决 ReLU 死神经元问题,保持梯度流动 | 不一定总是比 ReLU 更好 | 需要避免死神经元问题的深层网络 |
PReLU | 可学习的负斜率,灵活性高 | 增加了模型的复杂度和训练时间 | 深度卷积网络等大型模型 |
ELU | 平滑负值处理,零中心输出 | 计算复杂度高 | 需要平滑负值处理的深层网络 |
SELU | 自归一化,减轻梯度消失和爆炸,减少对正则化的依赖 | 依赖特定的初始化和数据标准化 | 自归一化神经网络(SNN),深度网络 |
Swish | 非单调,性能好 | 计算复杂度略高 | 深层网络,如图像分类和目标检测 |
每种激活函数有其适用场景,选择激活函数时,应根据任务的特性、模型结构以及计算资源综合考虑。
- ReLU 和其变种在现代神经网络中应用广泛;
- Swish 和 ELU 在某些深层网络中表现更优。
- SELU 激活函数的最大优势在于其自归一化特性,适合深度神经网络的训练,尤其是在批归一化不适用的场景中表现优异。
各种优化的归一化介绍(本质上进行标准化)
下面的归一化。本质上进行的是标准化,与普通的归一化不同。
普通归一化(例如 BN、LN等)通常放在全连接层或卷积层之后,并在激活函数之前。
权重归一化直接应用于层的权重参数,因此它通常在层的定义阶段就应用。例如,在卷积层或全连接层的权重初始化或定义时。
普通归一化过程
归一化方法的统一步骤:
-
确定归一化范围:
- 批归一化(Batch Normalization)
- 层归一化(Layer Normalization):
- 实例归一化(Instance Normalization)
- 组归一化(Group Normalization)
-
计算均值和方差:
-
对归一化范围内的元素计算均值 μ \mu μ和方差 σ 2 \sigma^2 σ2。
-
公式如下:
-
这里 N 是归一化范围内的元素总数。
-
-
标准化:
-
将输入值进行标准化,使其具有均值 0 和方差 1:
-
ϵ \epsilon ϵ 是一个小常数,用于避免分母为零。
-
-
缩放和平移:
- 为了让模型在归一化后仍能保持灵活性,引入可学习的缩放参数
γ
\gamma
γ 和平移参数
β
\beta
β:
- 通过学习 γ \gamma γ和 β \beta β,模型可以调整归一化后的输出尺度和偏移,使其更加适应模型的需求。
- 为了让模型在归一化后仍能保持灵活性,引入可学习的缩放参数
γ
\gamma
γ 和平移参数
β
\beta
β:
普通归一化分类
1. 批归一化(Batch Normalization, BN)
原理
对一个批量中的样本的同一通道进行归一化。它将每个神经元的输出值转换为均值为0、方差为1的分布,随后再进行缩放和平移。批归一化的公式如
优点
- 减少了内部协变量偏移问题,使得模型更稳定。
- 加速收敛,允许使用更高的学习率。
- 有轻微的正则化效果,因为批次间的随机性类似于dropout的效果。
缺点
- 对小批量数据敏感。当批次较小时,均值和方差估计不准,导致效果下降。
- 在某些情况下(如RNN、Transformer中的序列任务),批次归一化的效果不如其他归一化方法。
- 训练和推理时行为不同:推理时使用全局的均值和方差,因此需要额外的记录和计算。
使用场景
- 适用于大多数卷积神经网络(CNN)和全连接网络(MLP),如图像分类、物体检测等任务中。
- 不太适合处理序列任务,如RNN和LSTM。
2. 层归一化(Layer Normalization, LN)
原理
对单个样本的所有通道进行归一化,不依赖批量。
优点
- 对小批次数据敏感性较低,不依赖于批次大小。
- 在处理序列数据(如RNN、Transformer)时效果更好,因为它不依赖于批次中的样本数。
缺点
- 相比批归一化,计算量稍大。
- 由于没有利用批次之间的信息,收敛速度可能稍慢。
使用场景
- 适用于序列任务,如RNN、LSTM、Transformer模型等,尤其在自然语言处理和时间序列任务中广泛使用。
3. 实例归一化(Instance Normalization, IN)
原理
对单张图像的每个通道分别独立进行归一化,不依赖批量。
优点
- 适合风格迁移、图像生成等任务,因为在这些任务中,局部统计量(如样本和通道内的均值和方差)比批次统计量更重要。
- 对风格变化的敏感度更高。
缺点
- 不适合大多数分类任务,因为它只考虑样本的单个通道,不利用全局信息。
使用场景
- 广泛用于图像生成任务中,如GAN和风格迁移(Style Transfer)等。
- 在卷积神经网络中常见于图像处理任务。
4. 组归一化(Group Normalization, GN)
原理
组归一化是介于批归一化和层归一化之间的一种方法。它将单个样本的特征通道分为若干组,并在每组内进行归一化操作。这种方法避免了批归一化对批次大小的依赖,同时利用了更多的局部信息。
优点
- 对小批次训练效果良好,不依赖于批次大小。
- 比层归一化更有效,特别是在卷积神经网络中,能很好地利用局部特征。
缺点
- 对卷积核的大小和特征通道数敏感,不如批归一化适用于大批次训练任务。
使用场景
- 适用于卷积神经网络(CNN)中的图像分类任务,特别是小批次训练场景。
- 当批归一化效果不佳或批次较小时(如语义分割、目标检测等任务)表现优越。
权重归一化(Weight Normalization, WN)
原理
权重归一化是对神经网络中的权重进行归一化,而不是激活值(准备通过激活函数(如 ReLU、Sigmoid、Tanh 等)的值)。它通过对每个神经元的权重向量进行重新参数化,将权重向量的方向与其长度分离开。
权重归一化主要针对模型的权重参数,确保训练中权重更新稳定。
批/层/实例/组归一化主要针对层的激活值,确保每层输出的稳定分布,从而提高训练的速度和稳定性。
权重归一化的步骤
权重归一化的过程可以分为以下几个步骤:
-
重参数化权重:
-
将每个权重向量重参数化为方向向量和长度标量的乘积。
-
具体表示为:
-
通过这种重参数化,权重向量 w \mathbf{w} w的方向被标准化为单位长度(归一化),而 g 控制权重的尺度。
-
-
计算范数:
-
计算权重向量的 L2 范数:
-
该范数用于对权重向量进行标准化,使得其长度等于 1。
-
-
标准化权重:
-
使用计算出的范数将权重向量标准化,得到单位长度的方向向量:
-
这个标准化的方向向量 v ^ \hat{\mathbf{v}} v^仅包含方向信息,而没有尺度信息。
-
-
应用缩放:
-
使用可学习的尺度参数 g 来调整权重的实际尺度,使得网络能够灵活调整权重的大小:
-
通过引入这个缩放参数 g ,模型可以学习适当的权重大小,以适应不同的训练和优化需求。
-
-
权重更新:
- 在反向传播时,优化器会更新原始权重 v \mathbf{v} v和缩放参数 g 的值,而不是直接更新标准化后的权重 w \mathbf{w} w。这种重参数化不会改变优化问题,但可以提高训练的稳定性。
权重归一化的作用
- 提高收敛速度:权重归一化通过标准化权重的长度,使得不同层的权重尺度在训练中保持一致,减轻了梯度爆炸或消失的问题,从而加速训练收敛。
- 更稳定的训练过程:权重归一化减少了权重值的剧烈变化,使优化过程更加平滑和稳定。
- 增强模型的可解释性:通过将权重分解为方向和尺度两个部分,模型的行为更容易解释,因为方向向量决定了特征的方向,而缩放参数决定了特征的重要性。
优点
- 可以加速收敛,并提高模型的稳定性。
- 在一定程度上减少了对批次大小的依赖。
缺点
- 相较于批归一化,效果并不总是显著。
使用场景
- 适用于卷积神经网络和全连接网络,尤其在需要加速训练时。
- 在一些生成模型中(如GAN)也有应用。
归一化方法对比总结
以下是归一化方法对比总结,其中加入了每种归一化方法的原理:
归一化方法 | 原理 | 适用场景 | 优点 | 缺点 |
---|---|---|---|---|
批归一化(BN) | 对一个批量中的所有样本的同一通道进行归一化,基于批次的均值和方差调整 | 卷积网络、全连接网络 | 加快收敛,正则化,适应大批量训练 | 对小批次敏感,序列任务效果差 |
层归一化(LN) | 对单个样本的所有通道进行归一化,不依赖批量,计算层内均值和方差 | RNN、Transformer、序列任务 | 适应小批次训练,不依赖批次大小 | 计算量较大,收敛可能稍慢 |
实例归一化(IN) | 对单张图像的每个通道分别独立进行归一化,计算每个样本的通道内均值和方差 | 图像生成、风格迁移 | 对风格敏感,适用于生成任务 | 不适合分类任务,无法捕捉全局信息 |
组归一化(GN) | 将单个样本的特征通道分组,对每一组进行归一化,计算组内均值和方差 | 小批次训练,卷积网络 | 适合小批次,不依赖批次大小 | 对卷积核大小和通道数较敏感 |
权重归一化(WN) | 对神经元的权重向量进行归一化,将方向和长度分开重新参数化 | 卷积网络、全连接网络、生成模型 | 加速收敛,提高稳定性 | 效果不一定显著,某些任务中不如BN |
注意,虽然他们是叫做归一化(批归一化、层归一化、实例归一化),是将多个输入特征归一化为均值为 0、方差为 1 的分布,使得网络的各层输入保持在较为稳定的范围内。本质上是进行标准化。再进行引入两个可学习参数 γ 和 𝛽,分别表示缩放和平移操作。
BN、LN、IN、GN 等归一化方法都包含了标准化的步骤,即它们都会将激活值调整为均值为 0、方差为 1 的分布,关键区别在于这些方法在不同的范围内计算均值和方差,以适应不同的训练场景和模型结构:
- Batch Normalization (BN):对一个批量中的所有样本的同一通道进行归一化。
- Layer Normalization (LN):对单个样本的所有通道进行归一化,不依赖批量。
- Instance Normalization (IN):对单张图像的每个通道分别独立进行归一化,不依赖批量。
正则化
L1 正则化(Lasso)
原理
使用场景
- 特征选择:L1 正则化能够将部分不重要的特征权重缩减为 0,从而实现特征选择。
- 高维稀疏数据集:如基因数据分析,模型能够自动去除无关特征。
优缺点
- 优点:生成稀疏解,易于解释,自动选择重要的特征。
- 缺点:对特征高度相关的数据,随机选择特征,模型不稳定。
L2 正则化(Ridge)
原理
使用场景
- 多重共线性问题:在特征间存在多重共线性的情况下,L2 正则化能够减小模型方差,防止模型对数据的过拟合。
- 回归任务:如岭回归(Ridge Regression)中常用来提升模型鲁棒性。
优缺点
- 优点:防止模型过拟合,能有效处理特征多重共线性问题。
- 缺点:不能进行特征选择,所有特征权重都被减小。
Elastic Net 正则化
定义
Elastic Net 是 L1 和 L2 正则化的结合,它同时引入了 L1 和 L2 正则化项,在获得稀疏解的同时,保持一定的平滑性。
公式
优点
- 结合了 L1 和 L2 正则化的优点,既能够稀疏化模型,又不会完全忽略相关性特征。
- 对高维数据和特征之间存在高度相关性的数据表现良好。
缺点
- 相比于单独使用 L1 或 L2 正则化,它有更多的超参数需要调节。
应用场景
- 常用于具有高维特征的数据集,特别是在需要稀疏化的同时,又不希望完全丢失特征之间相关性的信息。
Dropout
原理
Dropout 是一种用于深度神经网络的正则化方法。训练过程中,Dropout 随机将部分神经元的输出设置为 0,防止神经元对特定特征的依赖,从而提升模型的泛化能力。类似集成学习,每次生成的都不一样。丢弃概率 (p),通常设置为 0.2 到 0.5。
使用场景
- 深度神经网络:在深度学习中广泛应用,如卷积神经网络(CNN)、循环神经网络(RNN)等。
- 避免过拟合:尤其在模型复杂、训练数据较少的场景中,能够有效降低过拟合风险。
优缺点
- 优点:有效防止过拟合,提升模型鲁棒性。
- 缺点:训练时间较长,推理过程中不适用。
早停法(Early Stopping)
原理
早停法是一种防止模型过拟合的策略。在训练过程中,监控验证集的误差变化,当验证集误差不再降低时,提前停止训练,防止模型过拟合到训练数据。
使用场景
- 深度学习:几乎适用于所有深度学习模型,在神经网络训练中常用,防止训练过度拟合。
- 梯度下降优化:在任何基于梯度下降的优化过程中均可使用,如线性回归、逻辑回归等。
优缺点
- 优点:简单有效,能够动态调节训练过程。
- 缺点:需要合理设置停止条件,可能导致模型欠拟合。
Batch Normalization (BN)
虽然 Batch Normalization(BN)通常被认为是一种加速训练的技巧,但它也有正则化的效果。BN 通过对每一批次的输入进行归一化,使得模型训练更加稳定,防止过拟合。
原理
BN 通过将每个批次的激活值标准化为均值为 0,方差为 1,然后通过可学习的缩放和平移参数恢复特征分布。由于批次间的变化引入了一定的噪声,这对模型有一定的正则化作用。
使用场景
- 广泛应用于卷积神经网络(CNN)和全连接网络(FCN)中。
优点
- 提升训练速度,并有一定的正则化效果。
- 适合卷积神经网络和全连接神经网络,能有效减少过拟合。
缺点
- 在小批量训练时效果不稳定。
- 引入了额外的计算开销。
权重衰减(Weight Decay)
权重衰减是一种通过直接对权重进行衰减的正则化方法,它等价于 L2 正则化。
原理
在每次权重更新时,加入一个权重衰减项,使得权重参数逐渐减小,从而防止权重变得过大,减少模型的复杂度。
权重衰减直接在梯度更新中对权重施加一个额外的缩减项,而不需要在损失函数中添加正则化项。也就是说,权重衰减是通过直接操作梯度更新公式中的权重来实现的。:
其中 λ 是正则化系数,控制惩罚项的强度。该惩罚项会在每次梯度更新时对权重施加一个减小的力度,从而限制权重的增长。
L2正则化和权重衰减目标一致、数学形式相似,但是并不是同一种手段:
- 实现方式:
- L2 正则化:在传统的 L2 正则化中,惩罚项是直接添加在损失函数中。因此,反向传播时会计算这个惩罚项的梯度,并将它加入到权重的更新中。优化器仅对
Loss
求导。- 权重衰减:在权重衰减中,惩罚项不直接添加到损失函数中,而是在梯度更新时作为一个附加的“权重缩小”操作。在每次更新时,优化器会自动将权重按比例缩小。例如,对于SGD 优化器,权重更新公式变成:
- 优化器依赖:
- L2 正则化:不依赖于特定的优化器。正则项直接通过损失函数梯度传播,适用于所有优化器。
- 权重衰减:有些优化器(如 AdamW)在实现时将权重衰减项独立处理,而不会将其纳入损失的反向传播中。
使用场景
- 与 SGD 等优化器配合使用效果较好,尤其适用于大型神经网络,可以防止权重过大导致的过拟合。对于 Adam 优化器,建议使用 AdamW 版本来获得更合适的权重衰减效果。
优点
- 类似于 L2 正则化,简单易用,有效减少过拟合。
缺点
- 与 L2 正则化非常相似,但在某些优化器(如 Adam)中,权重衰减的实现可能会与 L2 正则化略有不同。在这些情况下,直接使用 L2 正则化可能会更符合预期的效果。
剪枝(Pruning)
剪枝通常在模型训练完成后进行,作为一种后处理技术。例如决策树中的剪枝操作。
原理
剪枝通过删除神经网络中重要性较低的连接或神经元,减少模型规模,从而达到简化网络的目的。剪枝不仅可以减少计算量和存储需求,还能在一定程度上防止过拟合,使模型在推理时更加高效。
应用场景
- 移动和嵌入式设备:剪枝特别适用于资源受限的设备(如手机、嵌入式系统、物联网设备)上,以减小模型尺寸和降低推理时间。
- 深度学习模型加速:剪枝广泛用于加速深度神经网络的推理过程,特别是在需要实时处理的任务中,如自动驾驶、图像识别等。
- 大规模模型压缩:在大规模模型(如大规模卷积神经网络、语言模型)中,剪枝可以显著减少计算量,使得模型更高效地运行。
优点
- 减少模型复杂度:剪枝可以显著减少网络中的参数,降低计算和内存需求,使得模型更适合在资源有限的设备上(如移动设备、嵌入式系统)运行。
- 提高模型的泛化能力:通过移除不重要的权重和神经元,减少模型对特定数据特征的过拟合,从而提高泛化能力。
- 加速推理:剪枝后的模型由于参数减少,推理速度得到显著提升。
缺点
- 需要额外的剪枝步骤
- 可能影响模型性能:如果剪枝不当,可能会削弱模型的表现,模型的准确性可能会大幅下降。
- 需要重新训练:剪枝后的模型有时需要重新微调或训练,以恢复模型性能。
以下是关于常见正则化方法的总结表格:
正则化方法 | 原理 | 使用场景 | 优点 | 缺点 |
---|---|---|---|---|
L1 正则化 (Lasso) | 通过增加权重绝对值惩罚项,实现特征稀疏化,部分权重缩减为 0。 | 高维稀疏数据集,特征选择任务。 | 生成稀疏解,易于解释,自动选择重要的特征。 | 对特征高度相关的数据,可能随机选择特征,导致模型不稳定。 |
L2 正则化 (Ridge) | 通过增加权重平方和惩罚项,减小权重大小,防止权重过大。 | 多重共线性问题、回归任务,如岭回归。 | 防止模型过拟合,处理特征多重共线性问题,模型更加鲁棒。 | 无法进行特征选择,所有特征权重都被减小。 |
Elastic Net 正则化 | L1 和 L2 正则化结合,既稀疏化模型,又保留相关性特征。 | 高维特征的数据集,稀疏化和相关性特征共存的场景。 | 结合 L1 和 L2 优点,稀疏化与平滑化并存,适用于高维数据。 | 增加了超参数调节的复杂性。 |
Dropout | 训练时随机丢弃部分神经元输出,防止神经元对特定特征的依赖,提升泛化能力。 | 深度神经网络,CNN、RNN,适合复杂模型或数据较少的场景。 | 有效防止过拟合,提升模型鲁棒性。 | 训练时间较长,推理时不适用。 |
早停法 (Early Stopping) | 监控验证集误差,验证集误差不再下降时提前停止训练,防止过拟合。 | 深度学习模型,梯度下降优化任务,如线性回归、逻辑回归。 | 简单有效,动态调节训练过程,减少过拟合。 | 需要合理设置停止条件,可能导致欠拟合。 |
Batch Normalization (BN) | 对每一批次的输入进行归一化,保持训练过程中的稳定性,并有一定正则化效果。 | 卷积神经网络和全连接神经网络,适用于大批量训练。 | 加速训练,减少过拟合,提升模型稳定性。 | 小批量训练时效果不稳定,增加计算开销。 |
权重衰减 (Weight Decay) | 在每次权重更新时加入权重衰减项,防止权重过大,等价于 L2 正则化。 | 大规模神经网络,常与 SGD、AdamW 等优化器配合使用。 | 简单有效,减少过拟合,类似 L2 正则化。 | 与 L2 略有不同,某些优化器中的效果不同。 |
剪枝 (Pruning) | 训练后移除神经网络中不重要的连接或神经元,减少模型规模,降低计算量,提升泛化能力。 | 移动设备、嵌入式系统、大规模模型压缩,适合资源受限设备和加速任务。 | 减少模型复杂度,提升推理速度,适合资源受限设备。 | 需要额外剪枝步骤,可能影响模型性能,需要重新训练。 |
这个表格总结了常见的正则化方法,涵盖了其工作原理、使用场景、优点和缺点。根据具体任务和数据集,可以选择合适的正则化方法来提高模型的泛化能力和训练效率。
Q&A
权重归一化和权重衰减的异同
二者都作用于模型的权重。都是用来提升泛化能力。但是有下面的不同:
特性 | 权重归一化 | 权重衰减 |
---|---|---|
主要目的 | 提升训练稳定性,帮助模型更快收敛 | 正则化,防止过拟合 |
实现方式 | 将权重分解为范数和方向 | 损失函数中增加 L2 正则化项,将权重缩小 |
应用位置 | 在使用权重归一化的层(例如卷积层或全连接层)中 | 在优化器的更新(如 SGD、Adam)步骤中,通过正则化参数应用 |
对梯度的影响 | 不影响权重的梯度更新计算 | 对每次权重更新施加惩罚,直接减小权重值 |
是否显式操作 | 是,对权重重参数化 | 否,通过损失函数中添加正则项间接实现 |
- 权重归一化:用于训练时提高稳定性和收敛速度,对权重进行重参数化分解,直接应用在层的权重上。
- 权重衰减:用于防止过拟合,对损失函数中的权重平方项施加惩罚,通过优化器在每次权重更新时施加影响。