为什么我的梯度下降算法无法收敛? (用于逻辑回归)

时间:2019-08-08 17:09:09

标签: c++ logistic-regression gradient-descent armadillo

我有一个作业,说要使用梯度下降在c ++中实现逻辑回归。部分任务是让梯度下降幅度低于10e-07时停止下降。

我必须最小化://chart.googleapis.com/chart?cht=tx&chl=L(w)%20%3D%20%5Cfrac%7B1%7D%7BN%7D%5Csum%20log(1%20 %2B%20exp(-y_%7Bi%7Dw%5E%7BT%7Dx_%7Bi%7D))

但是,由于超过了最大迭代次数,我的梯度下降一直保持停止。我尝试了各种最大迭代阈值,它们都达到极限。我认为我的代码有问题,由于逻辑代价回归由于其成本函数的凹性而被认为是梯度下降的一项简单任务,因此梯度下降应该很容易找到最小值。

我正在使用armadillo库来处理矩阵和向量。

mock.VerifyFunc((fun x -> x.Send(It.IsAny<Alert>())), Times.Never())

我希望梯度下降停止,因为梯度的幅度降到了10e-07以下。

我的标签是{1,-1}。

1 个答案:

答案 0 :(得分:0)

通过记录或绘制每次迭代的值来验证对数似然性正在趋于收敛,并检查梯度的范数是否趋近于0。您应该进行梯度上升,因此应添加梯度而不是减去梯度。如果梯度范数持续增加,则意味着您没有朝着最佳方向发展。另一方面,如果渐变的范数“跳跃”但不为0,则应减小步长/学习率alpha,然后重试。

绘制和分析这些值将有助于调试和分析算法。