最大似然线性回归张量流

时间:2017-01-27 01:05:55

标签: python machine-learning tensorflow

在我使用梯度下降实现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。我怎么能避免这种情况?
  • 在等式中,σ²是误差的方差(对吗?)。我的价值观完全符合要求。为什么我的变量值大于100?

1 个答案:

答案 0 :(得分:4)

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

当学习速率过高时,通常会使要最大化的函数上下变化的锯齿形行为。特别是当你得到NaNs时。

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

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