2026/2/6梯度下降1

0 阅读4分钟

毕业了好多年,微积分好多知识都只剩下模糊的印象,这导致在学习的过程中脑壳痛,给自己打气打气。

4.4梯度下降

  • 梯度下降是一个用来求函数最小值的算法,接下来使用梯度下降算法来求出代价函数J(θ0,θ1)J(\theta_{0},\theta_{1})的最小值。
  • 梯度下降的思想:开始时我们随机选择一个参数的组合(θ0,θ1,,θn)(\theta_{0},\theta_{1},\dots\dots,\theta_{n}),计算代价函数,然后寻找下一个能让代价函数值下降最多的参数组合。持续这么做直到找到一个局部最小值(local minimum),因为并没有尝试玩所有的参数组合,所以不能确定得到的local minimum是否便是全局最小值(global minimum),选择不同的初始参数组合,可能会找到不同的local minimum。(找个过程类似于你站在山的某一点,看四周寻找最合适的下山方向,并在这个过程中不断调整你的方向)

350d7643-e195-47e6-b99a-b7eb7865a538.png

  • 批量梯度下降(batch gradient descent)算法公式为: repeat until convergence { θj:=θjaJ(θ0,θ1)θj\theta_{j}:=\theta_{j}-a\frac{\partial J(\theta_{0},\theta_{1})}{\partial\theta_{j}} (for j = 0 and j = 1) } 其中a是学习率(learning rata),它决定了我们沿着能让代价函数下降程度最大方向迈出的步子有多大,在批量梯度下降中,我们每一次都同时让所有的参数减去学习速率乘以代价函数的导数。

    • 对代价函数J 求θj\theta_{j}的偏导涉及多元微积分和优化算法,用以下方式来理解:
    • 想象一个函数J(θ0,θ1)J(\theta_{0},\theta_{1})是一个碗形曲面,有两个参数(θ0θ1\theta_{0}和\theta_{1}),输出是代价函数的值。
    • 你站在这个碗形曲面的某一点上,目标是找到碗底(J的最小值),但你不确定往哪个方向走能最快下山。
    • 偏导数的含义:沿单一轴方向的坡度
    • 偏导数Jθ0\frac{\partial J}{\partial \theta_{0}}回答以下问题:如果我只动参数θ0\theta_{0}一点点,而把其他所有参数(如θ1\theta_{1})都固定住不动,那么函数J的值会变化多快,变化方向如何?
    • 具体来说:Jθ0\frac{\partial J}{\partial \theta_{0}}衡量的是在(θ0,θ1)(\theta_{0},\theta_{1})这个点上,沿着θ0\theta_{0}轴方向的瞬时变化率(坡度);Jθ1\frac{\partial J}{\partial \theta_{1}}衡量的是在(θ0,θ1)(\theta_{0},\theta_{1})这个点上,沿着θ1\theta_{1}轴方向的瞬时变化率(坡度)。
    • 生活例子: -假设J(房间温度,湿度)代表你的“不舒适度"。
    • J温度\frac{\partial J}{\partial 温度}=+2:意味着在当前的温湿度下,如果只提高温度1度而保持湿度不变,你的不适度会增加2个单位。
    • J湿度\frac{\partial J}{\partial 湿度}=-1:意味着在当前的温湿度下,如果只提高湿度1%而保持温度不变,你的不适度会下降1个单位。
    • 从单变量导数到多变量偏导数的过渡
  • 单变量函数f(x):导数 df/dx代表函数曲线在某一点的切线斜率。它告诉你,x变化时,f(x)会如何变化。只有一个方向需要考虑。

  • 多变量函数J(θ₀, θ₁, ...):你无法简单地画出一条切线。取而代之的是,在每个点上有无数个可能的方向。偏导数就是先锁定其中一个参数方向,再看函数的变化率。它相当于做了一个“切片”。

例如,对于 J(θ₀, θ₁)

  1. 计算 ∂J/∂θ₀时,你相当于把三维曲面用 **θ₁ = 常数**​ 这个平面切了一刀,得到一条二维曲线 J(θ₀),然后求这条曲线在 θ₀处的导数。

  2. 计算 ∂J/∂θ₁时,你相当于用 **θ₀ = 常数**​ 这个平面切一刀,得到曲线 J(θ₁),再求导。

在机器学习/梯度下降中的意义

在代价函数 J(θ)中,每个参数 θⱼ都有一个对应的偏导数 ∂J/∂θⱼ

  • 符号很重要

    • 如果 ∂J/∂θⱼ > 0:意味着在当前点,增加θⱼ增加代价 J(模型变差)。所以,为了减小 J,我们应该减小θⱼ

    • 如果 ∂J/∂θⱼ < 0:意味着在当前点,增加θⱼ减小代价 J(模型变好)。所以,为了减小 J,我们应该增大θⱼ

  • 这就是梯度下降更新规则 θⱼ := θⱼ - α * (∂J/∂θⱼ)的来源

    • - (∂J/∂θⱼ)这一项自动决定了每个参数的更新方向(是增加还是减少)。

    • α(学习速率)决定了沿着这个方向走多大的步长

    • 所有参数同时进行这个操作,就等价于沿着最陡下降方向(负梯度方向)移动。

梯度:将所有偏导数组合成“指南针”

单个偏导数只告诉你某个单一方向的坡度。而梯度∇J则是一个向量,它收集了所有参数方向上的偏导数:

∇J = [∂J/∂θ₀, ∂J/∂θ₁, ..., ∂J/∂θₙ]^T

梯度向量的方向,指向了函数 J在当前点上升最快的方向。因此,负梯度的方向就指向了函数下降最快的方向。梯度下降算法就是利用这个“指南针”来寻找最小值的。

总结

一个函数 J 对参数 θⱼ 的偏导数 ∂J/∂θⱼ,其含义是:

  1. 锁定其他变量:固定所有其他参数不变。

  2. 测量单向变化:只让参数 θⱼ 发生微小变化,观察函数 J 值的变化速率。

  3. 提供更新信号:在梯度下降中,它直接告诉我们,为了降低 J,应该朝哪个方向(增加还是减少)调整参数 θⱼ。正导数意味着要减小参数,负导数意味着要增大参数。