当前位置: 首页 > news >正文

彩笔运维勇闯机器学习--梯度下降法

前言

彩笔运维勇闯机器学习,今天我们来讨论一下梯度下降法

梯度

首先要搞明白什么是梯度,那就要先从导数说起

导数

函数y=f(x)y=f(x)y=f(x)的自变量xxx在一点x0x_0x0上产生一个增量Δx\Delta xΔx时,函数输出值的增量Δy=f(x0+Δx)−f(x0)\Delta y=f(x_0 + \Delta x)-f(x_0)Δy=f(x0+Δx)f(x0)与自变量增量Δx\Delta xΔx的比值在Δx\Delta xΔx趋于0时的极限aaa如果存在,aaa即为在x0x_0x0处的导数

f′(x)=∂y∂x=lim⁡Δx→0f(x+Δx)−f(x)Δx=a f'(x) = \frac{\partial y}{\partial x} = \lim_{\Delta x \to 0} \frac{f(x + \Delta x) - f(x)}{\Delta x} = a f(x)=xy=Δx0limΔxf(x+Δx)f(x)=a

gradient_1

(该图来自于百度百科)

偏导数

偏导数与导数的本质是一样的,只不过偏导数解决的是多变量的问题

∂f∂xi=lim⁡Δxi→0f(x1,…,xi+Δxi,…,xn)−f(x1,…,xi,…,xn)Δxi \frac{\partial f}{\partial x_i} = \lim_{\Delta x_i \to 0} \frac{f(x_1, \dots, x_i + \Delta x_i, \dots, x_n) - f(x_1, \dots, x_i, \dots, x_n)}{\Delta x_i} xif=Δxi0limΔxif(x1,,xi+Δxi,,xn)f(x1,,xi,,xn)

比如二元函数f(x,y)f(x,y)f(x,y)

xxx求偏导:
∂f∂x=lim⁡Δx→0f(x+Δx,y)−f(x,y)Δx \frac{\partial f}{\partial x} = \lim_{\Delta x \to 0} \frac{f(x + \Delta x, y) - f(x, y)}{\Delta x} xf=Δx0limΔxf(x+Δx,y)f(x,y)

yyy求偏导:

∂f∂y=lim⁡Δy→0f(x,y+Δy)−f(x,y)Δy \frac{\partial f}{\partial y} = \lim_{\Delta y \to 0} \frac{f(x, y + \Delta y) - f(x, y)}{\Delta y} yf=Δy0limΔyf(x,y+Δy)f(x,y)

gradient_2

(该图来自于百度百科)

超过二元的就画不出来图来了

方向导数

导数与偏导数都是自变量相对于某一轴方向(比如x相对于x轴,y相对于y轴)讨论变化率,而方向导数讨论的则是,自变量可以在其定义域内自由选择方向

一个多元函数fff和一个方向向量uuu,方向导数DufD_ufDuf表示函数fffuuu方向的变化率

Duf(a)=lim⁡h→0f(a+hu)−f(a)h D_{\mathbf{u}}f(a) = \lim_{h \to 0} \frac{f(a + hu) - f(a)}{h} Duf(a)=h0limhf(a+hu)f(a)

用二元函数举例:

Duf(x0,y0)=lim⁡h→0f(x0+hu1,y0+hu2)−f(x0,y0)h D_{\mathbf{u}}f(x_0, y_0) = \lim_{h \to 0} \frac{f(x_0 + h u_1, y_0 + h u_2) - f(x_0, y_0)}{h} Duf(x0,y0)=h0limhf(x0+hu1,y0+hu2)f(x0,y0)

  • u1u2u_1 u_2u1u2表示方向u=(u1,u2)u = (u1, u2)u=(u1,u2)
  • h表示沿着uuu方向的位移
梯度

梯度是多元函数在某一点处所有偏导数构成的向量,表示函数在该点处变化最快的方向及其变化率,对于f(x1,x2,...,xn)f(x_1,x_2,...,x_n)f(x1,x2,...,xn),其梯度记为∇f\nabla ff

∇f=(∂f∂x1,∂f∂x2,…,∂f∂xn) \nabla f = \left(\frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, \dots, \frac{\partial f}{\partial x_n}\right) f=(x1f,x2f,,xnf)

  • 方向:梯度指向函数在该点增长最快的方向
  • 大小:梯度的模表示函数在该方向上的最大变化率

方向导数:梯度与单位方向向量u的点积

