【问题标题】:Neural network weights too large?神经网络权重太大?
【发布时间】:2019-07-31 00:32:13
【问题描述】:

我正在实现一个反向传播的神经网络。权重初始化为 (-0.5, 0.5)。然而,在第一次将输入向前发送和错误并向后传播后,权重增加到 1000 左右,有时甚至是 2000。(在输入层和隐藏层之间)

网络的拓扑结构由 3 层组成:1 个输入层、1 个隐藏层和 1 个输出层。 输入层有 95 个节点,隐藏层有 3 个节点,输出层有 2 个节点。 训练数据集有 40,000 个条目,它们使用 z 分数进行归一化。

看到如此高的数字后,我怀疑我的实现,但话又说回来,在第一次传播时将学习率设置为 1,如果每个条目的 (output*error)=0.25 左右,这是合理的,那么权重更改为大约 1000 似乎是合理的。

不管怎样,神经网络中的权重应该这么高吗?

感谢

【问题讨论】:

  • 你用的是什么激活函数?
  • @Cristy 1/(1+e^(-input))
  • 你用的是什么优化算法?对于它们中的大多数,包括基本的随机梯度下降,学习率 1 太大、太多、太大了,你的模型可能永远不会以这样的学习率收敛。参见例如medium.com/octavian-ai/… 进行一些讨论。
  • 1 是相当高的学习率。我建议你尝试一些更小的东西,比如 0.1 看看会发生什么。

标签: tensorflow machine-learning neural-network


【解决方案1】:

这么高的价值不一定是坏事。权重可以非常高,也可以非常低。它们甚至可以为零!

假设你有两个类:A 和 B

A 类的输入通常总是在0.00001 附近。 B 类的值相同,但一些输入值在0.001 附近。

节点的输入是w * x

A) 0.00001 * 1000 = 0.001
B) 0.001 * 1000 = 1

当您将 A 之类的输出输入 sigmoid(您的激活函数)时,您几乎可以得到零结果。信号消失。

但是对于像 B 这样进入 sigmoid 函数的输出,你会得到一个更大的值(不确定,但可能在 1 左右)。所以信号是向前传播的。

您的体重值取决于很多因素:

  • 数据
  • 正在解决的问题
  • 您的激活函数选择
  • 每一层的神经元数量
  • 层数
  • 其他权重的值!

【讨论】:

  • 如果大多数权重的值都很高(例如 1000),而有些权重甚至更高(例如 40000?)怎么办?如果某些权重是负数怎么办? (例如-700)我想我应该提出权重波动很大的问题。我想知道这是否是网络中权重的正常行为?谢谢。
  • 权重可以是任何实数。在训练过程中,反向传播试图确定哪些信号通路将最小化输出误差。这里有一个问题要问您....模型是否可以为您提供准确的结果?你的错误率是多少?
猜你喜欢
  • 2019-08-14
  • 2017-09-01
  • 2019-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-10
  • 2018-11-27
相关资源
最近更新 更多