
📑前言
在深度学习中,构建一个神经网络只是第一步。真正决定模型性能的,往往是如何训练它——即使用什么样的优化算法、如何防止过拟合、以及如何高效地调参。
一、模型优化算法:让梯度下降更聪明
神经网络的训练本质是通过反向传播计算梯度,并利用优化算法更新参数以最小化损失函数。不同的优化器在收敛速度、稳定性、泛化能力上表现各异。
1.1 SGD(随机梯度下降)——最基础但最经典
全称:Stochastic Gradient Descent
公式:
θ t + 1 = θ t − η ⋅ ∇ θ J ( θ ; x i , y i ) \theta_{t+1} = \theta_t - \eta \cdot \nabla_\theta J(\theta; x_i, y_i) θt+1=θt−η⋅∇θJ(θ;xi,yi)
其中:
- θ \theta θ:模型参数
- η \eta η:学习率
- ∇ θ J \nabla_\theta J ∇θJ:单个样本或小批量的损失梯度
优点:
- 简单直观,易于实现
- 在凸问题中收敛性好
缺点:
- 收敛慢,容易震荡
- 对学习率敏感
- 难以处理稀疏梯度或复杂地形(如鞍点)
改进版:SGD + Momentum(动量)
引入“惯性”概念,加速收敛并减少震荡:
v t = γ v t − 1 + η ∇ θ J ( θ ) v_t = \gamma v_{t-1} + \eta \nabla_\theta J(\theta) vt=γvt−1+η∇θJ(θ)
θ t + 1 = θ t − v t \theta_{t+1} = \theta_t - v_t θt+1=θt−vt
1.2 RMSprop —— 自适应学习率的先驱
提出者:Geoffrey Hinton(2012)
核心思想:对每个参数使用不同的学习率,根据历史梯度平方的移动平均来调整。
公式:
E [ g 2 ] t = β E [ g 2 ] t − 1 + ( 1 − β ) g t 2 E[g^2]_t = \beta E[g^2]_{t-1} + (1 - \beta) g_t^2 E[g2]t=βE[g2]t−1+(1−β)gt2
θ t + 1 = θ t − η E [ g 2 ] t + ϵ g t \theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{E[g^2]_t + \epsilon}} g_t θt+1=θt−E[g2]t+ϵηgt
优点:
- 解决了 AdaGrad 学习率过早衰减的问题
- 对非平稳目标函数更鲁棒
- 特别适合 RNN 等序列模型
缺点:
- 缺少动量机制,收敛可能不够平稳
1.3 Adam(Adaptive Moment Estimation)——当前最主流的选择
提出时间:2014 年
结合了:Momentum + RMSprop 的优点
核心思想:
- 计算梯度的一阶矩(均值)和二阶矩(未中心化的方差)
- 对两个矩进行偏差校正
公式简述:
m t = β 1 m t − 1 + ( 1 − β 1 ) g t (一阶动量) m_t = \beta_1 m_{t-1} + (1 - \beta_1) g_t \quad \text{(一阶动量)} mt=β1mt−1+(1−β1)gt(一阶动量)
v t = β 2 v t − 1 + ( 1 − β 2 ) g t 2 (二阶动量) v_t = \beta_2 v_{t-1} + (1 - \beta_2) g_t^2 \quad \text{(二阶动量)} vt=β2vt−1+(1−β2)gt2(二阶动量)
m ^ t = m t 1 − β 1 t , v ^ t = v t 1 − β 2 t \hat{m}_t = \frac{m_t}{1 - \beta_1^t}, \quad \hat{v}_t = \frac{v_t}{1 - \beta_2^t} m^t=1−β1tmt,v^t=1−β2tvt
θ t + 1 = θ t − η v ^ t + ϵ m ^ t \theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat{v}_t} + \epsilon} \hat{m}_t θt+1=θt−v^t+ϵηm^t
优点:
- 收敛快,适合大多数任务
- 对超参数不敏感(默认值通常表现良好)
- 广泛用于 NLP、CV、推荐系统等
缺点:
- 有时泛化性能不如 SGD + Momentum(尤其在图像分类任务中)
- 可能陷入“锐极小”(sharp minima),影响泛化
替代方案:AMSGrad、AdamW(修正权重衰减)、NAdam(Nesterov + Adam)
二、正则化技术:防止过拟合,提升泛化能力
即使模型训练误差很低,也可能在测试集上表现糟糕——这就是过拟合。正则化技术通过限制模型复杂度来提升泛化能力。
2.1 L1 正则化(Lasso)
原理:在损失函数中加入参数绝对值之和:
J reg ( θ ) = J ( θ ) + λ ∑ i ∣ θ i ∣ J_{\text{reg}}(\theta) = J(\theta) + \lambda \sum_i |\theta_i| Jreg(θ)=J(θ)+λi∑∣θi∣
特点:
- 倾向于产生稀疏解(部分权重变为 0)
- 可用于特征选择
- 适合高维稀疏数据
缺点:
- 不可导(在 0 处),需次梯度方法
- 可能不稳定
2.2 L2 正则化(Ridge / 权重衰减)
公式:
J reg ( θ ) = J ( θ ) + λ 2 ∑ i θ i 2 J_{\text{reg}}(\theta) = J(\theta) + \frac{\lambda}{2} \sum_i \theta_i^2 Jreg(θ)=J(θ)+2λi∑θi2
特点:
- 使权重趋向于小值但不为零
- 提高数值稳定性
- 在深度学习中常称为“权重衰减(Weight Decay)”
- AdamW 中明确区分了权重衰减与梯度更新
缺点:
- 不产生稀疏性
注意:L2 正则化等价于在参数上施加高斯先验(贝叶斯视角)
2.3 Dropout —— 训练时的“神经元随机失活”
提出者:Hinton 等(2014)
思想:在训练过程中,以概率
p
p
p 随机“关闭”一部分神经元
实现方式:
- 每层输出乘以一个伯努利掩码(mask)
- 测试时所有神经元都启用,但输出乘以保留概率 ( 1 − p ) (1-p) (1−p)
优点:
- 有效防止神经元共适应
- 相当于集成多个子网络的平均效果
- 实现简单,广泛用于全连接层
缺点:
- 增加训练时间(每次随机)
- 卷积层中效果有限(通常用 BatchNorm 替代)
变体:
- DropConnect:随机断开连接而非神经元
- Spatial Dropout:用于 CNN,整通道丢弃
- Alpha Dropout:配合 SELU 激活函数使用
三、超参数调优与自动化机器学习(AutoML)
深度学习模型的成功高度依赖于超参数设置,如学习率、批次大小、层数、正则化系数等。手动调参耗时且依赖经验,因此 AutoML 应运而生。
3.1 常见超参数类型
类型 | 示例 |
---|---|
优化相关 | 学习率、动量、优化器类型 |
网络结构 | 层数、每层神经元数、激活函数 |
正则化 | Dropout 概率、L2 系数 |
数据相关 | 批次大小、数据增强方式 |
3.2 超参数搜索方法
(1)网格搜索(Grid Search)
- 遍历所有参数组合
- 优点:全面
- 缺点:计算成本高,维度灾难
(2)随机搜索(Random Search)
- 随机采样参数组合
- 优点:比网格搜索更高效(Bengio 发现某些参数不敏感)
- 缺点:仍可能浪费资源
(3)贝叶斯优化(Bayesian Optimization)
- 使用高斯过程建模目标函数
- 通过“采集函数”(如 EI)选择下一个采样点
- 优点:高效,适合昂贵的黑箱函数
- 工具:
Hyperopt
、Optuna
、scikit-optimize
(4)进化算法 / 粒子群优化
- 模拟自然选择或群体行为
- 适合离散或混合参数空间
3.3 自动化机器学习(AutoML)
AutoML 的目标是自动化整个机器学习流程,包括:
- 模型选择
- 超参数优化
- 特征工程(部分)
- 架构搜索(NAS)
主流 AutoML 框架:
工具 | 特点 |
---|---|
Optuna | 轻量级,支持贝叶斯优化、可视化 |
Hyperopt | 支持 Tree-structured Parzen Estimator (TPE) |
Keras Tuner | 专为 Keras/TensorFlow 设计 |
AutoKeras | 基于 Keras 的 NAS 工具,一键训练 |
Google Cloud AutoML | 商业化平台,支持图像、文本、表格 |
H2O.ai AutoML | 开源,支持表格数据自动建模 |
3.4 神经架构搜索(NAS)
目标:自动设计神经网络结构(如 ResNet、EfficientNet 的自动发现)
典型方法:
- 强化学习:用 RNN 生成网络结构,用 RL 评估性能
- 可微分架构搜索(DARTS):将搜索空间连续化,用梯度优化
- 进化算法:通过“变异+选择”生成更优结构