2 min read

基础算法系列梯度下降算法详解:原理与优化学习笔记

本文于2026-03-28更新。 如发现问题或者有建议,欢迎提交 Issue

整合之前梯度下降的文章。

梯度下降和 β

这是梯度下降的公式

$$J(\theta) = \frac{1}{2}\sum(y-\hat y_{\theta})^2$$

这里的yx都是训练集给定的,如果要减小J(θ)只能通过不断变动向量θ的值,从而得到最小的J(θ)

三种梯度下降方式

  • 批量梯度下降法BGD: 全量
  • 随机梯度下降法SGD: 一个
  • min-batch 小批量梯度下降法MBGD: 若干个

三者的区别在于梯度下降时J(θ)使用样本的大小。、

$$\theta_j:= \theta_j 0- \alpha \frac{\partial}{\partial \theta_j}J(\theta)$$

这是每个θj更新的方式。 这里以批量梯度下降法BGD的方式,进行推导。

$$\begin{alignat}{2} \frac{\partial}{\partial \theta_j}J(\theta) &= \frac{\partial}{\partial \theta_j}\frac{1}{2}(y-\hat y)^2 \\ &= \frac{1}{2} \cdot 2(y-\hat y) \cdot \frac{\partial}{\partial \theta_j}(y-\hat y) \\ &= (y-\hat y) \cdot \frac{\partial}{\partial \theta_j}(\sum(y_i-\theta x_i)) \\ &= (y-\hat y) \cdot (-x_i) \\ &= \frac{1}{m} \sum_{i=1}^m(y-\hat y) \cdot (-x_i) \\ \end{alignat}$$

  • 批量梯度下降法BGD: 全量

$$\theta_j:= \theta_j + \frac{1}{m} \sum_{i=1}^m(y_i-\hat y) \cdot x_i$$

  • 随机梯度下降法SGD: 一个

θj := θj + (yi) ⋅ xi

  • min-batch 小批量梯度下降法MBGD: 若干个

$$\theta_j:= \theta_j + \alpha \cdot \frac{1}{10} \sum_{i=1}^{i+9}(y_i-\hat y) \cdot x_i$$ # 神经网络的bias的定义

bias其实就是每个方程的截距。

每个节点都有一个bias,一次一共有16个bias。 因此到目前为止,784 × 16w16个bias。 [@3Blue1BrownDeepLearn]

这是全部弄下来的bias数量和w数量。

于是转化成了线性代数的问题。 这个地方对线性代数的解释非常到位(14:26) 。

α(1) = σ(𝒲α(0)+b)

这里α(i)表示第几层。

Relu其实一点都不简单,关键是为了描述突变,描述inactive → active

梯度下降一定是按照最陡的方向 [@忆臻2018梯度]

假设,空间点从A点移动到B点。 空间两个特征变量x1x2z = f(x)是损失函数,x = [x1,x2]。 假设x → x + ΔxΔx是移动的向量,那么,

Δz = f(x+Δx) − f(x)

使用泰勒公式,近似得到,

$$\begin{alignat}{2} \Delta z & = f(x+\Delta x)-f(x) \\ & = \nabla f^T(x) \Delta x \end{alignat}$$

fT(x)是各种偏导集合的矩阵1。不理解的话,就当成一阶导数理解吧。 并且这句是梯度下降公式中的梯度。 注意这里fT(x)Δx是两个向量,fT(x)显然是x点的切线方向, Δx是移动向量方向。

要下降最快,就是说, $$\begin{alignat}{2} \max \Delta z & \to \max \nabla f^T(x) \Delta x \\ & \to \max ||\nabla f^T(x)||\cdot ||\Delta x|| \cos(\theta) \\ & \to \max \cos(\theta) \\ & \to \theta = 0 \end{alignat}$$

因此当移动方向是切线方向是下降最快的。

神经网络的过程 [@3Blue1BrownDeepLearn2]

无隐藏层的神经网络就是一般线性方程。

最形象的图, 输入层784个节点, 第一层隐藏层16个,相当于每个输入层的节点都跟第一层隐藏层的节点链接。 第二个隐藏层16个, 输出层10个。 因此w784 × 16 + 16 × 16 + 16 × 10

定义好后,梯度下降,找最合适的θ,使得损失最小。

这里有13000个w,但是都是一个列向量而已,用 $\nabla C(W) = \frac{\partial C}{\partial w}$表示。 13000个分力最后会给出一个合力。

最后这张图解释了,虽然在点(1,1)但是明显最快方向为(3,1)也就是说,梯度下降不一定是直线的,会拐弯。 因此梯度下降一定是按照最陡的方向(@ref(fastdo))。

参考文献


  1. 因为导数满足adding和scaling的性质,因此用矩阵来表达。↩︎