损失函数为:
其中m为样本个数
那么当J最小时,我们认为θ为最优解,即:
那么,对θ求梯度(梯度的方向也是函数值增长最快的方向——增长就意味着由小变大,即由低等值线指向高等值线,即沿着梯度的反方向函数下降最快,所以后面的θJ减去偏导乘以步长)
那么只用让θ减去步长乘梯度的值,那么θ就向最优解移动,即函数值减小,当函数值不在减小的时候,即达到局部最优解。
那么对于θ改变可理解为一次对θ的每一项改变,即:
注:阿尔法表示的一个学习率,之所以添加这个学习率,是因为我们使用的是均方差,如果我们随机的方程预测的值与实际的值偏差比较大的话,均方差的值将会非常巨大,这样的话,可能造成我们的这个损失函数出现大幅度的偏移,我们称之为摆钟行为,所以为了避免出现这种情况,这个值就这么的诞生了,这个值的大小可以用来调整我们移动的的步子大小,不要调的太大(一般设定在0.0001),当然也应场景而定哈
其中化简为:
θj表示θ的第j项,那么如果每次只用一个样本更改就可以得到下面这个式子:
即第xij 表示为第i个样本的第j项。
那么对于每个样本都计算一遍就完成了对θj更改,那么对每一项都计算一遍就完成了对θ的改变。然后依次迭代。
这称为批量梯度下降算法(BGD)。
这个算法的时间复杂度为O(n^2),如果样本数量很大,时间复杂度就会变得非常大,所以一般使用随机梯度下降算法(SGD)。
随机梯度下降算法原理就是:批量梯度下降算法中每次迭代使用全部样本更新θ,而随机梯度下降算法是在m个样本中,按顺序每次取一个样本对θ进行更新,依次迭代m次。这样做J(θ)不一定收敛,但是会朝着局部最小值移动。