gpt4 book ai didi

gradient - 为什么我的梯度是错误的(Coursera、Logistic 回归、Julia)?

转载 作者:行者123 更新时间:2023-12-04 17:32:56 26 4
gpt4 key购买 nike

我正在尝试从 Julia 中的 Coursera 进行逻辑回归,但它不起作用。

计算梯度的 Julia 代码:

sigmoid(z) = 1 / (1 + e ^ -z)

hypotesis(theta, x) = sigmoid(scalar(theta' * x))

function gradient(theta, x, y)
(m, n) = size(x)
h = [hypotesis(theta, x[i,:]') for i in 1:m]
g = Array(Float64, n, 1)
for j in 1:n
g[j] = sum([(h[i] - y[i]) * x[i, j] for i in 1:m])
end
g
end

如果使用此梯度,则会产生错误的结果。不知道为什么,代码似乎是正确的。

full Julia script .在这个脚本中,最佳 Theta 是使用我的梯度下降实现和使用内置的 Optim 包计算的,结果是不同的。

最佳答案

梯度是正确的(高达标量倍数,正如@roygvib 指出的那样)。问题在于梯度下降。

如果你在梯度下降过程中查看成本函数的值,你会看到很多 NaN ,
这可能来自指数:
降低步长(例如,到 1e-5 )将避免溢出,
但是您将不得不大量增加迭代次数(可能增加到 10_000_000 )。

更好(更快)的解决方案是让步长变化。
例如,可以将步长乘以 1.1如果成本函数在一步后有所改善
(在这个方向上最佳仍然看起来很远:我们可以走得更快),
并除以 2如果没有(我们走得太快,最终超过了最小值)。

还可以在梯度方向上进行线搜索以找到最佳步长
(但这很耗时,可以用近似值代替,例如 Armijo 规则)。

重新调整预测变量也有帮助。

关于gradient - 为什么我的梯度是错误的(Coursera、Logistic 回归、Julia)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37068854/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com