随着深度学习的火热,梯度下降法也经常被人所提起。做为一种最常见的求解无约束问题最优化方法,它在ML和DL模型求解的过程中扮演着相当重要的角色,在接触和学习机器学习的过程中,看了很多教程,书籍,都有和梯度下降相关的内容,但看了那么多,始终不如自己动手试一试来的印象深刻,在此记录一下。
梯度下降法(gradient descent),是在求解无约束最优化问题过程中的一种最常用的方法。假设 f(x)是Rn上具有一阶连续偏导的函数,要求解的无约束最优化问题是:
梯度下降算法思想非常简单,导数的负方向就是函数值下降的方向。对于一个一元二次函数来说,当某一点导数为正数时候,曲线是上升的,其反方向就是函数值下降的方向。当某一点导数为负数时候,曲线是下降的,其正方向就是函数值下降的方向。稍微难以理解的是第三步,第三步中λ就是我们平常说的学习率,既求一个合适的λ使得函数值下降最大。其他的都非常易懂,接下来就用梯度下降法解决一个非常简单的问题,求解一个一元二次方程的最小值。
代码实现
1. 首先导入库
2. 生成数据并绘制
3. 定义函数求解f(x)及其导数g(x)
4. 定义学习率,epsilon,最大迭代次数
5. 梯度下降代码,初始化一个x0 = 5, 使用列表learn_x 记录每次学习到的x。
6. 绘制学习过程
以上就是关于使用梯度下降法解决一个非常入门非常简单的例子,对于没有了解过梯度下降法的朋友,算是能有个大概了解,但实际用到的梯度下降法,通常情况梯度是一个向量,而且求偏导的计算远比求一元二次函数的导数要复杂的多。附上 ipynb链接:链接: https://pan.baidu.com/s/1Kvl0QG6IW8AuxJiTEju4kw 提取码: dn3k。