Duf=∇f⋅uD_uf=\nabla f⋅uDuf=fu

uuu∇f\nabla ff同方向时,方向导数最大
uuu∇f\nabla ff反方向时,方向导数最小

小结

梯度与方向导数:梯度是方向导数中变化率最大的那一个:梯度的方向是方向导数取最大值的方向,而梯度的模长(大小)等于该最大方向导数的值
方向导数与偏导数:偏导数是方向导数的特例,即u=(0,1)u=(0,1)u=(0,1),简而言之,方向导数在坐标轴上移动,就是偏导数

了解了梯度的诞生以及概念之后,终于可以来讨论一下本文的主题:梯度下降法

梯度下降法

在回归任务中,用于评估模型的重要指标是损失函数MSE,提高模型的泛化能力就是设法降低MSE

上述关于梯度的描述,梯度就是函数变化率最快的方向,那梯度下降法就是不断沿着付梯度方向寻找MSE的最小值。不同于最小二乘法只能用于线性模型,梯度下降法适用于大部分模型,包括线性回归、逻辑回归等等

核心思想
  • 函数的梯度指向函数值增长最快的方向,负梯度方向则是函数值下降最快的方向
  • 通过不断沿负梯度方向调整参数,逐步逼近函数的最小值点
步骤
  • 初始化,随机选择初始参数或者全部设置为0
  • 迭代更新,每迭代一次都会更新参数的值:θt+1=θt−η⋅∇f(θt)\theta_{t+1}=\theta_t - \eta ⋅ \nabla f(\theta_t)θt+1=θtηf(θt)
    • θt\theta_tθt:第ttt次迭代的参数值
    • η\etaη:每次更新的幅度,也叫学习率
    • ∇J(θt)\nabla J(\theta_t)J(θt):目标函数fffθt\theta_tθt的梯度
  • 终止迭代的条件:
    • 梯度很小:梯度的模长很小,一般小于10−610^{-6}106
    • 损失函数变化很小:一般小于10−610^{-6}106
    • 到达最大迭代次数
计算过程

我们用本系列的第一节:一元线性回归中的数据,用梯度下降法详细演示一次

data = {'result': [0.63, 0.72, 0.72, 0.63, 0.57, 0.52, 0.48, 0.47],'feature1': [22.48, 19.50, 18.02, 16.97, 15.78, 15.11, 14.02, 13.24]
}

目标是找到一组参数,使得损失函数MSE最小:
MSE=1n∑i=1n(yi−y^i)2\text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat {y}_i)^2MSE=n1i=1n(yiy^i)2

带入y=β0+β1xy=\beta_0 + \beta_1 xy=β0+β1x
f(β0,β1)=1n∑i=1n(β0+β1xi−y^i)2f(\beta_0 , \beta_1) = \frac{1}{n} \sum_{i=1}^{n} (\beta_0 + \beta_1 x_i - \hat {y}_i)^2 f(β0,β1)=n1i=1n(β0+β1xiy^i)2

首先计算梯度,分别对β0\beta_0β0β1\beta_1β1求偏导

先对β0\beta_0β0求偏导:

∂f∂β0=1n∑i=1n2(β0+β1xi−y^i)⋅(β0+β1xi−y^i)′=2n∑i=1n(β0+β1xi−y^i)\frac{\partial f}{\partial β_0} = \frac{1}{n} \sum_{i=1}^{n} 2(β_0 + β_1x_i - \hat {y}_i)⋅(β_0 + β_1x_i - \hat {y}_i)' = \frac{2}{n} \sum_{i=1}^{n} (β_0 + β_1x_i - \hat {y}_i)β0f=n1i=1n2(β0+β1xiy^i)(β0+β1xiy^i)=n2i=1n(β0+β1xiy^i)

在对β1\beta_1β1求偏导:

∂f∂β1=1n∑i=1n2(β0+β1xi−y^i)⋅(β0+β1xi−y^i)′=2n∑i=1n(β0+β1xi−y^i)⋅xi\frac{\partial f}{\partial β_1} = \frac{1}{n} \sum_{i=1}^{n} 2(β_0 + β_1x_i - \hat {y}_i)⋅(β_0 + β_1x_i - \hat {y}_i)' = \frac{2}{n} \sum_{i=1}^{n} (β_0 + β_1x_i - \hat {y}_i)⋅x_iβ1f=n1i=1n2(β0+β1xiy^i)(β0+β1xiy^i)=n2i=1n(β0+β1xiy^i)xi

