You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

微调卷积神经网络的学习率选择疑问

针对相似任务的CNN迁移学习优化思路

刚好之前做过不少CNN跨任务迁移的项目,来聊聊我的看法:

首先,咱们先明确常规的迁移流程:

假设我们有一个针对任务A训练完成的卷积神经网络,希望将其适配到相似的任务B。一般来说,我们会保留卷积权重与全连接层,然后针对新任务微调网络。进一步的简化操作包括冻结前一部分卷积层,仅训练最后几层卷积层。

不过常规做法里「用降低的学习率」这个建议,我一直觉得有点生硬——完全是一刀切的操作,没有考虑不同层的特征特性:底层卷积学到的是边缘、纹理这类通用特征,大概率已经适配任务B;中间层是任务相关的抽象特征,可能只需要小幅度调整;而顶层和全连接层是完全贴合任务A的输出特征,需要更灵活的更新来适配任务B。

基于这个观察,我更推荐几个更精细化的调整方式:

  • 分层差异化学习率:放弃统一的低学习率,给不同层级设置对应梯度的学习率:
    • 底层卷积层:直接冻结(学习率设为0),完全保留预训练的通用特征
    • 中间卷积层:设置基础学习率的1/10~1/5,只做微小的参数调整
    • 顶层卷积层+全连接层:使用正常的基础学习率,让它们快速适配任务B的输出需求
  • 渐进式解冻训练:分阶段逐步解冻和训练:
    1. 先冻结所有卷积层,只训练全连接层,让模型先适配任务B的输出空间
    2. 全连接层收敛后,解冻最后2~3层卷积层,用低学习率一起微调
    3. 再逐步往前解冻更多层,每次解冻都给对应层设置比上层更低的学习率,避免破坏已学的通用特征
  • 基于特征相似度的层策略:先跑一批任务B的数据,计算各卷积层输出特征和任务A对应层的相似度:
    • 相似度超过90%的层:直接冻结
    • 相似度在70%~90%的层:用极低学习率微调
    • 相似度低于70%的层:用正常学习率更新

这些方式比单纯用统一低学习率要灵活得多,能在保留预训练模型能力的同时,更快适配新任务。

内容的提问来源于stack exchange,提问作者Alex R.

火山引擎 最新活动