多层神经网络本质上是仿射变换与非线性激活函数的堆叠。引入非线性激活,使得网络能够拟合单个逻辑回归单元无法表达的复杂决策边界。
单隐藏层模型
给定输入向量 x,隐藏层权重 W(1) 与偏置 b(1),输出层权重 W(2) 与偏置 b(2),前向传播过程如下:
z(1)a(1)z(2)y^=W(1)x+b(1),=ϕ(z(1)),=W(2)a(1)+b(2),=σ(z(2)).
其中 ϕ 可以是 ReLU、GELU、tanh 等常见的隐藏层激活函数。在二分类任务中,Sigmoid 输出 y^ 被解释为预测概率,通常配合二元交叉熵(Binary Cross-Entropy)损失函数进行训练:
L=−[ylogy^+(1−y)log(1−y^)].
反向传播
反向传播的核心是利用链式法则,从损失函数向输入方向逐层计算梯度。当输出层使用 Sigmoid 且损失函数为二元交叉熵时,输出层预激活值 z(2) 的梯度有一个非常简洁的形式:
δ(2)=∂z(2)∂L=y^−y.
基于此,输出层的权重与偏置梯度为:
∂W(2)∂L=δ(2)(a(1))T,∂b(2)∂L=δ(2).
将误差信号 δ(2) 通过隐藏层激活函数反向传播,得到隐藏层的误差信号:
δ(1)=(W(2))Tδ(2)⊙ϕ′(z(1)),
进而得到隐藏层的权重与偏置梯度:
∂W(1)∂L=δ(1)xT,∂b(1)∂L=δ(1).
符号 ⊙ 表示逐元素乘法(Elementwise Multiplication)。这里强调使用矩阵形式书写,是为了明确张量的维度形状,避免使用标量下标时产生的歧义。
参数更新
采用学习率为 α 的标准梯度下降法,每个参数 θ 的更新规则为:
θ←θ−α∂θ∂L.
实际工程中,训练通常基于 Mini-batch 数据,并配合 Adam 等自适应优化器。尽管优化策略有所变化,但梯度的计算逻辑始终源于同一套前向计算图与链式法则。
本文未涵盖的内容
这个小网络仅用于演示核心计算流程,不足以指导生产级架构的选择。权重初始化、归一化(Normalization)、正则化、优化器状态管理、多分类输出、数值稳定性以及数据质量,都会显著影响最终训练效果。关于更广泛的架构细节,请参阅 多层感知机笔记。
张量形状与完整反向计算
输入有 d 个特征、隐藏层有 h 个单元时,采用列向量约定:x∈Rd,W(1)∈Rh×d,b(1),a(1),δ(1)∈Rh,W(2)∈R1×h;b(2),z(2),δ(2) 为标量。权重梯度应与对应矩阵同形,因此外积 δ(1)xT 的形状是 h×d。
取最小数值例子:d=h=1、x=2、y=1,使用 ReLU,即 ϕ(t)=max(0,t)。设 W(1)=0.5、b(1)=0、W(2)=1、b(2)=0。前向计算得到 z(1)=a(1)=z(2)=1、y^≈0.731059、L≈0.313262。隐藏层输入为正,故 ϕ′=1,于是
δ(2)=δ(1)≈−0.268941,(∂W(1)∂L,∂b(1)∂L,∂W(2)∂L,∂b(2)∂L)≈(−0.537883,−0.268941,−0.268941,−0.268941).
用 α=0.1,基于同一次前向传播同时更新四个参数,按上述顺序约得到 (0.553788,0.026894,1.026894,0.026894)。下一轮 logit 约为 1.191875,损失约为 0.265169。若先更新输出层权重再计算 δ(1),就混用了两组参数状态,不再是这里的梯度更新。
ReLU 输入为零时不存在普通导数,实现中需指定约定,常见取值是零。在远离这类折点的小例子上,可用 [L(θ+εej)−L(θ−εej)]/(2ε) 检查解析梯度。它检验的是求导是否正确,不能证明训练会找到全局最优解。
优化循环能说明什么
反向传播负责计算导数,优化器负责选择参数如何变化。批次损失使用样本梯度的平均值。小批量梯度会波动,因此每一步未必降低完整训练集上的损失。与固定特征的逻辑回归不同,联合学习隐藏层和输出层权重,通常会使目标非凸。不同初始化可能进入不同的驻点区域;更新很小也可能来自学习率过小、激活饱和或 ReLU 不活跃。
训练时检查数值是否有限,设置迭代预算,观察梯度和损失,并用留出验证集决定是否提前停止。验证集早停用于限制过拟合,不是最优性证明。二元交叉熵应通过稳定的对数损失公式直接从 logit 计算。优化与泛化之间的区别详见《深度学习》第 8 章。