【发布时间】: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