至此得出梯度:
∇f=(2n∑i=1n(β0+β1xi−y^i),2n∑i=1n(β0+β1xi−y^i)⋅xi)\nabla f = (\frac{2}{n} \sum_{i=1}^{n} (β_0 + β_1x_i - \hat {y}_i), \frac{2}{n} \sum_{i=1}^{n} (β_0 + β_1x_i - \hat {y}_i)⋅x_i)f=(n2i=1n(β0+β1xiy^i),n2i=1n(β0+β1xiy^i)xi)

设置参数,学习率η=0.001\eta=0.001η=0.001,迭代次数100次,开始迭代:

1)第一轮迭代,先初始化β0\beta_0β0 β1\beta_1β1为0

计算损失函数:
MSE=f(β0,β1)=1n∑i=1n(β0+β1xi−y^i)2=18[(0−0.63)2+(0−0.72)2+...+(0−0.47)2]=0.35965 \begin{aligned} MSE &= f(\beta_0 , \beta_1) = \frac{1}{n} \sum_{i=1}^{n} (\beta_0 + \beta_1 x_i - \hat {y}_i)^2 \\&= \frac{1}{8}[(0-0.63)^2+(0-0.72)^2+...+(0-0.47)^2] = 0.35965 \end{aligned} MSE=f(β0,β1)=n1i=1n(β0+β1xiy^i)2=81[(00.63)2+(00.72)2+...+(00.47)2]=0.35965

计算梯度:

∂f∂β0=2n∑i=1n(β0+β1xi−y^i)=14[(0−0.63)+(0−0.72)+...+(0−0.47)]=−1.185 \begin{aligned} \frac{\partial f}{\partial β_0} &= \frac{2}{n} \sum_{i=1}^{n} (β_0 + β_1x_i - \hat {y}_i) \\&= \frac{1}{4}[(0-0.63)+(0-0.72)+...+(0-0.47)] = -1.185 \end{aligned} β0f=n2i=1n(β0+β1xiy^i)=41[(00.63)+(00.72)+...+(00.47)]=1.185

∂f∂β1=2n∑i=1n(β0+β1xi−y^i)⋅xi=14[(0−0.63)⋅22.48+(0−0.72)⋅19.50+...+(0−0.47)⋅13.24]=−20.418025 \begin{aligned} \frac{\partial f}{\partial β_1} &= \frac{2}{n} \sum_{i=1}^{n} (β_0 + β_1x_i - \hat {y}_i)⋅x_i \\&= \frac{1}{4}[(0-0.63)·22.48+(0-0.72)·19.50+...+(0-0.47)·13.24] = -20.418025 \end{aligned} β1f=n2i=1n(β0+β1xiy^i)xi=41[(00.63)22.48+(00.72)19.50+...+(00.47)13.24]=20.418025

∇f=(−1.185,−20.418025)\nabla f = (-1.185, -20.418025)f=(1.185,20.418025)

损失函数与梯度均小于10−610^{-6}106,继续迭代第二轮

2)第二轮迭代,先初始化β0\beta_0β0 β1\beta_1β1

β0←β0−η⋅∂f∂β0=0−0.001⋅(−1.185)=0.001185\beta_0 ← \beta_0 - \eta · \frac{\partial f}{\partial β_0} = 0 - 0.001·(-1.185) = 0.001185β0β0ηβ0f=00.001(1.185)=0.001185

β1←β1−η⋅∂f∂β1=0−0.001⋅(−20.418025)=0.020418025\beta_1 ← \beta_1 - \eta · \frac{\partial f}{\partial β_1} = 0 - 0.001·(-20.418025) = 0.020418025β1β1ηβ1f=00.001(20.418025)=0.020418025

计算损失函数:

MSE=f(β0,β1)=1n∑i=1n(β0+β1xi−y^i)2=0.064501 MSE = f(\beta_0 , \beta_1) = \frac{1}{n} \sum_{i=1}^{n} (\beta_0 + \beta_1 x_i - \hat {y}_i)^2 = 0.064501 \\ MSE=f(β0,β1)=n1i=1n(β0+β1xiy^i)2=0.064501

计算梯度:

∂f∂β0=2n∑i=1n(β0+β1xi−y^i)=−0.492909\frac{\partial f}{\partial β_0} = \frac{2}{n} \sum_{i=1}^{n} (β_0 + β_1x_i - \hat {y}_i) = -0.492909 β0f=n2i=1n(β0+β1xiy^i)=0.492909

