同一个公式的三种视角
数学研究线性变换,代码执行矩阵乘法,网络线性层处理批量样本:
Z=XW+b,X∈RN×d,W∈Rd×h,b∈Rh.
每行是样本,偏置广播到每行。含偏置严格说是仿射变换,“线性层”是深度学习惯用名称。
一个输出单元的计算
Zij=∑k=1dXikWkj+bj。每个输出单元学习一种输入特征的加权组合。
import numpy as np
X = np.array([[1., -2.], [3., 1.]])
W = np.array([[1., -1., 0.5], [2., 1., -0.5]])
b = np.array([0.1, 0.2, 0.3])
Z = X @ W + b
H = np.maximum(Z, 0)
assert Z.shape == (2, 3)
assert np.allclose(Z[0], [-2.9, -2.8, 1.8])
assert np.allclose(H[0], [0, 0, 1.8])
ReLU 为 max(0,z),逐元素作用。零点不可导,框架通常采用约定的次梯度值。
为何需要非线性
两个仿射层中间没有激活时,
(XW1+b1)W2+b2=X(W1W2)+(b1W2+b2).
它们仍可合并为一个仿射层,叠很多层也不会获得一般非线性表达能力。非线性激活提供更多表达可能,但不能保证学得好;数据、架构与优化仍重要。
梯度形状检查
上游梯度 G=∂L/∂Z∈RN×h,则
∂W∂L=XTG,∂X∂L=GWT,∂bj∂L=i∑Gij.
权重梯度为 (d×N)(N×h)=d×h,与权重一致。若损失取平均,缩放应已包含在上游梯度中,避免重复除以批量数。
练习与框架约定
输入 16×8、输出 16×3 时,参数共 8⋅3+3=27 个。某些框架把权重存为 h×d,前向用转置,阅读文档时先检查维度。
NumPy 矩阵计算 → 线性层 → 注意力,是同一知识在不同场景中的展开。
这一节,你理解到哪里了?
这是你的自我反馈,与练习估计、课程进度分别记录。
本文为TheZ原创教学内容。正文采用 CC BY-NC-SA 4.0,代码采用 MIT 许可。请尊重署名与授权范围。