迁移学习|ResNet18

一、导入库

二、设置随机种子

三、数据增强和数据加载

四、加载预训练模型

五、定义损失函数和优化器

六、学习率调度器

七、训练模型

八、可视化训练过程

九、总结

1. 常见优化器概述

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

简介: SGD 是最基本的优化算法,通过在每个小批量(mini-batch)数据上计算梯度并更新模型参数。

优点:

  • 简单易实现。
  • 对大规模数据集和高维参数空间表现良好。

缺点:

  • 对学习率敏感,需要精心调整。
  • 可能在鞍点和局部最优点处停滞。
  • 收敛速度较慢,尤其是在非凸优化问题中。

适用场景:

  • 基础模型训练。
  • 需要精细控制训练过程的场景。

1.2 带动量的 SGD(SGD with Momentum)

简介: 在标准 SGD 的基础上引入动量概念,利用之前梯度的累积来加速收敛并减少震荡。

优点:

  • 提高了收敛速度。
  • 有助于跨越鞍点和陡峭的局部最优点。

缺点:

  • 需要调节动量参数,增加了超参数的复杂性。

适用场景:

  • 大多数深度学习任务,尤其是卷积神经网络(CNN)等。

1.3 自适应矩估计(Adam: Adaptive Moment Estimation)

简介: Adam 结合了动量和 RMSProp 的优点,利用一阶矩(均值)和二阶矩(未中心化的方差)来动态调整学习率。

优点:

  • 对学习率不敏感,适合各种网络结构。
  • 通常具有较快的收敛速度。
  • 内部有偏差校正,适用于小批量数据。

缺点:

  • 在某些情况下可能导致收敛到次优点。
  • 需要更多的内存来存储一阶和二阶矩。

适用场景:

  • 各类深度学习任务,特别是自然语言处理(NLP)和生成对抗网络(GAN)等需要快速收敛的场景。

1.4 RMSProp

简介: RMSProp 通过对每个参数使用不同的学习率,适应性地调整学习率大小,解决了 Adagrad 的学习率单调下降的问题。

优点:

  • 适用于非平稳目标。
  • 通常比 SGD 收敛更快。

缺点:

  • 对超参数(如学习率和衰减率)敏感。
  • 可能在某些任务上表现不如 Adam。

适用场景:

  • 循环神经网络(RNN)和需要处理非平稳数据的任务。

1.5 AdamW

简介: AdamW 改进了 Adam 的权重衰减方式,将权重衰减从梯度更新中分离出来,解决了 Adam 在使用 L2 正则化时的一些问题。

优点:

  • 更好地结合了权重衰减和 Adam 的自适应学习率特性。
  • 在一些任务上表现优于 Adam。

缺点:

  • 类似于 Adam,需要更多的内存。
  • 需要调节额外的权重衰减参数。

适用场景:

  • Transformer 模型和需要严格控制正则化的场景。

2. 如何选择合适的优化器

选择优化器时,需要根据具体任务、模型结构、数据集特点以及训练资源等因素进行权衡。以下是一些建议:

2.1 模型复杂度和规模

  • 大型模型(如 ResNet、Transformer):通常推荐使用 Adam 或 AdamW,因其自适应学习率特性能更有效地处理大规模参数。
  • 中小型模型:SGD 或带动量的 SGD 也是不错的选择,尤其是在需要严格控制训练过程时。

2.2 数据集大小和特性

  • 大规模数据集:SGD 和带动量的 SGD 更加适合,因其在大数据集上表现稳定。
  • 小规模或稀疏数据集:Adam 更具优势,因其在小批量数据上能更好地调整学习率。

2.3 训练速度和资源

  • 需要快速原型验证:Adam 是理想选择,因其收敛速度快,适合快速实验。
  • 资源有限:SGD 相对更节省内存,适合资源受限的环境。

2.4 收敛性质

  • 需要精确收敛:SGD 和带动量的 SGD 通常能更好地收敛到更优解。
  • 对超参数敏感度低:Adam 具有较强的自适应能力,对学习率不敏感。

3. 超参数调节建议

不同优化器有不同的超参数,需要根据具体情况进行调节:

3.1 学习率(Learning Rate)

  • SGD:常用范围在 0.01 到 0.1。可以使用学习率调度器(如 StepLR、ReduceLROnPlateau)动态调整。
  • Adam:常用初始学习率为 0.001,可以在需要时调低。
  • RMSProp:初始学习率通常设置为 0.01。

3.2 动量(Momentum)

  • 仅适用于带动量的 SGD。
  • 常用值在 0.8 到 0.99 之间。

3.3 权重衰减(Weight Decay)

  • 控制正则化强度,常用值在 1e-4 到 1e-3 之间。
  • AdamW 中的权重衰减与 L2 正则化结合更为有效。

3.4 其他参数总结

  • Adam 的 β 参数:常用默认值 β1=0.9, β2=0.999。
  • RMSProp 的 α 参数:通常设置为 0.99 或 0.9。
  • SGD:适用于需要严格控制训练过程的大规模模型,具有良好的收敛性质,但对学习率敏感。
  • Adam:具有自适应学习率特性,适用于快速实验和各种模型,但可能在某些情况下收敛到次优点。
  • AdamW:改进了 Adam 的权重衰减方式,适用于需要严格控制正则化的场景。
  • RMSProp:适用于处理非平稳目标的问题,如循环神经网络(RNN)。
  • 学习率调度器早停等技术可以进一步提升训练效果和稳定性。
相关推荐
芝麻团坚果3 分钟前
对subprocess启动的子进程使用VSCode python debugger
linux·ide·python·subprocess·vscode debugger
机器之心10 分钟前
全球十亿级轨迹点驱动,首个轨迹基础大模型来了
人工智能·后端
z千鑫11 分钟前
【人工智能】PyTorch、TensorFlow 和 Keras 全面解析与对比:深度学习框架的终极指南
人工智能·pytorch·深度学习·aigc·tensorflow·keras·codemoss
EterNity_TiMe_12 分钟前
【论文复现】神经网络的公式推导与代码实现
人工智能·python·深度学习·神经网络·数据分析·特征分析
雨中rain12 分钟前
贪心算法(1)
算法·贪心算法
不爱学习的YY酱18 分钟前
【操作系统不挂科】<CPU调度(13)>选择题(带答案与解析)
java·linux·前端·算法·操作系统
Stara051120 分钟前
Git推送+拉去+uwsgi+Nginx服务器部署项目
git·python·mysql·nginx·gitee·github·uwsgi
机智的小神仙儿28 分钟前
Query Processing——搜索与推荐系统的核心基础
人工智能·推荐算法
平头哥在等你29 分钟前
求一个3*3矩阵对角线元素之和
c语言·算法·矩阵
飞滕人生TYF32 分钟前
动态规划 详解
算法·动态规划