一、线性回归

应用范围

确定两种或两种以上变量间相互依赖的定量关系。典型场景:房价预测(面积→价格)、销量预测等。适用于输出为连续实数值、特征与输出呈近似线性关系的问题。

输入输出

  • 输入:训练集 {(xi,yi)}i=1N\{(\mathbf{x}_i, y_i)\}_{i=1}^{N}{(xi,yi)}i=1N,其中 xi∈Rn\mathbf{x}_i \in \mathbb{R}^nxiRnnnn 维特征向量,yi∈Ry_i \in \mathbb{R}yiR 为连续实数值标签;NNN 为样本数量
  • 输出:模型参数 θ∈Rn\boldsymbol{\theta} \in \mathbb{R}^nθRn

模型假设函数:

hθ(x)=θ⊤x=θ1x1+θ2x2+⋯+θnxn+θ0 h_{\boldsymbol{\theta}}(\mathbf{x}) = \boldsymbol{\theta}^{\top}\mathbf{x} = \theta_1 x_1 + \theta_2 x_2 + \cdots + \theta_n x_n + \theta_0 hθ(x)=θx=θ1x1+θ2x2++θnxn+θ0

θ=[θ1,θ2,⋯ ,θn]⊤\boldsymbol{\theta} = [\theta_1, \theta_2, \cdots, \theta_n]^{\top}θ=[θ1,θ2,,θn] — 权值向量,每个分量对应一个特征的系数

θ0\theta_0θ0 — 偏置项(截距)

x=[x1,x2,⋯ ,xn]⊤\mathbf{x} = [x_1, x_2, \cdots, x_n]^{\top}x=[x1,x2,,xn] — 输入特征向量

算法步骤

代价函数(最小二乘):

J(θ)=12∑i=1N(yi−hθ(xi))2 J(\boldsymbol{\theta}) = \frac{1}{2} \sum_{i=1}^{N} \left(y_i - h_{\boldsymbol{\theta}}(\mathbf{x}_i)\right)^2 J(θ)=21i=1N(yihθ(xi))2

J(θ)J(\boldsymbol{\theta})J(θ) — 均方误差的一半(系数 1/21/21/2 为求导方便)

yiy_iyi — 第 iii 个样本的真实标签

hθ(xi)h_{\boldsymbol{\theta}}(\mathbf{x}_i)hθ(xi) — 模型对第 iii 个样本的预测值

NNN — 样本总数

解析求解:令梯度为零 ∂J(θ)∂θ=0\frac{\partial J(\boldsymbol{\theta})}{\partial \boldsymbol{\theta}} = 0θJ(θ)=0,直接得到闭式解:

θ=(X⊤X)−1X⊤y \boldsymbol{\theta} = (\mathbf{X}^{\top}\mathbf{X})^{-1}\mathbf{X}^{\top}\mathbf{y} θ=(XX)1Xy

X=[x1⊤;x2⊤;⋯ ;xN⊤]∈RN×n\mathbf{X} = [\mathbf{x}_1^{\top}; \mathbf{x}_2^{\top}; \cdots; \mathbf{x}_N^{\top}] \in \mathbb{R}^{N \times n}X=[x1;x2;;xN]RN×n — 所有样本特征按行堆叠的设计矩阵

y=[y1,y2,⋯ ,yN]⊤∈RN\mathbf{y} = [y_1, y_2, \cdots, y_N]^{\top} \in \mathbb{R}^{N}y=[y1,y2,,yN]RN — 所有标签组成的列向量

(X⊤X)−1(\mathbf{X}^{\top}\mathbf{X})^{-1}(XX)1X⊤X\mathbf{X}^{\top}\mathbf{X}XX 的逆矩阵(要求 X⊤X\mathbf{X}^{\top}\mathbf{X}XX 可逆,即特征维度 nnn 不宜过高)

解析解一步到位,适用于特征维数不高的场景。维数过高时矩阵求逆代价大,改用梯度下降。


二、梯度下降法

应用范围

优化问题通用求解方法。当代价函数非线性、无法求解析解时使用(如对数回归、神经网络训练等)。适用于任意可微目标函数的迭代寻优。

