Python梯度下降法

作者: Black先森 | 来源:发表于2017-03-04 17:28 被阅读319次

本文主要讲解梯度下降算法,以及Python的实现一个简单的例子

梯度下降法又称为最速下降法,是 1847 年有数学家柯西提出的,是解析法中最古老的一种,其他解析方法或是它的变形,活受到启发得到,因此它是最优化方法的基础。

对于一个无约束问题的目标函数

可微函数
是一阶连续可微。由泰勒展开式得到: 泰勒展开式

选取

迭代方程
其中r(gamma)是迭代步长,这就是梯度下降法。当然由于梯度方向是变化最快的放向,取定x的变化方向为梯度的反方向,可以保证迭代速度最快,当然这个算法的缺点就是
  • 只使用一阶导数,迭代的速度较慢,控制好步长及初值,否则可能出现迭代不收敛的情况
  • 迭代到靠近极值的时候,迭代的速度减慢
  • 如果函数不是凸函数,则很可能只是局部最优解,而不是全局最优解。当然极值和最值概念,读者肯定清楚

接下来给一个例子帮助理解:

考虑函数 f(x) = x^2 -3x + 5此函数在x=1.5 时取得最小值为2.75
迭代初值为x(0)=3,迭代步长为r=0.01

f(x) 的梯度即为函数的导数df/dx = 2x - 3
x(n + 1) = x(n) - r df/dx =x(n) - h*(2 x(n) - 3)
x(n + 1) = 0.98 x(n) + 0.03
到此为止,可以通过求解以上数列的通项公式,然后求极限得到最终收敛1.5。在此我使用迭代1000次得到的结果为x=1.5000000008414838说明通过求解横坐标的收敛值,最终可以得到函数的最小值。

梯度下降法实现的思路:

  • 通过迭代横坐标最终收敛的值,确定函数取得极值的横坐标。
  • 迭代前后函数值的差小于某一个指定常数eps,如|f(x) - f(x0)| < eps,则跳出循环,否则继续迭代方程

下面给出两种实现方法的Python代码

def grad_dec(eps=1e-8, delta=0.001):
    """
    :param eps: 函数值误差
    :param delta: 迭代步长
    """
    x0 = 3.0
    f = lambda a: a * a - 3.0 * a + 5.0
    while True:
        x = x0 - delta * (2.0 * x0 - 3.0)
        if abs(x - x0) < eps: # 指定横坐标收敛跳出循环
            break
        x0 = x
    print(x, f(x))


if __name__ == '__main__':
    grad_dec()

输出结果为:
1.500004984618336  2.7500000000248463
def grad_dec(eps=1e-8, delta=0.001):
    """
    :param eps: 函数值误差
    :param delta: 迭代步长
    """
    x = 3.0
    f = lambda a: a * a - 3.0 * a + 5.0
    while True:
        f_start = f(x)
        x = x - delta * (2.0 * x - 3.0)
        f_end = f(x)
        if f_start - f_end < eps:
            break
    print(x, f(x))


if __name__ == '__main__':
    grad_dec()

输出结果为:
1.5015783203943125  2.750002491095267

仔细看程序,及输出的精度,你会发现什么?

我是边学边写笔记,如果写的不好的地方,请大神指出。(限于markdown输出LaTeX数学公式不是很方便,所以给出公式不是很多)

相关文章

  • 2020-08-19--梯度下降法01

    梯度下降法简介 多元线性回归中的梯度下降法 随机梯度下降法 梯度下降法 的调试 1.梯度下降法简介 不是一个机器学...

  • 感知机模型(Perceptron)的收敛性解读 | 统计学习方法

    Python复现,使用了随机梯度下降法,梯度下降法,adagrad和对偶形式四种算法: 舟晓南:感知机模型pyth...

  • 梯度下降法

    梯度下降法 本文主要是为了讲解 梯度下降法 的原理和实践,至于什么是梯度下降法,他能做什么,相信百度一下你就都知道...

  • Python梯度下降法

    本文主要讲解梯度下降算法,以及Python的实现一个简单的例子 梯度下降法又称为最速下降法,是 1847 年有数学...

  • 学习笔记:两种梯度下降法的思考

    在看梯度下降法的时候最初还真没看明白两种梯度下降法的区别,于是昨天散步的时候认真的思考了一下。 两种梯度下降法分别...

  • 最速梯度下降

    梯度下降法实现简单,当目标函数是凸函数时,梯度下降法的解是全局解。一般情况下,其解不保证是全局最优解,梯度下降法的...

  • 神经网络优化2

    梯度下降 梯度下降法 批梯度下降法(Batch Gradient Descent,BGD)是最常用的梯度下降形式,...

  • 2019-03-17神经网络——optimizer

    神经网络优化算法,通常有三种:小批量梯度下降法,随机梯度下降法和批量梯度下降法。 小批量梯度下降法 适用于训练数据...

  • 2019-11-01第二课二周优化算法

    指数加权平均: 动量梯度下降法: RMSprop:和动量梯度下降法相似 adam优化算法:将动量梯度下降法和RMS...

  • 机器学习系列(十六)——随机梯度下降Stochastic Gra

    随机梯度下降法Stochastic Gradient Descent 在之前的梯度下降法解决线性回归问题中,梯度向...

网友评论

    本文标题:Python梯度下降法

    本文链接:https://www.haomeiwen.com/subject/crrjgttx.html