接近解决方案后,为什么梯度下降优化器会爆炸?

时间:2019-07-04 21:25:03

标签: tensorflow gradient-descent

我试图在Tensorflow中运行一个简单的线性回归示例,看来训练算法正在收敛到解决方案,但是一旦接近解决方案,它就会开始反弹并最终爆炸。 / p>

我正在传递y = 2x行的数据,因此梯度下降优化器应该能够轻松收敛到解决方案。

import tensorflow as tf

M = tf.Variable([0.4], dtype=tf.float32)
b = tf.Variable([-0.4], dtype=tf.float32)

x = tf.placeholder(tf.float32)
y = tf.placeholder(tf.float32)

linear_model = M * x + b

error = linear_model - y
loss = tf.square(error)

optimizer = tf.train.GradientDescentOptimizer(0.01).minimize(loss)

with tf.Session() as sess:
    init = tf.global_variables_initializer()
    sess.run(init)
    for i in range(100):
        sess.run(optimizer, {x: i, y: 2 * i})
        print(sess.run([M, b]))

这是结果。我圈出了接近解决方案的部分。为什么梯度下降一旦接近解便会中断,或者我做错了什么?

enter image description here

3 个答案:

答案 0 :(得分:1)

您的代码一次仅一次提供一次训练数据。这与随机梯度下降相对应,在训练过程中,损失值倾向于比批量和微型批量梯度下降更频繁地波动。此外,由于数据以x的递增顺序进行馈送,因此梯度值也随x一起增加。这就是为什么您会在时代的后半段看到更大的波动的原因。

答案 1 :(得分:0)

如果学习率太高,可能会发生这种情况;尝试降低它。

答案 2 :(得分:0)

我的猜测是您选择了高学习率。您可以使用网格搜索来找到最佳学习率,然后使用最佳学习率来拟合数据。