在我使用梯度下降实现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)
此代码有效,但我仍然有一些问题:
1 *
更改为-1 *
并最小化-lhf
(根据公式),则不起作用。但为什么呢?答案 0 :(得分:4)
问题中的症状表明存在一个常见问题:问题的学习率或步长可能过高。
当学习速率过高时,通常会使要最大化的函数上下变化的锯齿形行为。特别是当你得到NaNs时。
最简单的解决方案是降低学习率,将当前学习率除以10,直到学习曲线平滑且没有NaN或上下行为。
当您使用TensorFlow时,您还可以尝试使用AdamOptimizer,因为这会在您训练时动态调整学习率。