机器学习线性回归梯度下降算法(机器学习Deeplearning.ai笔记)(1)

回顾logistic损失函数

机器学习线性回归梯度下降算法(机器学习Deeplearning.ai笔记)(2)

上图是logistic回归的一般形式,其中L(a,y)是loss function,具体原因如下图,详情可看我之前写的其他文章。

机器学习线性回归梯度下降算法(机器学习Deeplearning.ai笔记)(3)

单样本的梯度下降

机器学习线性回归梯度下降算法(机器学习Deeplearning.ai笔记)(4)

要想计算损失函数L的导数,首先我们要向前一步计算损失函数的导数,即求”da”=dL(a,y)/da,即对a求偏导数。根据logx导数为1/x,结果为-y/a (1-y)/(1-a)。现在求得关于变量a的导数,现在可以向后计算一步求”dz”,”dz”=dL(a,y)/dz,计算过程如下:

机器学习线性回归梯度下降算法(机器学习Deeplearning.ai笔记)(5)

其中,左边-y/a (1-y)/(1-a)部分已经在之前计算了,右边部分为逻辑回归映射函数a=1/(1 e^(-z)),求导后得a*(1-a)。这就是反向求导的”链式法则”。

特别地:

机器学习线性回归梯度下降算法(机器学习Deeplearning.ai笔记)(6)

所以,在更新w1,w2,b时:

机器学习线性回归梯度下降算法(机器学习Deeplearning.ai笔记)(7)

机器学习线性回归梯度下降算法(机器学习Deeplearning.ai笔记)(8)

以上就是单个样本实例一次梯度更新步骤和整个流程的演算图。

m样本的梯度下降

当然这只是单个样本情况下,对于m个实例,全局成本函数(cost function)是一个求和结果,实际上是1到m项损失函数(loss function)和的平均数。

机器学习线性回归梯度下降算法(机器学习Deeplearning.ai笔记)(9)

在上述反向求导中,我们已经知道损失函数(loss function)单个样本如何更新w1,w2以及b。那么如何计算m个样本的反向求导呢?很简单,在成本函数(cost function)中,只需对每个样本进行以上步骤得到各项参数的梯度值后加总求平均,就会得到各项参数的全局梯度值。

具体算法

机器学习线性回归梯度下降算法(机器学习Deeplearning.ai笔记)(10)

如上图所示,初始化J=0,dw1=0,dw2=0,db=0,for循环遍历训练集,训练集的个数为m,同时计算相应的每个训练样本的导数,然后把它们加起来求平均,求得该批次样本的梯度值。最后利用图中右侧公式,对w1,w2,b进行更新,即完成了一次梯度下降。

通过不断重复梯度下降算法,中止条件如下:

1.迭代次数达到限制次数;

2.训练集中无可供更新的样本集;

3.loss不再下降或反而上升。

总结

对于梯度下降算法,有批量梯度下降法(Batch Gradient Descent),随机梯度下降法(Stochastic Gradient Descent)和梯度下降法(Gradient Descent)。

以上解析的是批量梯度下降法。即用了一些小样本来近似全部的样本,其本质就是我1个指不定不太准,那我用个30个或50个样本那比随机的要准不少了吧,而且批量的话还是非常可以反映样本的一个分布情况的。

随机梯度下降:由于多了随机两个字,也就是说我随机用样本中的一个例子来近似我所有的样本,来调整θ,因而随机梯度下降是会带来一定的问题,因为计算得到的并不是准确的一个梯度,容易陷入到局部最优解中。

梯度下降:在原始的梯度下降中,对于θ的更新所有的样本都有贡献,也就是参与调整θ,其计算得到的是一个标准梯度。理论上来说一次更新的幅度是比较大的。在样本不多的情况下,收敛的速度会更快。

机器学习线性回归梯度下降算法(机器学习Deeplearning.ai笔记)(11)

,