惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

博客园 - 小纸条

ruoyiai 启动指南 反向传播 numpy的使用 B 和 B+树 红黑树 ruoyi-vue 博弈论 离散化 AcWing 907. 区间覆盖 AcWing 906. 区间分组 AcWing 908 最大不相交区间数量 AcWing 905. 区间选点 AcWing 104. 货仓选址 动态规划经典题 窗口函数 1226. 哲学家进餐 1195. 交替打印字符串 1117. H2O 生成 1116. 打印零与奇偶数 关联子查询
梯度下降法
小纸条 · 2025-12-22 · via 博客园 - 小纸条

一元函数梯度下降法求极小值

设一元函数 (y = f(x)) 具有一阶连续导数,目标是求解其局部极小值点 \(x^*\) 及对应的极小值 (f(x^*))。

一、核心理论基础

  1. 导数与函数单调性的关系
    对任意点 (x_k),若 (f'(x_k) > 0),则 (f(x)) 在 (x_k) 的邻域内单调递增;若 (f'(x_k) < 0),则 (f(x)) 在 (x_k) 的邻域内单调递减
    要使迭代点 (x_{k+1}) 满足 (f(x_{k+1}) < f(x_k)),需让 (x_{k+1}) 沿函数值下降的方向移动。

  2. 微分近似与步长方向推导
    函数 \(y=f(x)\) 在点 \(x_0\) 处的导数定义为:
    \( f'(x_0) = \lim_{\Delta x \to 0} \frac{f(x_0+\Delta x) - f(x_0)}{\Delta x} \)
    由一阶微分近似,当 (\Delta x) 充分小时:

    \[f(x_k+\Delta x) - f(x_k) \approx f'(x_k)\cdot\Delta x \]

    要满足 (f(x_k+\Delta x) < f(x_k)),需 (f'(x_k)\cdot\Delta x < 0)。因为函数是单调递减,所以\(f'(x)<0\)
    可令 (\Delta x = -\alpha \cdot f'(x_k))(其中 (\alpha>0) 为步长,也称学习率),
    导数的定义也可写成
    \( f'(x_0) = \lim_{x \to x_0} \frac{f(x) - f(x_0)}{x - x_0} \)。其中:$x-x_0=\Delta x$,因此迭代公式为:

    \[\boldsymbol{x_{k+1} -x_k= - \alpha \cdot f'(x_k)} \]

  3. 收敛性条件
    若 (f(x)) 是凸函数($ f(x)=x^2$ 为凸函数,这与同济的高数定义是相反的),则梯度下降法产生的序列 ({x_k}) 必收敛到全局极小值点 (x^*);若 (f(x)) 非凸,则可能收敛到局部极小值点。

二、严格数学步骤

  1. 初始化参数

    • 选取初始迭代点 (x_0 \in \mathbb{R})
    • 设定步长 (\alpha \in (0,1))、收敛精度 (\varepsilon > 0)
    • 设定最大迭代次数 (N_{\text{max}})(防止无限迭代)
    • 令迭代次数 (k = 0)
  2. 迭代计算
    执行以下循环,直到满足收敛条件或达到最大迭代次数:

    1. 上一步已经选出初始点
    2. 计算当前点的导数 (f'(x_k));
    3. 若 (\boldsymbol{|f'(x_k)| < \varepsilon}),停止迭代,取 (x^* \approx x_k);
    4. 否则,按迭代公式更新迭代点:

    \[x_{k+1} = x_k - \alpha \cdot f'(x_k) \]

    1. 若 (k+1 > N_{\text{max}}),停止迭代(迭代发散或收敛过慢);
    2. 令 (k = k+1),返回循环第一步。
  3. 输出结果
    极小值点近似值为 \(x^*\),极小值近似值为 (f(x^*))。

三、数学实例验证

设目标函数 (f(x) = x^2 - 4x + 5),求其极小值点。

  1. 求导:(f'(x) = 2x - 4)
  2. 初始化:取 (x_0 = 0),(\alpha = 0.1),(\varepsilon = 10^{-6}),(N_{\text{max}} = 1000)
  3. 迭代过程
    • (k=0): (f'(x_0)=-4),(|f'(x_0)|=4 > \varepsilon),(x_1 = 0 - 0.1\times(-4)=0.4)
    • (k=1): (f'(x_1)=2\times0.4-4=-3.2),(|f'(x_1)|=3.2 > \varepsilon),(x_2=0.4-0.1\times(-3.2)=0.72)
    • (\dots)
    • 当 (k=42) 时,(x_{42}\approx2),(f'(x_{42})\approx0 < \varepsilon),停止迭代
  4. 结果:极小值点 (x^* \approx 2),极小值 (f(x^*) = 2^2-4\times2+5 = 1)

四、参数的数学约束

步长 (\alpha) (0 < \alpha < \frac{2}{L})((L) 为 (f''(x)) 的上界) 保证迭代收敛,(\alpha) 过大会震荡发散,过小会收敛过慢 收敛精度 (\varepsilon) \(\varepsilon \in (10^{-8},10^{-4})\) 平衡计算精度与迭代效率 初始点 (x_0) 尽量靠近真实极小值点 减少迭代次数,避免陷入局部极小值
参数 数学约束 约束原因

二元函数梯度下降法求极小值

设二元函数 (z = f(x, y)) 具有一阶连续偏导数,目标是求解其局部极小值点 \(\theta^*=(x^*,y^*)\)及对应的极小值 \(f(x^*, y^*)\)

一、核心理论基础

  1. 偏导数与函数单调性的关系
    对任意点 (\theta_k=(x_k, y_k)),若 (f_x'(x_k, y_k) > 0),则 (f(x, y)) 在 (x_k) 邻域内关于 (x) 单调递增;若 (f_x'(x_k, y_k) < 0),则关于 (x) 单调递减;
    同理,若 (f_y'(x_k, y_k) > 0),则 (f(x, y)) 在 (y_k) 邻域内关于 (y) 单调递增;若 (f_y'(x_k, y_k) < 0),则关于 (y) 单调递减。
    要使迭代点 (\theta_{k+1}=(x_{k+1}, y_{k+1})) 满足 (f(\theta_{k+1}) < f(\theta_k)),需让 (\theta_{k+1}) 沿函数值下降的方向移动。

  2. 全微分近似与步长方向推导
    函数 (z=f(x, y)) 在点 (\theta_0=(x_0, y_0)) 处的全微分定义为:

    \[dz = f_x'(x_0, y_0)\Delta x + f_y'(x_0, y_0)\Delta y \]

    其中 (x=x_0+\Delta x),(y=y_0+\Delta y)。由全微分近似,当 (\Delta x)、(\Delta y) 充分小时:

    \[f(x_0+\Delta x, y_0+\Delta y) - f(x_0, y_0) \approx f_x'(x_0, y_0)\Delta x + f_y'(x_0, y_0)\Delta y \]

    要满足 (f(x_0+\Delta x, y_0+\Delta y) < f(x_0, y_0)),需 (f_x'(x_0, y_0)\Delta x + f_y'(x_0, y_0)\Delta y < 0)。

    定义二元函数的梯度 (\nabla f(\theta) = \left( f_x'(x, y), f_y'(x, y) \right)^T),令 (\Delta\theta = \left( \Delta x, \Delta y \right)^T = -\alpha \cdot \nabla f(\theta_k))(其中 (\alpha>0) 为步长,也称学习率),代入得:

    \[\nabla f(\theta_k)^T \cdot \Delta\theta = -\alpha \cdot \|\nabla f(\theta_k)\|^2 < 0 \]

    显然满足函数值下降的要求。将 (\theta=(x, y)) 写成向量形式 (\theta = \begin{pmatrix} x \ y \end{pmatrix}),则迭代公式为:

    \[\boldsymbol{\theta_{k+1} - \theta_k = -\alpha \cdot \nabla f(\theta_k)} \]

    展开为分量形式:

    \[\begin{cases} x_{k+1} = x_k - \alpha \cdot f_x'(x_k, y_k) \\ y_{k+1} = y_k - \alpha \cdot f_y'(x_k, y_k) \end{cases} \]

    可以证明,负梯度方向 (-\nabla f(\theta)) 是该点处函数值下降最快的方向。

  3. 收敛性条件
    若 (f(x, y)) 是机器学习意义下的凸函数(如下凸函数 \((f(x, y)=x^2+y^2)\),与同济高数的上凸函数定义体系不同),则梯度下降法产生的序列 ({\theta_k}) 必收敛到全局极小值点 (\theta^*);若 (f(x, y)) 非凸,则可能收敛到局部极小值点。

二、严格数学步骤

  1. 初始化参数

    • 选取初始迭代点 (\theta_0=(x_0, y_0) \in \mathbb{R}^2)
    • 设定步长 (\alpha \in (0,1))、收敛精度 (\varepsilon > 0)(通常取 (\varepsilon \in (10^{-8}, 10^{-4})))
    • 设定最大迭代次数 (N_{\text{max}})(防止无限迭代)
    • 令迭代次数 (k = 0)
  2. 迭代计算
    执行以下循环,直到满足收敛条件或达到最大迭代次数:

    1. 上一步已经选出初始点
    2. 计算当前点的梯度 (\nabla f(\theta_k) = \left( f_x'(x_k, y_k), f_y'(x_k, y_k) \right)^T);
    3. 若 (\boldsymbol{|\nabla f(\theta_k)| < \varepsilon})(或 (|f_x'(x_k, y_k)| < \varepsilon) 且 (|f_y'(x_k, y_k)| < \varepsilon)),停止迭代,取 (\theta^* \approx \theta_k);
    4. 否则,按迭代公式更新迭代点:

      \[\theta_{k+1} = \theta_k - \alpha \cdot \nabla f(\theta_k) \]

      \(\begin{cases} x_{k+1} = x_k - \alpha \cdot f_x'(x_k, y_k) \\ y_{k+1} = y_k - \alpha \cdot f_y'(x_k, y_k) \end{cases} \)
    5. 若 (k+1 > N_{\text{max}}),停止迭代(迭代发散或收敛过慢);
    6. 令 (k = k+1),返回循环第一步。
  3. 输出结果
    极小值点近似值为 \((\theta^*=(x^*, y^*))\),极小值近似值为 \((f(x^*, y^*)\))。

三、数学实例验证

设目标函数 (f(x, y) = x^2 + y^2),求其极小值点。

  1. 求偏导数:(f_x'(x, y) = 2x),(f_y'(x, y) = 2y),梯度 (\nabla f(x, y) = (2x, 2y)^T)
  2. 初始化:取 (\theta_0=(x_0, y_0)=(1, 2)),(\alpha = 0.4),(\varepsilon = 10^{-6}),(N_{\text{max}} = 1000)
  3. 迭代过程
  • \(k=0\)\(f_x'(x_0, y_0)=2\)\(f_y'(x_0, y_0)=4\)\(\|\nabla f(\theta_0)\|=\sqrt{2^2+4^2}=\sqrt{20} > \varepsilon\)
    \(x_1 = 1 - 0.4 \times 2 = 0.2\)\(y_1 = 2 - 0.4 \times 4 = 0.4\)\(f(x_1, y_1)=0.2^2+0.4^2=0.2\)
  • \(k=1\)\(f_x'(x_1, y_1)=0.4\)\(f_y'(x_1, y_1)=0.8\)\(\|\nabla f(\theta_1)\|=\sqrt{0.4^2+0.8^2}=\sqrt{0.8} > \varepsilon\)
    \(x_2 = 0.2 - 0.4 \times 0.4 = 0.04\)\(y_2 = 0.4 - 0.4 \times 0.8 = 0.08\)\(f(x_2, y_2)=0.04^2+0.08^2=0.008\)
  • \(\dots\)
  • \(k=6\)\(x_6 \approx 0.000064\)\(y_6 \approx 0.000128\)\(f_x'(x_6, y_6) \approx 0.000128\)\(f_y'(x_6, y_6) \approx 0.000256\)
    \(\|\nabla f(\theta_6)\| \approx \sqrt{(0.000128)^2+(0.000256)^2} < \varepsilon\),停止迭代

4. 结果

\(x_*=0.000064 ,y_*=0.000128\) 时,\(f(x^*, y^*) = 0.000064^2 + 0.000128^2 = 2.048×10^-8\) 。太小了可以认为极小值点 \(\theta^* \approx (0, 0)\),极小值 \(f(x^*, y^*) = 0^2 + 0^2 = 0\)

四、参数的数学约束

步长 (\alpha) (0 < \alpha < \frac{2}{L})((L) 为海塞矩阵 (H(f)) 的最大特征值) 保证迭代收敛,(\alpha) 过大会震荡发散,过小会收敛过慢 收敛精度 (\varepsilon) \(\(\varepsilon \in (10^{-8},10^{-4})\)\) 平衡计算精度与迭代效率 初始点 (\theta_0=(x_0, y_0)) 尽量靠近真实极小值点 减少迭代次数,避免陷入局部极小值
参数 数学约束 约束原因

梯度下降法总结

  1. 核心特点:实现简单,搜索方向始终沿梯度下降方向。
  2. 主要不足
    • 收敛速度不均:远离极小值时下降快,靠近极小值时下降慢,导致后期收敛慢。
    • 路径问题:在多峰值场景下,易走“之”字形路线。找极小值慢,甚至可能来回找极小值。