当谈论到机器学习基本算法当时候,随机梯度下降算法应该是最常用的算法了。
梯度下降(GD)
如果想理解随机梯度下降,先简单复习下梯度下降吧:
![4a239f5ac546d974c5d055261286e0dd.png](https://i-blog.csdnimg.cn/blog_migrate/6bc1907f62b3064aac5873a0670286a7.jpeg)
梯度下降
如上图,梯度(Gradient)是指在J(w)函数某一点的导数,然后沿着导数向下的方向小步移动w坐标,直到达到J(w)函数的底部,这就是梯度下降,在机器学习中,J(w)一般是指损失函数。下面的图更是形象:
![ab9d09e5042d786de73a6340bbe4f834.png](https://i-blog.csdnimg.cn/blog_migrate/11961241a36154a98c857521524d5f0b.jpeg)
梯度下降
x0沿着下降最快的方向到达了x1,x1沿着最快的方向到达了x2、、、、一直到位于中间的区域。
随机梯度下降(SGD)
随机梯度下降就是从大量数据样本中,抽出来一些数据以便于对损失函数的梯度进行计算。
为什么有了GD还需要SGD呢?当然是有理由的:
1.更能有效的利用数据
如果是用GD,每一次迭代都需要进行n个sample梯度的计算,如下:
![b38b9854d75c8d40ad1a9141a4abd9c3.png](https://i-blog.csdnimg.cn/blog_migrate/d036cd334ac4495f0d123cd4752e44f9.jpeg)
梯度每下降一次,计算n次梯度
而SGD每下降一次,只需要选择其中更少的sample进行计算,然后迭代:
![94d3a816eae10a913c161aa2a76c5896.png](https://i-blog.csdnimg.cn/blog_migrate/3d4432f898df55972c5c21e836df2a9d.jpeg)
每下降一次,随机选择某些sample的梯度
2.第二点就是迭代性能更好,可以看下图
![232b2cb8460479047a1fe2daf8152093.png](https://i-blog.csdnimg.cn/blog_migrate/2e83e4d1bbacd0269ed64bcef59dd2ac.jpeg)
可以看到,SGD收敛的速度是比GD快的。当然,里面有太多细节了,这个后面看来要出一个系列了,每天学习一点点总比一口吃个胖子强