【问题标题】:Maximum likelihood linear regression tensorflow最大似然线性回归张量流
【发布时间】:2017-01-27 11:20:40
【问题描述】:

在我为简单的线性回归问题实施了梯度下降的 LS 估计之后,我现在尝试对最大似然法做同样的事情。 我使用了来自wikipedia 的这个等式。必须找到最大值。

train_X = np.random.rand(100, 1) # all values [0-1)
train_Y = train_X
X = tf.placeholder("float", None)
Y = tf.placeholder("float", None)
theta_0 = tf.Variable(np.random.randn())
theta_1 = tf.Variable(np.random.randn())
var = tf.Variable(0.5)

hypothesis = tf.add(theta_0, tf.mul(X, theta_1))
lhf = 1 * (50 * np.log(2*np.pi) + 50 * tf.log(var) + (1/(2*var)) * tf.reduce_sum(tf.pow(hypothesis - Y, 2)))
op = tf.train.GradientDescentOptimizer(0.01).minimize(lhf)

此代码有效,但我仍有一些问题:

  • 如果我将 lhf 函数从 1 * 更改为 -1 * 并最小化 -lhf(根据公式),它不起作用。但为什么呢?
  • 在优化过程中,lhf 的值会上下波动。不应该只朝一个方向变化吗?
  • 在优化过程中,lhf 的值有时是 NaN。我怎样才能避免这种情况?
  • 在等式中,σ² 是误差的方差(对吗?)。我的价值观完全一致。为什么我的 var 值大于 100?

【问题讨论】:

    标签: python machine-learning tensorflow


    【解决方案1】:

    您问题中的症状表明存在一个常见问题:对于该问题,学习率或步长可能过高。

    当学习率太高时,通常会出现锯齿形行为,即要最大化的函数上下波动。特别是当你得到 NaN 时。

    最简单的解决方案是降低学习率,将当前的学习率除以 10,直到学习曲线平滑且没有 NaN 或上下行为。

    当您使用 TensorFlow 时,您还可以尝试使用 AdamOptimizer,因为它会在您训练时动态调整学习率。

    【讨论】:

    • 我将学习率更改为 0.000001,它确实有效(没有 NaN,单调递减),但是现在需要很长时间才能获得好的结果。如果它们应该基本相同,为什么比使用最小二乘法更难得到结果?
    • @schoeberl 我不确定,这可能是误差表面完全不同,因为最小二乘法可能具有更平滑的误差表面。你试过亚当吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    • 2017-08-27
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多