zoukankan      html  css  js  c++  java
  • 深度学习中,使用regularization正则化(weight_decay)的好处,loss=nan

      刚开始训练一个模型,自己就直接用了,而且感觉训练的数据量也挺大的,因此就没有使用正则化,

    可能用的少的原因,我也就不用了,后面,训练到一定程度,accuracy不上升,loss不下降,老是出现loss=nan,输出的结果也就直接不预测,比如

    训练二分类器,直接判断固定为某一类别(比如固定输出为正类),这就使得准确率为0.5,阿呀呀,怎么办,不工作哦????

    后面想,训练崩了会不会是learning_rate太大了,这时候我就改小learning_rate,同样的事情继续发生,只不过能维持迭代次数变多了。。

    但是,对于“accuracy不上升,loss不下降”现象依旧是存在。这时候我就想呀,要想accuracy,loss变化(哪怕是变坏也好呀,总比基本不变强)

    那weight 肯定变化呀,我就把regularization_loss给打印出来,发现regularization_loss,也不变化,这样说明我的算法存粹是在局部极小值那边

    转悠,还亏我傻呆呆地看accuracy,loss log,还傻逼地调小learning_rate(regularization_loss变化都很小,说明learning_rat太小啦),

    然后,毅然决然的添加了loss_total = classification_loss + regularization_loss,当是参数是这样的

    learning_rate = 0.0000001

    weight_decay = 0.0001

    classification_loss = 60-70

    regularization_loss = 5,

    我适当增加了比例,weight_decay = 0.0003,增大了learning_rate=0.0001(大胆把,目的是要让权值动起来,太小几乎不动了)

    classification_loss = 60-70

    regularization_loss = old_regularization_loss *3 =15

    good!!!

    accuracy上升,loss开始下降(当然这时候的loss当然和之前的不一样,加了egularization_loss,但是下降趋势又回来了)

    当然,后面accuracy上升到90%,又出现loss=nan,这时候

    增加weight_decay = 0.0003,减小learning_rate=0.00002

    哇塞,accuracy又开始上升啦。

    总结,其实,当没有使用regularization,的时候,网络训练只是通过classification_loss,改变权值,这是后梯度下降的通道

    只有一个,当到达一定效果时,就jj了,不能用了。增加regularization,使得改变了整个模型的梯度,跳出了局部极值的怪圈,

    使得整个函数目标函数分布改变了。赞赞赞!!!从这个经验来说真好用。

    不过,也不是随便用,要看classification_loss 多少? regularization_loss?,连个量的比值多少,这里我发现比值在

    3:1,到5:1左右效果不错,比如

    weight_decay = 0.0001

    classification_loss = 60-70

    regularization_loss = 5,

    取3:1,那regularization_loss 要等于60/3=20,则和以前的相比要增大20/5=4倍,所以,参数改为

    weight_decay = 0.0004

    classification_loss = 60-70

    regularization_loss = 5*4=20,这时候

    accuracy上升了吧,loss开始下降了吧。

    当然事不绝对!!!

    附:

    regularization_loss 的作用是不让某一权很大,并调节其他权值,使得所有权值都相差在一定范围,使得各个神经元都能充分使用(个人观点)。

    有时需要交叉训练,比如一会儿让classification_loss做主导(learning_rate大,weight_decay小),有时则反过来,有时都小。

  • 相关阅读:
    PHP图像处理
    PHP文件上传
    PHP文件编程
    PHP面向对象
    【Codeforces Round #694 (Div. 1) B】Strange Definition
    【Codeforces Round #694 (Div. 2) C】Strange Birthday Party
    【Codeforces Round #693 (Div. 3) F】New Year's Puzzle
    【Codeforces Round #693 (Div. 3) G】Moving to the Capital
    【Codeforces Round #695 (Div. 2) E】Distinctive Roots in a Tree
    【Codeforces Round #695 (Div. 2) D】Sum of Paths
  • 原文地址:https://www.cnblogs.com/YouXiangLiThon/p/8885742.html
Copyright © 2011-2022 走看看