我研究数据科学和ML主题已有一段时间了,我总是一度陷入困境,这使我感到非常困惑。
在类似Andrew Ng的课程中,定义为预测值和真实值之间的误差,例如线性回归表示为:
错误=预测值-y
在其他一些教程/课程中,错误表示为:
错误= y-预测值
例如,在Udacity的数据科学Nanodegree上,梯度下降权重更新由以下公式给出:
错误= y-预测值
W_new = W +学习率* np.matmul(错误,X)
同时,在其他几本书籍/课程中,相同的过程由给出:
错误=预测值-y
W_new = W-学习率* np.matmul(错误,X)
有人可以用这些不同的符号来帮助我吗?
谢谢!
编辑
在@bottaio回答之后,我得到了以下内容:
第一种情况:
# compute errors
y_pred = np.matmul(X, W) + b
error = y_pred - y
# compute steps
W_new = W - learn_rate * np.matmul(error, X)
b_new = b - learn_rate * error.sum()
return W_new, b_new
第二种情况:
# compute errors
y_pred = np.matmul(X, W) + b
error = y - y_pred
# compute steps
W_new = W + learn_rate * np.matmul(error, X)
b_new = b + learn_rate * error.sum()
return W_new, b_new
第三种情况:
# compute errors
y_pred = np.matmul(X, W) + b
error = y_pred - y
# compute steps
W_new = W + learn_rate * np.matmul(error, X)
b_new = b + learn_rate * error.sum()
return W_new, b_new
运行第三种情况,我得到:
这正是我想要实现的直觉。 使用 error = y-y_pred 和必须将步长计算用作正数 W_new = W + learning_rate * np.matmul(error,X)之间的关系是什么? W_new = W-学习率* np.matmul(错误,X)吗?
谢谢您的支持!!!!
答案 0 :(得分:1)
error = predicted_value - y
error' = y - predicted_value = -error
W = W + lr * matmul(error, X) = W + lr * matmul(-error', X) = W - lr * matmul(-error', X)
这两个表达式是看同一件事的两种方式。您向后传播错误。
说实话,第二个更清楚地说明了幕后发生的事情-误差只是相对于地面真实情况所预测的模型之间的差异(所预测的解释-y)。梯度下降步骤是关于沿与梯度相反的方向改变权重(解释负号)。