梯度下降的原理

**引言:**梯度下降在机器学习中非常重要。机器学习的核心内容就是把数据投入一个设计好的模型中,让模型自动的“学习”,从而优化模型的各种参数,最终使得在某一组参数下该模型能够最佳地匹配该学习任务。这个“学习”的过程就是机器学习算法的关键。梯度下降法(Gradient Descent)就是实现该“学习”过程的一种最常见的方式,尤其是在深度学习(神经网络)模型中。
各种教材中常常使用大雾中下山的例子介绍梯度下降法,梯度下降的方法与下山相似,函数代表着一座山,我们的目标就是找到这个函数的最小值,也就是山底。这个过程中有三个关键词:位置,方向,步长。最快的下山的方式是找到当前位置最陡峭的方向,然后沿着此方向向下走。梯度的方向就是函数变化率最大的方向。梯度的概念就是多个变量求导,例如:(梯度使用∇【读音:nabla】表示)
① 二元函数
f ( x , y ) = x 2 + y 2 ∇ f ( x , y ) = ( δ f δ x , δ f δ y ) ∇ f ( x , y ) = ( 2 x , 2 y ) f(x,y)=x^2+y^2\\ \nabla f(x,y)=(\cfrac{\delta f}{\delta x},\cfrac{\delta f}{\delta y})\\ \nabla f(x,y)=(2x,2y) f(x,y)=x2+y2f(x,y)=(δxδf,δyδf)f(x,y)=(2x,2y)
②三元函数
f ( x , y , z ) = x 2 + y 2 + z 3 ∇ f ( x , y , z ) = ( δ f δ x , δ f δ y , δ f δ z ) ∇ f ( x , y , z ) = ( 2 x , 2 y , 3 z ) f(x,y,z)=x^2+y^2+z^3\\ \nabla f(x,y,z)=(\cfrac{\delta f}{\delta x},\cfrac{\delta f}{\delta y},\cfrac{\delta f}{\delta z})\\ \nabla f(x,y,z)=(2x,2y,3z) f(x,y,z)=x2+y2+z3f(x,y,z)=(δxδf,δyδf,δzδf)f(x,y,z)=(2x,2y,3z)

步骤:接着构造一个序列 x1,x2,x3…
并满足
f ( x 2 ) > f ( x 1 ) f ( x 3 ) > f ( x 2 ) ⋯ f(x_2)>f(x_1)\\ f(x_3)>f(x_2)\\ \cdots f(x2)>f(x1)f(x3)>f(x2)

不断执行该过程即可收敛到局部极小点,如下图所示
在这里插入图片描述
梯度下降数学公式
在这里插入图片描述
x t + 1 = x t − α ∇ f ( x t ) α : 表 示 学 习 率 , 即 梯 度 下 降 的 步 长 ∇ f ( x t ) : 梯 度 下 降 的 方 向 x_{t+1}=x_t-\alpha \nabla f(x_t)\\ \alpha {:表示学习率,即梯度下降的步长}\\ \nabla f(x_t) {:梯度下降的方向} xt+1=xtαf(xt)αf(xt):
为什么要梯度要乘以一个负号。
梯度前加一个负号,意味着朝梯度相反的方向前进。梯度的方向实际是函数在此点上升最快的方向。因此需要朝着下降最快的方向走,也就是负的梯度的方向,所以此处需要加上负号。

具体函数实例:

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

f=lambda x:(x-2)**2+5*x
x=np.linspace(-4,3,100)
y=f(x)
plt.plot(x,y)

![函数图像]

#导数
d=lambda x:2*(x-2)+5
alpha=0.1
min_value=np.random.randint(-2,3,size=1)[0]
min_value_last=min_value-alpha
tol=0.001
while True:
    if np.abs(min_value_last-min_value)<tol:
        break
    min_value_last=min_value
    min_value=min_value-alpha*d(min_value)
print('min_value:',min_value)

得出最优解:min_value: -0.5036267774588439

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值