∂f∂β1=2n∑i=1n(β0+β1xi−y^i)⋅xi=−8.395268\frac{\partial f}{\partial β_1} = \frac{2}{n} \sum_{i=1}^{n} (β_0 + β_1x_i - \hat {y}_i)⋅x_i = -8.395268 β1f=n2i=1n(β0+β1xiy^i)xi=8.395268

∇f=(−0.492909,−8.395268)\nabla f = (-0.492909, -8.395268)f=(0.492909,8.395268)

损失函数与梯度均小于10−610^{-6}106,继续迭代第三轮…

就这样不断迭代下去,直至满足停止的条件,停止之后,该轮次的β0β_0β0 β1β_1β1就是最佳参数

联系我

  • 联系我,做深入的交流

在这里插入图片描述


至此,本文结束
在下才疏学浅,有撒汤漏水的,请各位不吝赐教…


文章转载自:

http://uZBzgSJp.dmjhp.cn
http://3QwjPisE.dmjhp.cn
http://6odKifQr.dmjhp.cn
http://TVW4x4WL.dmjhp.cn
http://9MPOigpX.dmjhp.cn
http://FTwxF27B.dmjhp.cn
http://czrQxAMx.dmjhp.cn
http://UUG5RsPH.dmjhp.cn
http://l6xiSU5E.dmjhp.cn
http://evQH8h9u.dmjhp.cn
http://C9GtTPZA.dmjhp.cn
http://2vwRwy6E.dmjhp.cn
http://PfD8Hl2O.dmjhp.cn
http://bArSJb0O.dmjhp.cn
http://AmCFEK3R.dmjhp.cn
http://2fPSosBx.dmjhp.cn
http://jo5GoEXR.dmjhp.cn
http://sgXwbZZR.dmjhp.cn
http://kQ6bENlx.dmjhp.cn
http://q4WSNLNK.dmjhp.cn
http://7HBPXr8e.dmjhp.cn
http://8FiTcKDZ.dmjhp.cn
http://50QMYB79.dmjhp.cn
http://qUajjt1x.dmjhp.cn
http://bnhY4vw7.dmjhp.cn
http://0ItXvjbL.dmjhp.cn
http://EnM3MgI4.dmjhp.cn
http://u2vWyZ72.dmjhp.cn
http://F9gKN8GT.dmjhp.cn
http://dfB7kHjo.dmjhp.cn
http://www.dtcms.com/a/388186.html

相关文章:

  • 正点原子zynq_FPGA学习笔记-vivado安装
  • 基于yolov8/yolo11的视觉识别算法使用和详解
  • 2025年数据科学与大数据技术和统计学有什么区别?
  • STM32H743-ARM例程2-GPIO点亮LED
  • 每天五分钟深度学习:深层神经网络的前向传播算法和反向传播算法
  • 【LeetCode】41. 缺失的第一个正数
  • Linux系统指令之 —— ip route route
  • 嵌入式硬件笔记:三种滤波电路的对比
  • webrtc弱网-InterArrivalDelta类源码分析与算法原理
  • 第6章:计算机内存实战
  • 模型压缩与量化实战:将BERT模型缩小4倍并加速推理
  • RS485 与 CAN 通讯:选哪个更合适?
  • 腾讯微保社招笔试
  • centos系统安装mysql8
  • Go语言垃圾回收器深入解析
  • 大模型的领域知识注入的四种路径
  • 寻找高速传输新选择:当传统方案不再满足现代企业需求
  • (CV方向)视频理解前沿:基于TimeSformer的时空注意力模型实战
  • hot100--简单题(3)
  • STM32开发(TIM定时器:通用定时器 - PWM)
  • 从原始数据到高效模型:基础特征工程的系统指南
  • 大数据场景下时序数据库选型指南,Apache IoTDB的领先技术和实践
  • Charles移动端抓包实战指南:从入门到精通HTTPS流量解析
  • 使用 uv 发布 Python 包到 PyPI 教程
  • GESP7级中所有class类的题目
  • Python实现PDF图片OCR识别:从原理到实战的全流程解析
  • React原理一
  • 智能化解决方案的选择:探索领先的倾角传感器和水平监测传感器厂家
  • 芯片制造中光刻工艺里出现的I-line光刻胶是什么?
  • 如何通过 .sln 文件判断项目使用的 Visual Studio 版本