码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 模型训练时loss震荡严重的几个解决方案


    文章目录

    • 一、问题描述
    • 二、解决方案
      • 2.1 输入数据有误
      • 2.2 batch_size较小
      • 2.3 Loss函数设计不合理
      • 2.4 激活函数选用不合理
      • 2.5 学习率太大
      • 2.6 优化算法不合理
      • 2.7 正则化(Regularization)
      • 2.8 网络结构有问题
    • Reference

    一、问题描述

    如题。

    二、解决方案

    2.1 输入数据有误

    • 数据集太少
    • 输入数据为经过标准化:没有经过正则化处理的数据可能存在异常点,或者数据的量纲不一致。可以采用min_max归一化或者z-score标准化
    • 没有选择合理的数据增强没有经过合理的数据增强可能导致训练的时候网络学习的数据不是想要的最佳形式; 此时会出现loss曲线震荡;需要对数据进行特征分析,找到最佳数据增强方法。图像方向的数据增强方式一般有:
      • 旋转 | 反射变换(Rotation/reflection): 随机旋转图像一定角度; 改变图像内容的朝向;
      • 翻转变换(flip): 沿着水平或者垂直方向翻转图像;
      • 缩放变换(zoom): 按照一定的比例放大或者缩小图像;
      • 平移变换(shift): 在图像平面上对图像以一定方式进行平移;可以采用随机或人为定义的方式指定平移范围和平移步长, 沿水平或竖直方向进行平移. 改变图像内容的位置;
      • 尺度变换(scale): 对图像按照指定的尺度因子, 进行放大或缩小; 或者参照SIFT特征提取思想, 利用指定的尺度因子对图像滤波构造尺度空间. 改变图像内容的大小或模糊程度;
      • 对比度变换(contrast): 在图像的HSV颜色空间,改变饱和度S和V亮度分量,保持色调H不变. 对每个像素的S和V分量进行指数运算(指数因子在0.25到4之间), 增加光照变化;
      • 噪声扰动(noise): 对图像的每个像素RGB进行随机扰动, 常用的噪声模式是椒盐噪声和高斯噪声;
      • 颜色变换(color): 在训练集像素值的RGB颜色空间进行PCA, 得到RGB空间的3个主方向向量,3个特征值,

    2.2 batch_size较小

    batch数太小,并且label较多或者label的目标较少时,会导致loss函数震荡而不收敛,尤其是网络比较复杂时。

    调大batch_size对网络训练的影响

    • 优点:

      • 内存的利用率提高了,大矩阵乘法的并行化效率提高;
      • 跑完一次epoch(全数据集)所需迭代次数减少,对于相同的数据量的处理速度进一步加快;
      • 一定范围内,batchsize越大,其确定的下降方向就越准,引起训练震荡越小;
      • batchsize增大,处理相同的数据量的速度越快;
    • 缺点

      • 内存消耗严重,面临显卡内存不足问题;
      • 训练速度慢,loss不容易收敛;
      • batch_size过大导致网络收敛到局部最优点,loss下降不再明显;
      • batchsize增大,达到相同精度所需要的epoch数量越来越多;

    2.3 Loss函数设计不合理

    在深度学习里面,不同的loss针对的任务是有不同的,有些loss函数比较通用例如L1/L2等,而如perceptual loss则比较适合在图像恢复/生成领域的任务上。当loss出现问题的适合,想一想,是不是loss设置的有问题,别人在此领域的任务的方法是否也使用和你一样的loss。

    2.4 激活函数选用不合理

    一般来说,都几乎使用RELU作为全局激活函数,尽可能少的使用sigmoid激活函数(激活范围太小),容易造成梯度弥散、消失

    2.5 学习率太大

    一step前进的路程太长,会出现来回震荡的情况,但是学习率太小,收敛速度会比较慢;

    2.6 优化算法不合理

    一般来说使用Adam作为优化器的默认参数。但有些情况下经过仔细调整的SGD算法性能可能更好

    2.7 正则化(Regularization)

    通过正则化进行约束,一般的方法可以通过优化器的权重衰减方法,即训练到后期,通过衰减因子使权重的梯度下降越来越缓慢。或者BN、Dropout以及L1/L2

    2.8 网络结构有问题

    检查网络结构代码,是否有细节上的错误

    Reference

    [1] 算法性能分析:“AUC提升了效果指标下降了”之原因分析
    [2] https://zhuanlan.zhihu.com/p/481038077
    [3] 深度模型 loss为nan解决方案详解

  • 相关阅读:
    好心情平台:30分钟就可改善抑郁情绪的运动处方
    108.(前端)分类管理删除值实现——¶elementui可移除标签
    golang数据库连接池参数设置
    C++设计模式_10_ Prototype 原型模式(小模式,不太常用)
    什么是JavaScript中的严格模式(strict mode)?应用场景是什么?
    Win10安装-我们无法创建新的分区,也找不到现有的分区
    Android通知监听服务之NotificationListenerService使用篇
    Node.js入门 | 青训营笔记
    UniPro集成华为云WeLink 为企业客户构建互为联接的协作平台
    英国央行已经完成加息周期,大幅下调英镑预期
  • 原文地址:https://blog.csdn.net/qq_35812205/article/details/126441633
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号