初识梯度下降法及小试牛刀

        随着深度学习的火热,梯度下降法也经常被人所提起。做为一种最常见的求解无约束问题最优化方法,它在ML和DL模型求解的过程中扮演着相当重要的角色,在接触和学习机器学习的过程中,看了很多教程,书籍,都有和梯度下降相关的内容,但看了那么多,始终不如自己动手试一试来的印象深刻,在此记录一下。

        梯度下降法(gradient descent),是在求解无约束最优化问题过程中的一种最常用的方法。假设 f(x)是Rn上具有一阶连续偏导的函数,要求解的无约束最优化问题是:

无约束最优化问题
梯度下降法

        梯度下降算法思想非常简单,导数的负方向就是函数值下降的方向。对于一个一元二次函数来说,当某一点导数为正数时候,曲线是上升的,其反方向就是函数值下降的方向。当某一点导数为负数时候,曲线是下降的,其正方向就是函数值下降的方向。稍微难以理解的是第三步,第三步中λ就是我们平常说的学习率,既求一个合适的λ使得函数值下降最大。其他的都非常易懂,接下来就用梯度下降法解决一个非常简单的问题,求解一个一元二次方程的最小值。

求解一元二次函数最小值

代码实现

1. 首先导入库

2. 生成数据并绘制

生成数据并绘制

3. 定义函数求解f(x)及其导数g(x)

f(x)及g(x)

4. 定义学习率,epsilon,最大迭代次数

学习率,epsilon,最大迭代次数

5.  梯度下降代码,初始化一个x0 = 5, 使用列表learn_x 记录每次学习到的x。

梯度下降

6. 绘制学习过程

学习过程

        以上就是关于使用梯度下降法解决一个非常入门非常简单的例子,对于没有了解过梯度下降法的朋友,算是能有个大概了解,但实际用到的梯度下降法,通常情况梯度是一个向量,而且求偏导的计算远比求一元二次函数的导数要复杂的多。附上 ipynb链接:链接: https://pan.baidu.com/s/1Kvl0QG6IW8AuxJiTEju4kw 提取码: dn3k。

你可能感兴趣的:(初识梯度下降法及小试牛刀)