如何解决神经网络不学习的问题?

如何解决神经网络不学习的问题?

没有编译错误不代表程序没有BUG。你必须在确保代码没有bug后,再调试网络的性能。

最常见的关于神经网络的编程错误:

  • 定义了变量却从未使用(通常是因为复制粘贴)
  • 梯度更新的表达式错误
  • 权重更新没有被应用
  • 损失方程没有按正确的度量上判断(例如交叉熵损失可以表示为概率或者分对数)
  • 任务没有使用合适的损失(例如对一个回归任务使用分类交叉熵)

不完全配置选择清单:

  • 网络权重初始化不能太大,某个神经元的权重太大的话,会影响整个网络的行为。
  • 神经网络和回归模型关键的不同的是神经网络由很多非线性方程组成,也就是激活函数。目前常使用ReLU或相似的。ReLU会导致死神经元阻碍学习过程,leaky ReLU可以避免这个问题。
  • 残差连接可以使用训练更容易。另外,改变残差块中操作的顺序可以进一步的改善神经网络。

非凸函数的优化是困难的

  • 学习率 学习率设置太大会导致优化结果分歧,因为你会从谷底的一边跳到另一边。设置的太小将会阻止你取得任何真正的进展,并可能允许SGD固有的噪音超过你的梯度估计。
  • 梯度裁剪 如果梯度超过某个阈值,则重新缩放梯度的范数。通常设为1,但调整它可能会有效果。
  • 学习率调度 可以随着训练的进行调低学习率。
  • 选择一个好的小批次大小可以直接影响学习进程,因为大的小批次会比小的小批次有更小的方差。你想要你的小批次足够大到给梯度的方向提高足够的信息。同时又足够小到SGD可以调整你的网络。
  • SGD有很多变体。它们可以使用momentum,或调整学习率。设计一个好的优化器很重要。

Normalization

数据的尺度可以很大影响到训练。

  • 标准化数据,使之平均数为0,单位方差或者位于一个小区间如[-0.5, 0.5]可以提高训练。
  • 层的正则化可以通过保持神经元激活的均值和标准差提高网络训练。

Regularization

选择和优化网络regularization是建立模型的关键部分。避免模型对训练数据过拟合。然而,如何你的网络正努力降低在训练集上的损失,regularization反而会掩盖问题所在。当网络不能很好学习的时候,停到所有的regularization然后验证非regularization的网络是否运行正常。然后逐个将regularization添加回来,在这个过程验证它们。

Regularization不正确设置的例子:

  • L2, L1 regularization设置太大,所以权重会很小。
  • 两种regularization会冲突。很难同时使用layer normalization和dropout。

不要将参数设置写死。在一个配置文件中设置这些参数。当调整任何参数的时候,创建一个新的配置文件。最后在这些配置文件后面添加每一次迭代训练和验证的损失。这样做的目的是可以很容易的回看之前的实验结果。

原文链接:https://stats.stackexchange.com/questions/352036/what-should-i-do-when-my-neural-network-doesnt-learn

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值