zoukankan      html  css  js  c++  java
  • 超参数调优

    在神经网络中,有许多超参数需要设置,比如学习率,网络层数,神经元节点数

    所谓超参数,就是不需要训练的参数,需要人为设定的参数。

    这些超参数对模型的训练和性能都有很大影响,非常重要,那么这些超参数该怎么设定呢?

    一般我们可以根据经验来设定,但是经验毕竟有限,而且也不科学。

    验证数据

    在模型训练时,我们通常会有训练数据和测试数据,训练数据用来训练,测试数据用来测试,但是这两个数据都不能用来调参,为什么呢?因为如果用训练数据来调参,很容易过拟合,如果用测试数据来调参,模型的泛华能力很难保障。

    所以只能用验证数据来调参。测试数据是用来评估模型的,而且最好只用一次。

    在选取验证数据时要打乱数据,原因如下:

    1. 使得类别分布均匀,避免选取数据中只有某些类别

    2. 如果不打乱,比如样本按类别顺序0-10排列,那么刚开始模型很快找到类别0的权重,但是到类别1时,又成了类别1的权重,最后成了类别10的权重,当然没有这么极端,但是模型肯定会存在“偏向”

    超参数的优化

    超参数优化总体思路是重复探索,并且不断缩小探索范围。

    具体怎么理解呢?

    就是刚开始设置一个较大的范围,然后随机选择某个值,训练并评估模型的效果,然后重复该操作,从多个结果中选择效果好的对应的参数区间,这就缩小了探索范围,

    然后重复上述操作,再次缩小范围,直到取到合适范围。(研究表明随机取值效果比有规律取值效果好)

    此过程注意以下几点:

    1. 初始范围设定以10的阶乘为尺度,如 10-3到104

    2. 每次训练迭代次数不能太大,因为神经网络训练本来就比较慢,在优化过程中需要多次训练,如果每次训练迭代次数很多,总耗时会非常长,

    而且我们只是为了选参数,如果参数合适,会很快收敛,只要收敛效果就会不错,没必要非得收敛到最小值

    总结一下步骤

    1. 设定初始范围,每个参数一个范围

    2. 随机选择参数值

    3. 训练模型验证精度

    4. 重复2 3步,根据精度来缩小取值范围

    5. 返回步骤1

    图示如下

    上图是多次试验后,按精度高低顺序画出的效果图,可以看到前5次准确率在0.8以上,从第6次开始,精度跌倒0.6以下

    前5个图对于的参数如图

    这个结果可以看出,学习率在 0.001 到0.01之间,等等

    总结

    其实无论是机器学习还是深度学习,调参思路都差不多,在实际项目中,要结合实际情况灵活运用。

  • 相关阅读:
    新组件或功能怎么依附到已有的架构上
    高内聚、低耦合
    软件质量的定义
    软件架构与组件
    架构设计之拥抱着变化而设计(部分讲义分享)
    组件设计原则之概念篇(四)
    抽象类(接口类)的作用
    类,抽象基类,接口类三者间的区别与联系(C++)
    软件的可变性
    软件设计的复杂度
  • 原文地址:https://www.cnblogs.com/yanshw/p/10599065.html
Copyright © 2011-2022 走看看