神经网络与深度学习 — 课程笔记(第2周)
一、线性回归
应用范围
确定两种或两种以上变量间相互依赖的定量关系。典型场景:房价预测(面积→价格)、销量预测等。适用于输出为连续实数值、特征与输出呈近似线性关系的问题。
输入输出
- 输入:训练集 {(xi,yi)}i=1N\{(\mathbf{x}_i, y_i)\}_{i=1}^{N}{(xi,yi)}i=1N,其中 xi∈Rn\mathbf{x}_i \in \mathbb{R}^nxi∈Rn 为 nnn 维特征向量,yi∈Ry_i \in \mathbb{R}yi∈R 为连续实数值标签;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=1∑N(yi−hθ(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} θ=(X⊤X)−1X⊤y
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}(X⊤X)−1 — X⊤X\mathbf{X}^{\top}\mathbf{X}X⊤X 的逆矩阵(要求 X⊤X\mathbf{X}^{\top}\mathbf{X}X⊤X 可逆,即特征维度 nnn 不宜过高)
解析解一步到位,适用于特征维数不高的场景。维数过高时矩阵求逆代价大,改用梯度下降。
二、梯度下降法
应用范围
优化问题通用求解方法。当代价函数非线性、无法求解析解时使用(如对数回归、神经网络训练等)。适用于任意可微目标函数的迭代寻优。
输入输出
- 输入:代价函数 J(θ)J(\boldsymbol{\theta})J(θ),初始参数 θ0\boldsymbol{\theta}_0θ0,学习率 α\alphaα
- 输出:最优参数 θ∗\boldsymbol{\theta}^{*}θ∗(或满足收敛条件的 θ\boldsymbol{\theta}θ)
算法步骤
-
初始化参数 θ0\boldsymbol{\theta}_0θ0,迭代次数 k=0k = 0k=0
-
计算当前梯度 ∇θJ(θk)\nabla_{\boldsymbol{\theta}} J(\boldsymbol{\theta}_k)∇θJ(θk)
-
更新参数:
θ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 增长最快的方向
- 若 J(θk+1)<εJ(\boldsymbol{\theta}_{k+1}) < \varepsilonJ(θk+1)<ε(预设阈值),停止;否则 k←k+1k \leftarrow k+1k←k+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=1N,xi∈Rn\mathbf{x}_i \in \mathbb{R}^nxi∈Rn,yi∈{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+e−z — 保证输出在 (0,1)(0,1)(0,1) 区间
导数:h′=h(1−h)h' = h(1 - h)h′=h(1−h)——此性质极大简化后续梯度推导。
算法步骤
-
构造交叉熵代价函数(极大似然推导):
由 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(y∣x;θ)=hθ(x)y(1−hθ(x))1−y,取负对数似然:
J(θ)=−∑i=1N[yiloghθ(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=1∑N[yiloghθ(xi)+(1−yi)log(1−hθ(xi))]
yiy_iyi — 第 iii 个样本的真实标签(0 或 1)
hθ(xi)h_{\boldsymbol{\theta}}(\mathbf{x}_i)hθ(xi) — 模型预测为正类的概率
log\loglog — 取自然对数
第一项 yiloghy_i \log hyilogh — 仅当 yi=1y_i=1yi=1 时激活
第二项 (1−yi)log(1−h)(1-y_i) \log(1-h)(1−yi)log(1−h) — 仅当 yi=0y_i=0yi=0 时激活
-
计算梯度:
∂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=1∑Nxi(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 — 该样本的特征方向
-
梯度下降迭代更新:
θ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=1∑Nxi(hθ(xi)−yi)
-
重复步骤 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=1N,xi∈Rn\mathbf{x}_i \in \mathbb{R}^nxi∈Rn,yi∈{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=1∣x;Θ)P(y=2∣x;Θ)⋮P(y=K∣x;Θ) =∑c=1Keθ(c)⊤x1 eθ(1)⊤xeθ(2)⊤x⋮eθ(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)
算法步骤
-
构造交叉熵损失:
J(Θ)=−∑i=1N∑k=1K1{y(i)=k}⋅logeθ(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=1∑Nk=1∑K1{y(i)=k}⋅log∑j=1Keθ(j)⊤x(i)eθ(k)⊤x(i)
简写为:
ℓ(y,y^)=−∑j=1Kyjlogy^j \ell(\mathbf{y}, \hat{\mathbf{y}}) = -\sum_{j=1}^{K} y_j \log \hat{y}_j ℓ(y,y^)=−j=1∑Kyjlogy^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=j∣x;Θ) — 预测为第 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^ 的差异
-
计算梯度(对第 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=1∑Nx(i)[1{y(i)=k}−P(y(i)=k∣x(i);Θ)]
梯度方向由"真实类别指示"与"当前预测概率"之差驱动:
若样本确实属于 kkk 类,1−P\mathbf{1} - P1−P 为正 → 参数向该样本方向调整,增大该类得分
若不属于 kkk 类,0−P0 - P0−P 为负 → 参数远离该样本方向
- 梯度下降更新:θ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}^nxi∈Rn,yi∈{−1,+1}y_i \in \{-1, +1\}yi∈{−1,+1};学习率 η>0\eta > 0η>0
- 输出:权值向量 w∈Rn\mathbf{w} \in \mathbb{R}^nw∈Rn
模型:
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(w⊤x),sign(x)={+1,−1,x≥0x<0
w\mathbf{w}w — 权值向量,决定分类超平面的法方向
w⊤x\mathbf{w}^{\top}\mathbf{x}w⊤x — 样本在法方向上的投影得分
sign — 符号函数,将得分映射为 ±1\pm 1±1 二分类别
算法步骤
-
初始化 w0\mathbf{w}_0w0,迭代次数 k=0k = 0k=0
-
遍历训练样本 (xi,yi)(\mathbf{x}_i, y_i)(xi,yi)
-
判断误分类:若 yi⋅(wk⊤xi)≤0y_i \cdot (\mathbf{w}_k^{\top}\mathbf{x}_i) \leq 0yi⋅(wk⊤xi)≤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}w 向 xi\mathbf{x}_ixi 靠近,负例时 w\mathbf{w}w 远离 xi\mathbf{x}_ixi
此规则与 Hebb 规则 Δw=α⋅x⋅y\Delta w = \alpha \cdot x \cdot yΔw=α⋅x⋅y 等价
- 重复步骤 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)=−∥w∥1误分类∑yiw⊤xi
∥w∥\|\mathbf{w}\|∥w∥ — 权值向量的 L2L_2L2 范数,将点到超平面距离归一化
求和仅针对误分类样本(yiw⊤xi<0y_i \mathbf{w}^{\top}\mathbf{x}_i < 0yiw⊤xi<0)
负号使损失为正,最小化损失等价于减少误分类
六、多层感知机(多层前馈网络)
应用范围
解决单层感知机无法处理的非线性可分问题(如 XOR 问题)。三层及以上的网络可逼近任意连续函数(万能逼近定理)。
输入输出
- 输入:样本 x∈Rn\mathbf{x} \in \mathbb{R}^nx∈Rn,经输入层直接传递
- 输出:网络的最终预测 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(l−1),a(l)=f(z(l))
W(l)\mathbf{W}^{(l)}W(l) — 第 lll 层的权值矩阵,元素 wij(l)w_{ij}^{(l)}wij(l) 表示第 l−1l-1l−1 层的第 jjj 个节点到第 lll 层第 iii 个节点的连接权
a(l−1)\mathbf{a}^{(l-1)}a(l−1) — 第 l−1l-1l−1 层的输出(第 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+e−z1
偏置处理:令 a0(l−1)=1a_0^{(l-1)} = 1a0(l−1)=1,wi0(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)
算法步骤
总体流程:
- 初始化所有权值为小随机数,k=0k = 0k=0
- 正向传播:输入 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^
- 计算误差 e=y−y^\mathbf{e} = \mathbf{y} - \hat{\mathbf{y}}e=y−y^
- 若误差满足要求,结束;否则执行反向传播更新权值
- 重复步骤 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(l−1),a(l)=f(z(l)),a(0)=x
逐层计算,前层输出 a(l−1)\mathbf{a}^{(l-1)}a(l−1) 作为后层输入,信息单向流动。
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)=21∥y−y^∥2=21∥e∥2=21i∑ei2
y\mathbf{y}y — 期望输出向量
y^\hat{\mathbf{y}}y^ — 网络实际输出
e=y−y^\mathbf{e} = \mathbf{y} - \hat{\mathbf{y}}e=y−y^ — 误差向量
∥⋅∥2\|\cdot\|^2∥⋅∥2 — L2L_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 ∂ei∂J⋅−1 ∂ai∂ei⋅ai(1−ai) ∂zi∂ai⋅aj(1) ∂wij(2)∂zi=−ei⋅ai(1−ai)⋅aj(1)
ei=yi−aie_i = y_i - a_iei=yi−ai — 输出层第 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(1−ai)=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(1−ai)⋅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=∂e∂J⊤∂ai(1)∂e∂wij(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(1−am)⋅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=1∑mwji(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)(1−ai(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 L1≤l≤L):
| 步骤 | 公式 | 说明 |
|---|---|---|
| ① 输出层 δ\deltaδ | δi(L)=ai(1−ai)⋅ei\delta_i^{(L)} = a_i(1 - a_i) \cdot e_iδi(L)=ai(1−ai)⋅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δ 经权值加权求和后乘以本层激活导数,lll 从 L−1L-1L−1 逐层递减至 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(l−1) | α\alphaα 为学习率;aj(l−1)a_j^{(l-1)}aj(l−1) 为前层输出(l=1l=1l=1 时 aj(0)=xja_j^{(0)} = x_jaj(0)=xj) |
| ④ 递推 | l←l−1l \leftarrow l-1l←l−1,重复 ②–③ | 直至 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=1∑nwjxj−θ)=f(w⊤x)
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−βx1−e−β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,x≥0x<0 | {−1,+1}\{-1, +1\}{−1,+1} | 硬判决,不可微,构成阈值逻辑单元 |
Hebb 规则
权值调整量正比于输入与输出的乘积:
Δw=α⋅x⋅y \Delta w = \alpha \cdot x \cdot y Δw=α⋅x⋅y
Δ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}θ=(X⊤X)−1X⊤y |
| 梯度下降更新 | θ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+e−z1 |
| Sigmoid 导数 | σ′(z)=σ(z)(1−σ(z))\sigma'(z) = \sigma(z)(1 - \sigma(z))σ′(z)=σ(z)(1−σ(z)) |
| 二分类交叉熵 | J=−∑[ylogy^+(1−y)log(1−y^)]J = -\sum [y \log \hat{y} + (1-y) \log(1-\hat{y})]J=−∑[ylogy^+(1−y)log(1−y^)] |
| 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=1Kyjlogy^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=α⋅x⋅y |
| 前向传播 | 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(l−1)) |
| BP 输出层 δ\deltaδ | δi(L)=ai(1−ai)⋅ei\delta_i^{(L)} = a_i(1-a_i) \cdot e_iδi(L)=ai(1−ai)⋅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(l−1) |
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)