【问题标题】:Why does gradient descent update 0-valued weights at all?为什么梯度下降完全更新 0 值权重?
【发布时间】:2016-12-02 01:33:32
【问题描述】:

我正在阅读 this question 并且讨论对我来说很有意义:当所有权重都初始化为零时,梯度下降无法判断错误来自何处,因此无法更新这些权重。

我不明白为什么我不能凭经验看到这一点。我正在运行以下代码 (runnable here):

w = tf.Variable(tf.zeros([2,1]))
b = tf.Variable(tf.zeros([1]))

x = tf.placeholder(tf.float32, shape=[1, 2])
y = tf.placeholder(tf.float32, shape=[1])

pred = tf.sigmoid(tf.matmul(x, w) + b)

loss = tf.reduce_mean(tf.square(pred - y))

train_step = tf.train.GradientDescentOptimizer(0.1).minimize(loss)

with tf.Session() as sess:
    sess.run(tf.initialize_all_variables())
    for i in range(100):
        for x_ex, y_ex in dataset:
            sess.run(train_step, feed_dict={x: x_ex, y: y_ex})
            print(sess.run(w))

我看到的输出是这样的:

[[ 0.]
 [ 0.]]
[[ 0.02530853]
 [ 0.        ]]
[[ 0.02530853]
 [ 0.02499614]]
[[-0.00059909]
 [-0.00091148]]
[[-0.00059909]
 [-0.00091148]]
[[ 0.02472398]
 [-0.00091148]]
[[ 0.02472398]
 [ 0.02410331]]

如果权重从零开始,为什么梯度下降能够完全更新它们?

作为后续问题,如果权重被随机初始化为正数,但该权重的最佳值为负数,我们是否只需要相信在更新步骤中优化器不会意外地将权重更新为为0(从而停止权重的可更新性)?我知道权重 + 更新步骤正好为 0 的几率几乎可以忽略不计,但这仍然可能是一个问题,尤其是在 NN 中有数百万个权重的情况下。

【问题讨论】:

    标签: machine-learning neural-network tensorflow theory gradient-descent


    【解决方案1】:

    这不一定是梯度下降的问题,而是如何通过反向传播计算偏导数。

    bp 如何计算第 l 层权重的偏导数: δ/δΘ^{l}_{ij}=a^l_jδ^{l+1}_i 其中激活“a”正在应用非线性 函数 g(例如 sigmoid、tanh、ReLU)到神经元的输出: a^l_j=g(Θ^{l−1}a^{l−1}),其中 delta 是向后传播的差异 从后续层:δ^l=(Θ^l)^Tδ^{l+1}.∗g′(Θ^{l−1}a^{l−1})

    .* 代表元素乘法。

    因此,如果您查看了如何计算激活,零权重 防止激活增加或减少。全零权重 均值零激活。

    还有其他计算梯度的方法没有这个问题!

    【讨论】:

      猜你喜欢
      • 2022-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      • 2016-03-20
      • 2019-01-17
      • 2022-01-02
      • 1970-01-01
      相关资源
      最近更新 更多