算法学习笔记——梯度下降法原理及其代码实现
梯度下降法原理以及代码实现 本篇博客承接本人上一篇关于逐步回归算法的引申,本篇将开始整理梯度下降算法的相关知识。梯度下降,gradient descent(之后将简称GD),是一种通过迭代找最优的方式一步步找到损失函数最小值的算法,基本算法思路可总结为如下几点: (1) 随机设置一个初始值 (2) 计算损失函数的梯度 (3) 设置步长,步长的长短将会决定梯度下降的速度和准确度,之后会详细展开 (4) 将初值减去步长乘以梯度,更新初值,然后将这一过程不断迭代 1. 原理讲解——二维平面情形 还是老规矩,先从二维平面场景开始,由易到难,步步深入,先上图: 为了方便思考,我们求解的是对上述函数图像的任意一个点 来说,沿着哪个方向走能够使得该函数的y上升幅度最大,那么逆向思维,该方向一旦求得,该方向的反方向不就是使得y下降速度最快的方向了吗?好,沿着这个思路继续,由于这个方向是我们要求的,不妨设该方向与x轴的夹角为 ,现在我们沿着这个方向走 的距离,将该向量正交分解可知,它只有在水平方向上的分量才会提供使得函数值发生变化的效果,竖直方向上分量不产生任何效果,于是可得以下函数值变化量函数: 显然,当 为0,也就是水平正方向时,可使得该函数值上升最快,也就是说水平负方向可使得该函数值下降最快,至此,二维平面上的使得函数值下降最快的方向我们就找到了: 2. 原理讲解——三维空间情形