神经网络模型无法正常工作时我们应该做什么(系列)——学习率(Learning Rate)

欢迎访问我的个人博客:zengzeyu.com

前言


当你进入深度学习领域,准备好深度神经网络,开始进行训练时,遇到这样一个大部分新手都会遇到的问题:你的神经网络没法正常工作,而你不知道该如何去修正它。你去问你的老板或者导师,他们也不知道该如何处理,因为在深度神经网络面前,他们和你一样也是新手。那么现在该如何来处理呢?
幸运的是我来啦!我列出了几乎所有新手都会犯的错误,以及我自己和身边一些学生在同样情况下遇到过的问题:

  1. 没有对数据进行标准化处理(Normalize)
  2. 没有检查结果(Results)
  3. 没有对数据进行预处理(Preprocess)
  4. 没有使用正则化方法(Regularlization)
  5. Batch Size 取值过大
  6. 学习率(Learning Rate)设置有误
  7. 最后一层 Layer 使用了错误的激活函数(Activation Function)
  8. 网络结构中包含了有害的梯度(Bad Gradient)
  9. 初始化网络权重(Network Weights)有误
  10. 神经网络结构过深(Too Deep)
  11. 使用了错误数目的隐藏单元(Hidden Units)

学习率(Learning Rate)设置有误


What?

学习率的大小对你能否轻松地训练网络有着至关重要的影响,如果你是一个新手,那么可以肯定的说,由于现存深度学习框架中的各种默认设置,会导致你的学习率肯定有误。

How?

将梯度剪裁(gradient clip)功能关闭。 找出训练过程中不会导致错误发散的最高学习率。并将学习率设置为相对于最高学习率值稍微低一点,这可能非常接近最佳的学习率。

Why?

大部分深度学习框架都默认开启梯度剪裁功能。这个选项可强制限定防止训练优化过程中每一步中可更改的最大数量的权重,从而使结果不会发散。这个操作可能很有用,特别是当你的数据有许多异常值(outlier),由于这些异常值产生的较大的误差会导致结果产生较大的梯度值和权重的更新,但是,另外一方面会导致手工难以调整到一个最优的学习率。 我发现大多数进入深度学习领域的新手都会把学习率设置得特别大,然后依靠剪裁梯度来解决这个问题,从而使整个训练过程变得及其缓慢,也导致无法预测改变学习率的结果。

And?

如果你对你的数据进行了合理的清洗,移除了大部分异常值,并且正确设置了学习率,那么你真的不需要进行梯度剪裁操作。如果没有它,你发现你的训练误差偶尔发散,然后如果一定要开启梯度剪裁,那么请一定记住:如果你看到你的训练误差发散,几乎可以肯定的说你的训练数据集有些问题,而梯度剪裁只是一个临时的解决办法而已,需要你从头至尾检查数据。


参考文献:
1. My Neural Network isn’t working! What should I do?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值