• 【小笔记】当一个算法性能不满意,可能是这几方面的原因


    【学而不思则罔,思而不学则殆】
    2023.9.9

    原因一:数据质量有问题

    数据决定了算法的上限,在大模型时代,这句话仍然管用(比如open AI对数据的标注要求就非常高)数据的问题主要有这几方面:

    • 1. 不同类别的样本数量很不平衡
      这是一个非常常见的问题,可能不同类型之间的样本数量差异就和现实世界贫富差异一样大。,虽然有很多算法可以适应这种情况,但最好还是要做一下处理,理想情况下,我们希望不同类别的样本数量比较接近,此时可以进行上采样或下采样,或更改损失函数(如对少样本进行加权)。
    • 2. 原始数据有很多低质量数据
      当样本比较均衡,模型训练性能还是比较差时,可能就是训练数据中有很多bad case。要找出这部分数据进行分析,看能否进行修正(有些bad case是自然形成的,不是错误生成的,此时就不能修正)
      对于文本,bad case就是有很多错别字,多字,少字等错误情形;对于图像,bad case就是有很多目标模糊,不完整,像素太小等情形。这些数据就算你标注的很好,但是因为噪音太多,也会导致模型训练效果不好,所以数据预处理是很有必要的,对这些低质量数据进行修正能够有效提高算法性能。
    • 3. 有很多数据的标注质量不高
      一是标错,二是标对了,但标的不好。
      在分类问题中,标错就是进行了错误的打标;标的不好,比如图像标注没有按贴近目标边缘进行标注,边缘留出了很多空间,甚至还把其它目标的内容给框选了。
    • 4. 打标的标准不清晰,有很多标注混淆的样本
      举个例,比如命名实体识别任务中,“刹车”这个词被标注了两次,一次标注为“部件”,一次标注为“状态”,你自己都分不清它应该为什么类别,算法怎么做呢?
      要有一个清洗的标注规范,不要有模棱两可的数据,否则这部分数据会成为模型性能的瓶颈,从混淆矩阵中来看,他们就是容易互相混淆的数据。

    💡留一个问题:
    若是一个样本你也实在分不清如何打标怎么办?这部分数据要不要去掉,要不要打标?
    /

    原因二:模型参数没设置好

    网上很多开源模型,用默认参数跑一遍,基本都能得到不错的效果,但很多时候我们还是要结合自己的数据和硬件配置,进行调整,一些常见的参数如下:

    • batch_size:
      这个呢主要影响的是训练的速度,一般不会影响性能。在GPU显存允许下,尽量设置更大的batch_size
    • epoch:
      这个参数若设置的太小,会导致模型训练欠拟合;若设置的太大,会导致模型过拟合,前者是训练阶段的性能都很差,后者是模型训练阶段很优秀,但预测阶段很垃圾(这就是模型把数据中的噪声都学到了)
      如何判断过拟合or欠拟合?用学习曲线。
    • 学习率
      在梯度下降法中,学习率是指每次更新参数时所采取的步长。学习率过大会导致参数更新过快,从而导致算法无法收敛到最小值;学习率过小会导致参数更新过慢,从而导致算法需要更多的迭代次数才能收敛到最小值。
    • 损失函数:
      (待补充)
    • 激活函数:
      (待补充)

    💡留一个问题:
    若预测数据中也有和训练阶段类似的噪声,那么过拟合模型会不会预测得很好,相当于对有数据有噪声也没有问题?
    /

    原因三:选的模型不厉害

    很多时候,我们都会产生这样的疑问:

    • 这个模型性能这么差,是不是我选的模型不够高大上?要不要用牛逼的模型试一下?
    • 哇,这个不是最新的,XXX年的模型性能都这么好,要不要用更牛逼的模型试一下?

    有没有共鸣?😂
    目前各个任务方向都有很多模型可供选择,从规则方法到统计学习,到深度学习,甚至到大模型。模型实现本身不再是一个问题,如何选择场景合适的才是问题,这需要你仔细分析自己的应用场景特点。
    就比如在NLP领域,大模型有大模型的牛逼,word2vec也还有它的适合场景,bert类算法在NLU领域仍有一席之地一样,很多时候杀鸡不需要牛刀。

    很多时候,只要你的数据处理的质量比较高,那么不同量级模型的差距并不会特别大,有时候模型参数提升了好几个数量级,但是算法性能确只是提升几个点,这中间,要评估一下成本和性能的平衡。
    因此,个人认为,算法模型没有最牛逼的,只有最适合的,什么是最适合的:在性能能达到一定要求时,选择更轻量级。

    怎么选择合适的算法模型,可参考我的另一篇小笔记:
    面对一个没搞过的任务,如何选择合适的算法模型

  • 相关阅读:
    Unable to create the rendering window after 100 tries.
    AIGC如何搞副业专栏更新了!
    Java当中的数组的定义与简单使用
    行情黯淡的新财季,中概股的确定性在哪里?
    VMware打开共享虚拟机后找不到/mnt/hgfs/文件夹,以及不能拖拽/复制粘贴等操作,ubuntu不能安装VMware tools
    【实验分享】CCIE—BGP反射器实验
    【MySql】MySQL查询中的笛卡尔积现象解析
    rancher导入集群时证书报错
    超标量处理器设计 姚永斌 第3章 虚拟存储器 --3.1~3.2 小节摘录
    阿里P7程序员斩获offer感言:突破Java瓶颈期我用了这一套路线图
  • 原文地址:https://blog.csdn.net/xiangxiang613/article/details/132780573