[梯度下降]我好像写错了,但是这怎么改

我记得我去年做过一次梯度下降的程序,用的是CSDN一位博主的方法,然后过了好久也没在意,这次终于有时间继续学习机器学习。


不过我从这里学习梯度下降的时候,我看不懂numpy代码,我就试试能不能用Julia对照原理来一遍,但是我调试的时候发现得到的Theta越来越大,我也不知道我哪里写错了,请各位帮我看看

function sgd(lr,X,Y)
    m = size(X)[1]
    Θ = vcat(X[1,:],1)
    # X: n * m
    # w: m * 1
    # 模型函数
    linreg(w,b) = map(x->x+b,X*w)
    # 梯度损失 导数
    derive_lose(Θ) = begin
        y = linreg(Θ[1:end-1],Θ[end])
        1/m * reduce(+,
                     map(i->vcat(X[i,:],1) * (y[i] - Y[i]),1:m))
    end

    limit = 0.001
    # 梯度下降 迭代
    iter = function iter(Θ,gradient,count)
        if all(x->abs(x) < limit,
               map(num->lr*num,gradient)) || count == 100
            Θ
        else
            Θ_next = Θ - lr * gradient
            gradient_next = derive_lose(Θ_next)
            iter(Θ_next,gradient_next,count+1)
        end
    end

    iter(Θ,derive_lose(Θ),1)
end

测试方法:
矩阵X为reshape(1:100,(100,1)),
矩阵Y为map(+,X,rand(-0.1:0.02:0.1,100))
学习率lr = 0.01
测试sgd(lr,X,Y)