输入输出

  • 输入:代价函数 J(θ)J(\boldsymbol{\theta})J(θ),初始参数 θ0\boldsymbol{\theta}_0θ0,学习率 α\alphaα
  • 输出:最优参数 θ∗\boldsymbol{\theta}^{*}θ(或满足收敛条件的 θ\boldsymbol{\theta}θ

算法步骤

  1. 初始化参数 θ0\boldsymbol{\theta}_0θ0,迭代次数 k=0k = 0k=0

  2. 计算当前梯度 ∇θJ(θk)\nabla_{\boldsymbol{\theta}} J(\boldsymbol{\theta}_k)θJ(θk)

  3. 更新参数

    θk+1=θk−α∇θJ \boldsymbol{\theta}_{k+1} = \boldsymbol{\theta}_k - \alpha \nabla_{\boldsymbol{\theta}} J θk+1=θkαθJ

    θk\boldsymbol{\theta}_kθk — 第 kkk 次迭代的参数值

θk+1\boldsymbol{\theta}_{k+1}θk+1 — 更新后的参数

α\alphaα — 学习率,0<α≤10 < \alpha \leq 10<α1,控制每步更新的幅度

∇θJ=∂J∂θ\nabla_{\boldsymbol{\theta}} J = \frac{\partial J}{\partial \boldsymbol{\theta}}θJ=θJ — 代价函数对参数的梯度向量,指向 JJJ 增长最快的方向

  1. J(θk+1)<εJ(\boldsymbol{\theta}_{k+1}) < \varepsilonJ(θk+1)<ε(预设阈值),停止;否则 k←k+1k \leftarrow k+1kk+1,回到第 2 步

收敛性:由一阶泰勒展开 J(θk+1)≈J(θk)+∇J⊤ΔθkJ(\boldsymbol{\theta}_{k+1}) \approx J(\boldsymbol{\theta}_k) + \nabla J^{\top} \Delta \boldsymbol{\theta}_kJ(θk+1)J(θk)+JΔθk,取 Δθk=−α∇J\Delta \boldsymbol{\theta}_k = -\alpha \nabla JΔθk=αJ 后恒有 J(θk+1)≤J(θk)J(\boldsymbol{\theta}_{k+1}) \leq J(\boldsymbol{\theta}_k)J(θk+1)J(θk)


三、对数回归(二分类逻辑回归)

应用范围

二分类问题:输出为 0 或 1 的类别标签,需要给出样本属于正类的概率。如垃圾邮件识别、疾病诊断、通过/不通过判定等线性可分或近似线性可分的二分类场景。

输入输出

  • 输入:训练集 {(xi,yi)}i=1N\{(\mathbf{x}_i, y_i)\}_{i=1}^{N}{(xi,yi)}i=1Nxi∈Rn\mathbf{x}_i \in \mathbb{R}^nxiRnyi∈{0,1}y_i \in \{0, 1\}yi{0,1}
  • 输出:参数 θ\boldsymbol{\theta}θ,以及新样本属于正类的概率 y^∈(0,1)\hat{y} \in (0,1)y^(0,1)

Sigmoid 映射——将线性输出 z=θ⊤xz = \boldsymbol{\theta}^{\top}\mathbf{x}z=θx 压缩至 (0,1)(0,1)(0,1)

hθ(x)=11+e−θ⊤x h_{\boldsymbol{\theta}}(\mathbf{x}) = \frac{1}{1 + e^{-\boldsymbol{\theta}^{\top}\mathbf{x}}} hθ(x)=1+eθx1

z=θ⊤xz = \boldsymbol{\theta}^{\top}\mathbf{x}z=θx — 线性组合得分

hθ(x)h_{\boldsymbol{\theta}}(\mathbf{x})hθ(x) — 预测为正类的概率

分母 1+e−z1 + e^{-z}1+ez — 保证输出在 (0,1)(0,1)(0,1) 区间

导数h′=h(1−h)h' = h(1 - h)h=h(1h)——此性质极大简化后续梯度推导。

算法步骤

  1. 构造交叉熵代价函数(极大似然推导):

    由 Bernoulli 分布 P(y∣x;θ)=hθ(x)y(1−hθ(x))1−yP(y \mid \mathbf{x}; \boldsymbol{\theta}) = h_{\boldsymbol{\theta}}(\mathbf{x})^y (1 - h_{\boldsymbol{\theta}}(\mathbf{x}))^{1-y}P(yx;θ)=hθ(x)y(1hθ(x))1y,取负对数似然:

    J(θ)=−∑i=1N[yilog⁡hθ(xi)+(1−yi)log⁡(1−hθ(xi))] J(\boldsymbol{\theta}) = -\sum_{i=1}^{N} \left[ y_i \log h_{\boldsymbol{\theta}}(\mathbf{x}_i) + (1 - y_i) \log(1 - h_{\boldsymbol{\theta}}(\mathbf{x}_i)) \right] J(θ)=i=1N[yiloghθ(xi)+(1yi)log(1hθ(xi))]

    yiy_iyi — 第 iii 个样本的真实标签(0 或 1)

hθ(xi)h_{\boldsymbol{\theta}}(\mathbf{x}_i)hθ(xi) — 模型预测为正类的概率

log⁡\loglog — 取自然对数

第一项 yilog⁡hy_i \log hyilogh — 仅当 yi=1y_i=1yi=1 时激活

第二项 (1−yi)log⁡(1−h)(1-y_i) \log(1-h)(1yi)log(1h) — 仅当 yi=0y_i=0yi=0 时激活

  1. 计算梯度

    ∂J(θ)∂θ=∑i=1Nxi(hθ(xi)−yi) \frac{\partial J(\boldsymbol{\theta})}{\partial \boldsymbol{\theta}} = \sum_{i=1}^{N} \mathbf{x}_i \left( h_{\boldsymbol{\theta}}(\mathbf{x}_i) - y_i \right) θJ(θ)=i=1Nxi(hθ(xi)yi)

    ∂J∂θ\frac{\partial J}{\partial \boldsymbol{\theta}}θJ — 代价函数对 θ\boldsymbol{\theta}θ 的梯度向量

hθ(xi)−yih_{\boldsymbol{\theta}}(\mathbf{x}_i) - y_ihθ(xi)yi — 预测值与真实值的偏差,即单个样本对梯度的贡献强度

xi\mathbf{x}_ixi — 该样本的特征方向

  1. 梯度下降迭代更新

    θk+1=θk−α∑i=1Nxi(hθ(xi)−yi) \boldsymbol{\theta}_{k+1} = \boldsymbol{\theta}_k - \alpha \sum_{i=1}^{N} \mathbf{x}_i \left( h_{\boldsymbol{\theta}}(\mathbf{x}_i) - y_i \right) θk+1=θkαi=1Nxi(hθ(xi)yi)

  2. 重复步骤 2–3 直至收敛。


四、多分类回归(Softmax)

应用范围

KKK 类互斥分类问题(K>2K > 2K>2),需要给出样本属于每个类别的概率分布。如手写数字识别(0–9)、图像分类、文本主题分类等。

输入输出

  • 输入:训练集 {(xi,yi)}i=1N\{(\mathbf{x}_i, y_i)\}_{i=1}^{N}{(xi,yi)}i=1Nxi∈Rn\mathbf{x}_i \in \mathbb{R}^nxiRnyi∈{1,2,⋯ ,K}y_i \in \{1, 2, \cdots, K\}yi{1,2,,K};每类对应一组参数 θ(k)∈Rn\boldsymbol{\theta}^{(k)} \in \mathbb{R}^nθ(k)Rn
  • 输出:参数矩阵 Θ=[θ(1),θ(2),⋯ ,θ(K)]⊤∈RK×n\boldsymbol{\Theta} = [\boldsymbol{\theta}^{(1)}, \boldsymbol{\theta}^{(2)}, \cdots, \boldsymbol{\theta}^{(K)}]^{\top} \in \mathbb{R}^{K \times n}Θ=[θ(1),θ(2),,θ(K)]RK×n,以及属于各类的概率向量 y^∈RK\hat{\mathbf{y}} \in \mathbb{R}^Ky^RK

Softmax 函数

hΘ(x)=[P(y=1∣x;Θ)P(y=2∣x;Θ)⋮P(y=K∣x;Θ)]=1∑c=1Keθ(c)⊤x[eθ(1)⊤xeθ(2)⊤x⋮eθ(K)⊤x] h_{\boldsymbol{\Theta}}(\mathbf{x}) = \begin{bmatrix} P(y=1 \mid \mathbf{x}; \boldsymbol{\Theta}) \\ P(y=2 \mid \mathbf{x}; \boldsymbol{\Theta}) \\ \vdots \\ P(y=K \mid \mathbf{x}; \boldsymbol{\Theta}) \end{bmatrix} = \frac{1}{\sum_{c=1}^{K} e^{\boldsymbol{\theta}^{(c)\top}\mathbf{x}}} \begin{bmatrix} e^{\boldsymbol{\theta}^{(1)\top}\mathbf{x}} \\ e^{\boldsymbol{\theta}^{(2)\top}\mathbf{x}} \\ \vdots \\ e^{\boldsymbol{\theta}^{(K)\top}\mathbf{x}} \end{bmatrix} hΘ(x)= P(y=1x;Θ)P(y=2x;Θ)P(y=Kx;Θ) =c=1Keθ(c)x1 eθ(1)xeθ(2)xeθ(K)x

θ(k)\boldsymbol{\theta}^{(k)}θ(k) — 第 kkk 类的权值向量

eθ(k)⊤xe^{\boldsymbol{\theta}^{(k)\top}\mathbf{x}}eθ(k)x — 第 kkk 类的得分指数化(保证非负)

分母 ∑c=1Keθ(c)⊤x\sum_{c=1}^{K} e^{\boldsymbol{\theta}^{(c)\top}\mathbf{x}}c=1Keθ(c)x — 所有类得分指数和,起归一化作用,使输出为合法的概率分布(和为 1)

算法步骤

  1. 构造交叉熵损失

    J(Θ)=−∑i=1N∑k=1K1{y(i)=k}⋅log⁡eθ(k)⊤x(i)∑j=1Keθ(j)⊤x(i) J(\boldsymbol{\Theta}) = -\sum_{i=1}^{N} \sum_{k=1}^{K} \mathbf{1}\{y^{(i)} = k\} \cdot \log \frac{e^{\boldsymbol{\theta}^{(k)\top}\mathbf{x}^{(i)}}}{\sum_{j=1}^{K} e^{\boldsymbol{\theta}^{(j)\top}\mathbf{x}^{(i)}}} J(Θ)=i=1Nk=1K1{y(i)=k}logj=1Keθ(j)x(i)eθ(k)x(i)

    简写为:

    ℓ(y,y^)=−∑j=1Kyjlog⁡y^j \ell(\mathbf{y}, \hat{\mathbf{y}}) = -\sum_{j=1}^{K} y_j \log \hat{y}_j (y,y^)=j=1Kyjlogy^j

    1{y(i)=k}\mathbf{1}\{y^{(i)} = k\}1{y(i)=k} — 指示函数,当第 iii 个样本真实类为 kkk 时为 1,否则为 0

y^j=P(y=j∣x;Θ)\hat{y}_j = P(y=j \mid \mathbf{x}; \boldsymbol{\Theta})y^j=P(y=jx;Θ) — 预测为第 jjj 类的概率

yjy_jyj — one-hot 编码的真实标签第 jjj 分量(0 或 1)

ℓ(y,y^)\ell(\mathbf{y}, \hat{\mathbf{y}})(y,y^) — 交叉熵,衡量真实分布 y\mathbf{y}y 与预测分布 y^\hat{\mathbf{y}}y^ 的差异

  1. 计算梯度(对第 kkk 类):

    ∂J∂θ(k)=−∑i=1Nx(i)[1{y(i)=k}−P(y(i)=k∣x(i);Θ)] \frac{\partial J}{\partial \boldsymbol{\theta}^{(k)}} = -\sum_{i=1}^{N} \mathbf{x}^{(i)} \left[ \mathbf{1}\{y^{(i)} = k\} - P(y^{(i)} = k \mid \mathbf{x}^{(i)}; \boldsymbol{\Theta}) \right] θ(k)J=i=1Nx(i)[1{y(i)=k}P(y(i)=kx(i);Θ)]

    梯度方向由"真实类别指示"与"当前预测概率"之差驱动:

若样本确实属于 kkk 类,1−P\mathbf{1} - P1P 为正 → 参数向该样本方向调整,增大该类得分

若不属于 kkk 类,0−P0 - P0P 为负 → 参数远离该样本方向

  1. 梯度下降更新θt+1(k)=θt(k)−α⋅∂J∂θ(k)\boldsymbol{\theta}^{(k)}_{t+1} = \boldsymbol{\theta}^{(k)}_t - \alpha \cdot \frac{\partial J}{\partial \boldsymbol{\theta}^{(k)}}θt+1(k)=θt(k)αθ(k)J,对所有 k=1,⋯ ,Kk = 1, \cdots, Kk=1,,K 同步更新。

五、感知机

应用范围

线性二分类。适用于线性可分的数据集。1957 年由 Rosenblatt 提出,是神经网络和支持向量机的理论基础。

输入输出

  • 输入:训练集 {(xi,yi)}\{(\mathbf{x}_i, y_i)\}{(xi,yi)}xi∈Rn\mathbf{x}_i \in \mathbb{R}^nxiRnyi∈{−1,+1}y_i \in \{-1, +1\}yi{1,+1};学习率 η>0\eta > 0η>0
  • 输出:权值向量 w∈Rn\mathbf{w} \in \mathbb{R}^nwRn

模型

y=sign(w⊤x),sign(x)={+1,x≥0−1,x<0 y = \text{sign}(\mathbf{w}^{\top}\mathbf{x}), \quad \text{sign}(x) = \begin{cases} +1, & x \geq 0 \\ -1, & x < 0 \end{cases} y=sign(wx),sign(x)={+1,1,x0x<0

w\mathbf{w}w — 权值向量,决定分类超平面的法方向

w⊤x\mathbf{w}^{\top}\mathbf{x}wx — 样本在法方向上的投影得分

sign — 符号函数,将得分映射为 ±1\pm 1±1 二分类别

算法步骤

  1. 初始化 w0\mathbf{w}_0w0,迭代次数 k=0k = 0k=0

  2. 遍历训练样本 (xi,yi)(\mathbf{x}_i, y_i)(xi,yi)

  3. 判断误分类:若 yi⋅(wk⊤xi)≤0y_i \cdot (\mathbf{w}_k^{\top}\mathbf{x}_i) \leq 0yi(wkxi)0(即预测类别与真实类别符号不一致),则执行更新:

    wk+1=wk+η⋅yixi \mathbf{w}_{k+1} = \mathbf{w}_k + \eta \cdot y_i \mathbf{x}_i wk+1=wk+ηyixi

    wk\mathbf{w}_kwk — 当前权值

wk+1\mathbf{w}_{k+1}wk+1 — 更新后权值

η\etaη — 学习率(步长因子)

yixiy_i \mathbf{x}_iyixi — 带符号的样本方向:正例时 w\mathbf{w}wxi\mathbf{x}_ixi 靠近,负例时 w\mathbf{w}w 远离 xi\mathbf{x}_ixi

此规则与 Hebb 规则 Δw=α⋅x⋅y\Delta w = \alpha \cdot x \cdot yΔw=αxy 等价

  1. 重复步骤 2–3,直到训练集中无误分类点

收敛性:数据线性可分时,算法必在有限步内收敛;线性不可分时,迭代振荡不收敛。

损失函数(基于误分类点到超平面距离):

L(w)=−1∥w∥∑误分类yiw⊤xi L(\mathbf{w}) = -\frac{1}{\|\mathbf{w}\|} \sum_{\text{误分类}} y_i \mathbf{w}^{\top}\mathbf{x}_i L(w)=w1误分类yiwxi

∥w∥\|\mathbf{w}\|w — 权值向量的 L2L_2L2 范数,将点到超平面距离归一化

求和仅针对误分类样本(yiw⊤xi<0y_i \mathbf{w}^{\top}\mathbf{x}_i < 0yiwxi<0

负号使损失为正,最小化损失等价于减少误分类


六、多层感知机(多层前馈网络)

应用范围

解决单层感知机无法处理的非线性可分问题(如 XOR 问题)。三层及以上的网络可逼近任意连续函数(万能逼近定理)。

输入输出

  • 输入:样本 x∈Rn\mathbf{x} \in \mathbb{R}^nxRn,经输入层直接传递
  • 输出:网络的最终预测 y^=a(L)\hat{\mathbf{y}} = \mathbf{a}^{(L)}y^=a(L),其中 LLL 为总层数
  • 网络结构:输入层 → 隐层(可多层)→ 输出层,相邻层全连接

前向传播

对第 lll 层(l=1,2,⋯ ,Ll = 1, 2, \cdots, Ll=1,2,,L):

z(l)=W(l)a(l−1),a(l)=f(z(l)) \mathbf{z}^{(l)} = \mathbf{W}^{(l)} \mathbf{a}^{(l-1)}, \quad \mathbf{a}^{(l)} = f(\mathbf{z}^{(l)}) z(l)=W(l)a(l1),a(l)=f(z(l))

W(l)\mathbf{W}^{(l)}W(l) — 第 lll 层的权值矩阵,元素 wij(l)w_{ij}^{(l)}wij(l) 表示第 l−1l-1l1 层的第 jjj 个节点到第 lll 层第 iii 个节点的连接权

a(l−1)\mathbf{a}^{(l-1)}a(l1) — 第 l−1l-1l1 层的输出(第 000 层即输入 a(0)=x\mathbf{a}^{(0)} = \mathbf{x}a(0)=x

z(l)\mathbf{z}^{(l)}z(l) — 第 lll 层的净输入(加权和)

f(⋅)f(\cdot)f() — 激活函数,常用 Sigmoid:σ(z)=11+e−z\sigma(z) = \frac{1}{1+e^{-z}}σ(z)=1+ez1

偏置处理:令 a0(l−1)=1a_0^{(l-1)} = 1a0(l1)=1wi0(l)=−θiw_{i0}^{(l)} = -\theta_iwi0(l)=θi,将阈值 θi\theta_iθi 并入权值矩阵。

核心结论

  • 定理 1:三层阈值节点网络可实现任意二值逻辑函数
  • 定理 2:三层 S 型非线性节点网络可一致逼近紧集上的任意连续函数

七、BP 算法(误差反传算法)

应用范围

训练多层前馈神经网络。有导师学习,适用于已知输入-期望输出样本对的各类监督学习任务。是梯度下降法在多层网络中的链式求导实现。

输入输出

  • 输入:训练集 {(xi,yi)}i=1N\{(\mathbf{x}_i, \mathbf{y}_i)\}_{i=1}^{N}{(xi,yi)}i=1N,网络层数 LLL,每层节点数,学习率 α\alphaα
  • 输出:各层权值矩阵 W(1),W(2),⋯ ,W(L)\mathbf{W}^{(1)}, \mathbf{W}^{(2)}, \cdots, \mathbf{W}^{(L)}W(1),W(2),,W(L)

算法步骤

总体流程

  1. 初始化所有权值为小随机数,k=0k = 0k=0
  2. 正向传播:输入 x\mathbf{x}x,逐层计算 z(l)→a(l)=f(z(l))\mathbf{z}^{(l)} \to \mathbf{a}^{(l)} = f(\mathbf{z}^{(l)})z(l)a(l)=f(z(l)),得最终输出 y^\hat{\mathbf{y}}y^
  3. 计算误差 e=y−y^\mathbf{e} = \mathbf{y} - \hat{\mathbf{y}}e=yy^
  4. 若误差满足要求,结束;否则执行反向传播更新权值
  5. 重复步骤 2–4 直至收敛

7.1 正向传播

l=1,⋯ ,Ll = 1, \cdots, Ll=1,,L

z(l)=W(l)a(l−1),a(l)=f(z(l)),a(0)=x \mathbf{z}^{(l)} = \mathbf{W}^{(l)} \mathbf{a}^{(l-1)}, \qquad \mathbf{a}^{(l)} = f(\mathbf{z}^{(l)}), \qquad \mathbf{a}^{(0)} = \mathbf{x} z(l)=W(l)a(l1),a(l)=f(z(l)),a(0)=x

逐层计算,前层输出 a(l−1)\mathbf{a}^{(l-1)}a(l1) 作为后层输入,信息单向流动。

7.2 代价函数

对单个样本:

J(x;w)=12∥y−y^∥2=12∥e∥2=12∑iei2 J(\mathbf{x}; \mathbf{w}) = \frac{1}{2} \|\mathbf{y} - \hat{\mathbf{y}}\|^2 = \frac{1}{2} \|\mathbf{e}\|^2 = \frac{1}{2} \sum_i e_i^2 J(x;w)=21yy^2=21e2=21iei2

y\mathbf{y}y — 期望输出向量

y^\hat{\mathbf{y}}y^ — 网络实际输出

e=y−y^\mathbf{e} = \mathbf{y} - \hat{\mathbf{y}}e=yy^ — 误差向量

∥⋅∥2\|\cdot\|^22L2L_2L2 范数的平方

7.3 反向传播——输出层权值更新(以 l=L=2l=L=2l=L=2 为例)

对输出层权值 wij(2)w_{ij}^{(2)}wij(2),链式分解:

∂J∂wij(2)=∂J∂ei⏟ei⋅∂ei∂ai⏟−1⋅∂ai∂zi⏟ai(1−ai)⋅∂zi∂wij(2)⏟aj(1)=−ei⋅ai(1−ai)⋅aj(1) \frac{\partial J}{\partial w_{ij}^{(2)}} = \underbrace{\frac{\partial J}{\partial e_i}}_{e_i} \cdot \underbrace{\frac{\partial e_i}{\partial a_i}}_{-1} \cdot \underbrace{\frac{\partial a_i}{\partial z_i}}_{a_i(1-a_i)} \cdot \underbrace{\frac{\partial z_i}{\partial w_{ij}^{(2)}}}_{a_j^{(1)}} = -e_i \cdot a_i(1 - a_i) \cdot a_j^{(1)} wij(2)J=ei eiJ1 aieiai(1ai) ziaiaj(1) wij(2)zi=eiai(1ai)aj(1)

ei=yi−aie_i = y_i - a_iei=yiai — 输出层第 iii 节点的误差

ai=f(zi)a_i = f(z_i)ai=f(zi) — 输出层第 iii 节点的激活值

ai(1−ai)=f′(zi)a_i(1-a_i) = f'(z_i)ai(1ai)=f(zi) — Sigmoid 函数的导数值

aj(1)a_j^{(1)}aj(1) — 隐层第 jjj 节点的输出,即该权值对应的前层输入

定义输出层局部梯度 δi(2)\delta_i^{(2)}δi(2)

δi(2)=ai(1−ai)⋅ei \delta_i^{(2)} = a_i(1 - a_i) \cdot e_i δi(2)=ai(1ai)ei

δi(2)\delta_i^{(2)}δi(2) — 第 2 层第 iii 节点的"等效误差",综合了激活函数的局部梯度和输出误差

权值更新量

Δwij(2)=−α∂J∂wij(2)=α⋅δi(2)⋅aj(1) \Delta w_{ij}^{(2)} = -\alpha \frac{\partial J}{\partial w_{ij}^{(2)}} = \alpha \cdot \delta_i^{(2)} \cdot a_j^{(1)} Δwij(2)=αwij(2)J=αδi(2)aj(1)

7.4 反向传播——隐层权值更新(l=1l=1l=1

隐层权值 wij(1)w_{ij}^{(1)}wij(1) 会通过后续层影响所有输出节点的误差。链式分解:

∂J∂wij(1)=∂J∂e⊤∂e∂ai(1)∂ai(1)∂wij(1) \frac{\partial J}{\partial w_{ij}^{(1)}} = \frac{\partial J}{\partial \mathbf{e}}^{\top} \frac{\partial \mathbf{e}}{\partial a_i^{(1)}} \frac{\partial a_i^{(1)}}{\partial w_{ij}^{(1)}} wij(1)J=eJai(1)ewij(1)ai(1)

中间项 ∂e∂ai(1)\frac{\partial \mathbf{e}}{\partial a_i^{(1)}}ai(1)e 需展开到每个输出节点 mmm

∂em∂ai(1)=f′(zm(2))⋅wmi(2)=am(1−am)⋅wmi(2) \frac{\partial e_m}{\partial a_i^{(1)}} = f'(z_m^{(2)}) \cdot w_{mi}^{(2)} = a_m(1 - a_m) \cdot w_{mi}^{(2)} ai(1)em=f(zm(2))wmi(2)=am(1am)wmi(2)

wmi(2)w_{mi}^{(2)}wmi(2) — 隐层第 iii 节点连接到输出层第 mmm 节点的权值,汇总了隐层节点对所有输出误差的贡献

定义隐层局部梯度 δi(1)\delta_i^{(1)}δi(1)——误差从后层往前"反传":

δi(1)=(∑j=1mwji(2)δj(2))⋅ai(1)′ \delta_i^{(1)} = \left( \sum_{j=1}^{m} w_{ji}^{(2)} \delta_j^{(2)} \right) \cdot a_i^{(1)}{}' δi(1)=(j=1mwji(2)δj(2))ai(1)

∑jwji(2)δj(2)\sum_j w_{ji}^{(2)} \delta_j^{(2)}jwji(2)δj(2) — 输出层各节点的 δ\deltaδ 通过权值加权求和,反传到隐层第 iii 节点

ai(1)′=ai(1)(1−ai(1))a_i^{(1)}{}' = a_i^{(1)}(1 - a_i^{(1)})ai(1)=ai(1)(1ai(1)) — 隐层第 iii 节点激活函数的导数

权值更新量

Δwij(1)=α⋅δi(1)⋅xj \Delta w_{ij}^{(1)} = \alpha \cdot \delta_i^{(1)} \cdot x_j Δwij(1)=αδi(1)xj

xj=aj(0)x_j = a_j^{(0)}xj=aj(0) — 网络原始输入的第 jjj 个分量

7.5 BP 算法一般形式(任意层数 LLL

对第 lll 层(1≤l≤L1 \leq l \leq L1lL):

步骤 公式 说明
① 输出层 δ\deltaδ δi(L)=ai(1−ai)⋅ei\delta_i^{(L)} = a_i(1 - a_i) \cdot e_iδi(L)=ai(1ai)ei δi(L)\delta_i^{(L)}δi(L) — 输出层第 iii 节点的局部梯度,由输出误差和激活导数合成
② 误差反传 δi(l)=(∑jwji(l+1)δj(l+1))⋅ai(l)′\delta_i^{(l)} = \left(\sum_{j} w_{ji}^{(l+1)} \delta_j^{(l+1)}\right) \cdot a_i^{(l)}{}'δi(l)=(jwji(l+1)δj(l+1))ai(l) 后层 δ\deltaδ 经权值加权求和后乘以本层激活导数,lllL−1L-1L1 逐层递减至 111
③ 权值更新 Δwij(l)=α⋅δi(l)⋅aj(l−1)\Delta w_{ij}^{(l)} = \alpha \cdot \delta_i^{(l)} \cdot a_j^{(l-1)}Δwij(l)=αδi(l)aj(l1) α\alphaα 为学习率;aj(l−1)a_j^{(l-1)}aj(l1) 为前层输出(l=1l=1l=1aj(0)=xja_j^{(0)} = x_jaj(0)=xj
④ 递推 l←l−1l \leftarrow l-1ll1,重复 ②–③ 直至 l=1l=1l=1

八、补充:神经元模型

M-P 模型(McCulloch-Pitts, 1943)

人工神经元的基本数学模型:

y=f(∑j=1nwjxj−θ)=f(w⊤x) y = f\left(\sum_{j=1}^{n} w_j x_j - \theta\right) = f(\mathbf{w}^{\top}\mathbf{x}) y=f(j=1nwjxjθ)=f(wx)

xjx_jxj — 第 jjj 个输入信号

wjw_jwj — 第 jjj 个输入对应的连接权值

θ\thetaθ — 阈值,当加权和超过 θ\thetaθ 时神经元被激活

f(⋅)f(\cdot)f() — 激活函数

yyy — 神经元输出

常用激活函数

函数 表达式 值域 特点
Log-Sigmoid f(x)=11+e−βxf(x) = \dfrac{1}{1 + e^{-\beta x}}f(x)=1+eβx1 (0,1)(0, 1)(0,1) 非对称,光滑可微,β\betaβ 控制陡峭度
Tan-Sigmoid f(x)=1−e−βx1+e−βxf(x) = \dfrac{1 - e^{-\beta x}}{1 + e^{-\beta x}}f(x)=1+eβx1eβx (−1,1)(-1, 1)(1,1) 对称,光滑可微,以零为中心
阶跃函数 f(x)={+1,x≥0−1,x<0f(x) = \begin{cases} +1, & x \geq 0 \\ -1, & x < 0 \end{cases}f(x)={+1,1,x0x<0 {−1,+1}\{-1, +1\}{1,+1} 硬判决,不可微,构成阈值逻辑单元

Hebb 规则

权值调整量正比于输入与输出的乘积:

Δw=α⋅x⋅y \Delta w = \alpha \cdot x \cdot y Δw=αxy

Δw\Delta wΔw — 权值调整量

α\alphaα — 学习率

xxx — 输入信号

yyy — 输出信号

生物学直觉:同时兴奋的神经元之间的连接被强化


九、BP 算法评价

优点 缺点
学习完全自主,无需人工设计特征 非全局收敛,可能陷入局部极小值
可逼近任意非线性函数(万能逼近) 收敛速度慢,需大量迭代
理论成熟,链式求导体系完备 学习率 α\alphaα 需人工选择,无自适应机制
适用于各类监督学习任务 网络结构(层数、隐层节点数)缺乏理论指导

公式速查

名称 公式
线性回归解析解 θ=(X⊤X)−1X⊤y\boldsymbol{\theta} = (\mathbf{X}^{\top}\mathbf{X})^{-1}\mathbf{X}^{\top}\mathbf{y}θ=(XX)1Xy
梯度下降更新 θk+1=θk−α∇J\boldsymbol{\theta}_{k+1} = \boldsymbol{\theta}_k - \alpha \nabla Jθk+1=θkαJ
Sigmoid σ(z)=11+e−z\sigma(z) = \frac{1}{1 + e^{-z}}σ(z)=1+ez1
Sigmoid 导数 σ′(z)=σ(z)(1−σ(z))\sigma'(z) = \sigma(z)(1 - \sigma(z))σ(z)=σ(z)(1σ(z))
二分类交叉熵 J=−∑[ylog⁡y^+(1−y)log⁡(1−y^)]J = -\sum [y \log \hat{y} + (1-y) \log(1-\hat{y})]J=[ylogy^+(1y)log(1y^)]
Softmax y^k=eθ(k)⊤x∑ceθ(c)⊤x\hat{y}_k = \frac{e^{\boldsymbol{\theta}^{(k)\top}\mathbf{x}}}{\sum_c e^{\boldsymbol{\theta}^{(c)\top}\mathbf{x}}}y^k=ceθ(c)xeθ(k)x
多分类交叉熵 ℓ=−∑j=1Kyjlog⁡y^j\ell = -\sum_{j=1}^{K} y_j \log \hat{y}_j=j=1Kyjlogy^j
感知机更新 wk+1=wk+ηyixi\mathbf{w}_{k+1} = \mathbf{w}_k + \eta y_i \mathbf{x}_iwk+1=wk+ηyixi
M-P 神经元 y=f(∑wjxj−θ)y = f(\sum w_j x_j - \theta)y=f(wjxjθ)
Hebb 规则 Δw=α⋅x⋅y\Delta w = \alpha \cdot x \cdot yΔw=αxy
前向传播 a(l)=f(W(l)a(l−1))\mathbf{a}^{(l)} = f(\mathbf{W}^{(l)} \mathbf{a}^{(l-1)})a(l)=f(W(l)a(l1))
BP 输出层 δ\deltaδ δi(L)=ai(1−ai)⋅ei\delta_i^{(L)} = a_i(1-a_i) \cdot e_iδi(L)=ai(1ai)ei
BP 误差反传 δi(l)=(∑jwji(l+1)δj(l+1))⋅ai(l)′\delta_i^{(l)} = (\sum_j w_{ji}^{(l+1)} \delta_j^{(l+1)}) \cdot a_i^{(l)}{}'δi(l)=(jwji(l+1)δj(l+1))ai(l)
BP 权值更新 Δwij(l)=α⋅δi(l)⋅aj(l−1)\Delta w_{ij}^{(l)} = \alpha \cdot \delta_i^{(l)} \cdot a_j^{(l-1)}Δwij(l)=αδi(l)aj(l1)
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