梯度下降(Gradient Descent)原理和Python实现

本文介绍了梯度下降的基本原理,包括梯度的概念,以及梯度下降和梯度上升的区别。在梯度下降中,通过不断调整参数以减小损失函数,寻找局部最小值。而梯度上升则用于寻找局部最大值。文章还提到了梯度下降在逻辑回归和线性回归中的应用场景,并给出了Python实现的链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

梯度

对多元函数的参数 α \alpha α求偏导数,把各个偏导数结合在一起,就是梯度。对于多元函数 f = ( x 1 , x 2 , x 3 . . . . . . x n ) f=(x_1,x_2,x_3......x_n) f=(x1,x2,x3......xn)的梯度是一个长度为 n n n的向量,向量中第 k k k个值就是其对函数 f f f的偏导数。
Δ f ( x 1 , x 2 , x 3 . . . . . . x n ) = ( ( α f α x 1 ) , ( α f α x 2 ) . . . . . ( α f α x n ) ) \Delta f(x_1,x_2,x_3......x_n)=((\frac{\alpha f}{\alpha x_1}),(\frac{\alpha f}{\alpha x_2}).....(\frac{\alpha f}{\alpha x_n})) Δf(x1,x2,x3......xn)=((αx1αf),(αx2αf).....(αxnαf))

梯度下降和梯度上升

梯度下降
  1. 假定线性回归的假设函数为 h θ ( x 1 , x 2 . . . . . x n ) = θ 0 + θ 1 x 1 + . . . . . + θ n x n h_{\theta}(x_1,x_2.....x_n)=\theta_0+\theta_1x_1+.....+\theta_nx_n hθ(x1,x2.....xn)=θ0+θ1x1+.....+θnxn,则对应的损失函数为: J ( θ 0 , θ 1 . . . . . θ n ) = 1 2 m Σ i = 0 m ( h θ ( x 1 , x 2 . . . . . x n ) − y i ) 2 J(\theta_0,\theta_1.....\theta_n)=\frac{1}{2m}\Sigma_{i=0}^m(h_{\theta}(x_1,x_2.....x_n)-y_i)^2 J(θ0,θ1.....θn)=2m1Σi=0m(hθ(x1,x2.....xn)yi)2
  2. 初始化步长 α \alpha α,算法终止距离 ε \varepsilon ε,以及 θ 1 , θ 2 . . . . θ n \theta_1,\theta_2....\theta_n θ1,θ2....θn
  3. 过程:
  • 确定当前损失函数的梯度,对于 θ i \theta_i θi为: α α j J ( θ 1 , θ 2 . . . . . θ n ) \frac{\alpha}{\alpha_j}J(\theta_1,\theta_2.....\theta_n) αjαJ(θ1,θ2.....θn)
  • 用步长乘以当前损失函数得到下降距离
  • 确定所有的 θ i \theta_i θi梯度下降是否都小于 ε \varepsilon ε,如果是则退出,否则进入步骤4
  • 更新所有的 θ \theta θ,对于 θ i \theta_i θi θ i = θ i − α α α i J ( θ 0 , θ 1 . . . . θ n ) \theta_i=\theta_i-\alpha\frac{\alpha}{\alpha_i}J(\theta_0,\theta_1....\theta_n) θi=θiααiαJ(θ0,θ1....θn),更新完毕后继续步骤1
梯度上升

和梯度下降一样,只是在更新 θ \theta θ的时候是加不是减

使用场景

梯度下降是求局部极小值,而梯度上升是求局部最大值

logistic的目标函数: l = Σ i = 1 m y i ∗ l o g ( p i ) + ( 1 − y i ) ∗ l o g ( 1 − p i ) l=\Sigma_{i=1}^my_i*log(p_i)+(1 - y_i)*log(1-p_i) l=Σi=1myilog(pi)+(1yi)log(1pi),因为是优化目标出现的概率,所以越大越好,需要用梯度上升。

线性回归的cost函数为: 1 2 Σ i = 1 m ( h i − y i ) 2 \frac{1}{2}\Sigma_{i=1}^m(h_i-y_i)^2 21Σi=1m(hiyi)2对于cost函数我们需要越小越好,所以用逻辑下降。

Python实现:

github地址:https://github.com/mantoujiaozi/Learning/blob/master/Andrew Wu/batch-gradient-descent.py

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值