首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >负重训练速度太慢

负重训练速度太慢
EN

Data Science用户
提问于 2019-02-18 10:46:29
回答 3查看 616关注 0票数 2

我正在从头开始写我自己的CNN代码。虽然我得到了快速、收敛和令人满意的结果,但训练后的权重值变化很小(而成本/损失函数却以一种看似收敛的方式迅速下降)。初始权值:卷积核为非零单元矩阵,完全连通层权为0's,激活函数为乙状结肠。数据标度从0到1。为什么权重变化这么小?

EN

回答 3

Data Science用户

发布于 2019-02-18 11:11:25

在机器学习中,消失梯度问题是利用基于梯度的学习方法和反向传播来训练人工神经网络的一个难点。在这些方法中,每个神经网络的权值都得到一个与误差函数的偏导数成比例的更新,与训练的每一个迭代中的当前权重成正比。问题是,在某些情况下,梯度会变小,有效地防止重量改变其值。在最坏的情况下,这可能完全阻止神经网络的进一步训练。

资料来源:https://en.wikipedia.org/wiki/Vanishing_梯度_问题

因此,梯度逐渐消失,直到到达神经网络的初始层,而权值的变化很小。

票数 2
EN

Data Science用户

发布于 2019-02-19 01:05:21

我敢打赌,你所遇到的问题至少是由于初始化错误,而且它也可能是一个糟糕的学习速度或激活函数。

您提到了将conv核初始化为“非零单位矩阵”和“完全连通层权重为0's”。首先,我不知道您所说的“非零单位矩阵”是什么意思,但是您绝对不应该将完全连接的层初始化为0。之所以如此,是因为如果该层中的所有神经元都有相同的值,它们的行为将非常相似,如果不是完全相同的话(取决于网络)。这将产生非常类似的特性,不会对网络造成很好的偏见。

我建议对Conv内核和密集内核使用随机初始化,对任何偏见使用零。

其次,没有说明你的激活函数,但是如果你使用的是一个梯度的激活函数,而这个梯度对学习率消失是敏感的,那么这也是一个问题。例如,使用乙状结肠激活和高学习率将导致几乎没有权重更新值。

另外,你认为重量变化的原因“那么小”是什么?我期望从-1,1缩放的数据,更新的幅度应该在1e-3左右的第一层和1e-4的最后一层。(从头顶上下来)

票数 1
EN

Data Science用户

发布于 2019-02-18 21:39:01

@feynman因为批量归一化不会让重量消失或爆炸,它使每一层之间的批次正常化。由于每个激活函数都有来自前几层的输入接近于零,因此前几层的增/减权效应将被抑制,从而避免雪球效应。

票数 0
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/45750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档