zoukankan      html  css  js  c++  java
  • 深度学习调参技巧

    完整机器学习实现代码GitHub
    欢迎转载,转载请注明出处https://www.cnblogs.com/huangyc/p/10111234.html
    欢迎沟通交流: 339408769@qq.com



    1. 前言

    我们在学习人工智能的时候,不管是机器学习还是深度学习都需要经历一个调参的过程,参数的好坏直接影响这模型效果的好坏。今天我们介绍下在深度学习中,调参的技巧主要分为哪些。

    2. 深度学习中的主要参数

    • 学习率(learning rate):学习率的取值一般是1、0.1、0.01、0.001等,我的建议是学习率从大到小,因为大的学习率运算的快,验证错误的速度快。并且我们的学习的过程一般通过Adam进行动态调整,基本问题不大。
    • 网络层数:先从1层开始。
    • 每层结点数:16,32,128,超过1000的情况比较少见。
    • batch size: 128左右开始。batch取太大会陷入局部最小值,batch取太小会抖动厉害,因此要选择一个合适的batch size。
    • 梯度裁剪: 限制最大梯度,如果梯度超过了阈值就进行截断。
    • dropout:在训练的时候可以设置一定的dropout,提升网络的健壮性,也能提升网络的计算速度。
    • 词向量embedding大小:embedding的大小一般是128和256。
    • 正负样本比例: 这个是非常忽视,但是在很多分类问题上,又非常重要的参数。很多人往往习惯使用训练数据中默认的正负类别比例,当训练数据非常不平衡的时候,模型很有可能会偏向数目较大的类别,从而影响最终训练结果。除了尝试训练数据默认的正负类别比例之外,建议对数目较小的样本做过采样,例如进行复制。提高他们的比例,看看效果如何,这个对多分类问题同样适用。在使用mini-batch方法进行训练的时候,尽量让一个batch内,各类别的比例平衡,这个在图像识别等多分类任务上非常重要。
    • 每层做BN操作,提高结果准确率
    • 尽量对数据做shuffle

    3. 自动调参

    人工一直盯着实验,毕竟太累。自动调参当前也有不少研究。下面介绍几种比较实用的办法:

    这个是最常见的。具体说,就是每种参数确定好几个要尝试的值,然后像一个网格一样,把所有参数值的组合遍历一下。优点是实现简单暴力,如果能全部遍历的话,结果比较可靠。缺点是太费时间了,特别像神经网络,一般尝试不了太多的参数组合。

    Bengio在Random Search for Hyper-Parameter Optimization中指出,Random Search比Gird Search更有效。实际操作的时候,一般也是先用Gird Search的方法,得到所有候选参数,然后每次从中随机选择进行训练。

    3.3 Bayesian Optimization

    贝叶斯优化,考虑到了不同参数对应的实验结果值,因此更节省时间。和网络搜索相比简直就是老牛和跑车的区别。具体原理可以参考这个论文: Practical Bayesian Optimization of Machine Learning Algorithms ,这里同时推荐两个实现了贝叶斯调参的Python库,可以上手即用:

    1. jaberg/hyperopt, 比较简单。
    2. fmfn/BayesianOptimization, 比较复杂,支持并行调参。

    4. 深度学习效果不好

    1. 选择合适的损失函数:平方损失,交叉熵损失
    2. 选择合适的Mini-batch size
    3. 选择合适的激活函数
    4. 选择合适的自适应学习率

      4.1 过拟合处理办法

    5. earyly stoping
    6. dropout
    7. 正则化
    8. BN
    9. bagging
    10. 数据增强

    5. 画图

    画图是一个很好的习惯,一般是训练数据遍历一轮以后,就输出一下训练集和验证集准确率。同时画到一张图上。这样训练一段时间以后,如果模型一直没有收敛,那么就可以停止训练,尝试其他参数了,以节省时间。

  • 相关阅读:
    某些输入文件使用或覆盖了已过时的 API
    laravel 重写以及500错误
    Ubuntu镜像使用帮助
    E: Sub-process /usr/bin/dpkg returned an error code (1) 解决方案
    python请求java Selenium Webdriver
    Selenium Grid 简易安装
    selenium + python 添加等待时间
    selenium帮助手册以及 webdriver的各种driver
    thinkphp结合layui上传图片
    thinkphp----替换写标签的方法
  • 原文地址:https://www.cnblogs.com/mfryf/p/11410856.html
Copyright © 2011-2022 走看看