机器学习系列之梯度下降法

梯度下降法

梯度下降法,又叫最速下降法,是一种最优化算法。它用负梯度方向为搜索方向的,最速下降法越接近目标值,步长越小,前进越慢。
梯度下降法的计算过程就是沿着梯度下降的方向求解极小值。(亦可以沿着梯度上升的方向求解极大值)。它的迭代公式为:

ak+1=ak+γks(k)(11)

其中, s(k) 代表的是梯度的负方向, γk 表示梯度方向上的搜索步长。梯度方向可以通过求导得到,步长的设定则比较麻烦,太大的容易发散,找不到极小值的点,太小的话则收敛的速度比较慢。

  • 示例
    现有函数 f(x)=x43x3+2 ,则利用梯度下降方法解题的步骤如下:
    1.求梯度,即对函数求导, f,(x)=4x39x2
    2.根据式1-1,向梯度相反的方向移动 x
    3.循环迭代步骤2,直到x的值变化到使得f(x)在两次迭代之间的差值足够小,比如0.00000001,也就是说,直到两次迭代计算出来的 f(x) 基本没有变化,则说明此时 f(x) 已经达到局部最小值了。
    4.此时,输出 x ,此时求得的 x 就是使得 f(x) 取得最小值的 x 的值。
  • 代码
#python 代码
# encoding=utf-8

x_old = 0
x_new = 6
gamma = 0.01
precision = 0.00000001


# x = Symbol("x")
# f = (x ** 4) - (3 * (x ** 3)) + 2

#梯度下降算法
def df(x):
    y = 4 * x**3 - 9 * x**2
    return y


while abs(x_new - x_old) > precision:
    x_old = x_new
    x_new += -gamma * df(x_old)

print "The local minimum occurs at", x_new//The local minimum occurs at 2.24999996819

利用数学知识可以求得函数 f(x)=x43x3+2 的极小值在 94 取得,即2.25,代码求得的结果是2.24999996819,已经满足小于0.00000001的条件,可以发现代码是正确的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值