梯度下降法

本文详细介绍了梯度下降法的基本概念,包括偏导数、方向导数和梯度,以及在实际问题中的应用,如一元凸函数和非凸函数的优化实例,以及多元函数的梯度下降策略。通过具体代码演示,揭示了梯度法在寻找局部最小值中的作用,同时强调了初始值选择对全局最优解的影响。
摘要由CSDN通过智能技术生成

梯度下降法

1.数学基础知识:
1.1偏导数

​ 求x的偏导数,y为定值,沿y反向切片,研究z与x的关系

1.2方向导数

​ 用三个维度的偏导数内积方向向量(相当于偏导数向量在给定方向上的投影)

1.3梯度

​ 方向导数的方向与偏导数向量相同(梯度下降求极小值,梯度上升求极大值)


2.梯度下降法

​ θ1 = θ0 - α*J(θ)【J是梯度】

2.1形象化理解
  • **失忆:**有一只失忆的兔子不知道自己在哪里,也不知道自己曾经去过哪里
  • **浓雾:**兔子来到一个被浓雾所包裹的大山之中,它只能看见自己脚下的路
  • **梯度下降法:**通过不断的行走,它可以走到一个山窝里,但因为浓雾弥漫,它看不见自己是否处于整座山的最低点,因此只能找到局部最优解而不一定找到全局最优解(因此初始值的选择对其起着决定性的作用)
2.2实战练习
2.2.1一元凸函数的梯度下降实现
#f(x) = x^2 + 2x
def base_func(x):
    return x**2 + 2*x
def base_daoshu(x):
    return 2*x + 2
x_ori = 5
eta = 0.01
for i in range(300):
    result = base_func(x_ori)
    x_ori -= eta * base_daoshu(x_ori) 
print(x_ori)
print(result)
#输出结果为:
#-0.9857193530533586
#-0.9997876542303055
2.2.2一元非凸函数的梯度下降实现
#一元非凸函数
#f(x) = x^4 + 2x^3 - 3x^2 - 2x
def base_func(x):
    return x**4 + 2*x**3 - 3*x**2 - 2*x
def df(x):
    return 4*x**3 + 6*x**2 - 6*x - 2
x1 = -3
x2 = 0
x3 = 1.6
x4 = -1
eta = 0.05
for i in range(20):
    result1 = base_func(x1)
    result2 = base_func(x2)
    result3 = base_func(x3)
    result4 = base_func(x4)
    x1 -= df(x1)*eta
    x2 -= df(x2)*eta
    x3 -= df(x3)*eta
    x4 -= df(x4)*eta
print(x1)
print(x2)
print(x3)
print(x4)
#输出结果为:
#-2.1007361691096205
#0.8732841094532444
#0.873284123199441
#-2.1007361691096205

print(df(x1))
print(df(x2))
print(df(x3))
print(df(x4))
#输出结果为:
#0.0
#-1.9144088803102477e-07
#-4.067704395538385e-09
#0.0

2.2.3多元函数的梯度下降法
#多元函数的梯度下降法
def init_func(x,y):
    return 2*x**3 + 4*y**4
def dfx(x):
    return 6*x**2
def dfy(y):
    return 16*y**3
eta = 0.01
x = 1
y = 3

for i in range(100):
    x -= dfx(x)*eta
    y -= dfy(y)*eta
    result = init_func(x,y)
print(x)
print(y)
print(result)
#输出结果:
#0.14046142957333435
#-0.17325237427960236
#0.009146376685150644

注:利用梯度下降法必须是凸函数且有界,才能得到全局最优解,否则找到局部最优解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值