TheZTHEZ / UNDERSTANDING FIRST
神经网络进阶15 分钟阅读

神经网络线性层:矩阵、偏置与非线性

从矩阵推导线性层,理解偏置、ReLU 与梯度维度。

同一个公式的三种视角

数学研究线性变换,代码执行矩阵乘法,网络线性层处理批量样本:

Z=XW+b,X∈RN×d,W∈Rd×h,b∈Rh.Z=XW+b,\quad X\in\mathbb R^{N\times d},\quad W\in\mathbb R^{d\times h},\quad b\in\mathbb R^h.

每行是样本,偏置广播到每行。含偏置严格说是仿射变换,“线性层”是深度学习惯用名称。

一个输出单元的计算

Zij=∑k=1dXikWkj+bjZ_{ij}=\sum_{k=1}^dX_{ik}W_{kj}+b_j。每个输出单元学习一种输入特征的加权组合。

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)\max(0,z),逐元素作用。零点不可导,框架通常采用约定的次梯度值。

为何需要非线性

两个仿射层中间没有激活时,

(XW1+b1)W2+b2=X(W1W2)+(b1W2+b2).(XW_1+b_1)W_2+b_2=X(W_1W_2)+(b_1W_2+b_2).

它们仍可合并为一个仿射层,叠很多层也不会获得一般非线性表达能力。非线性激活提供更多表达可能,但不能保证学得好;数据、架构与优化仍重要。

梯度形状检查

上游梯度 G=∂L/∂Z∈RN×hG=\partial L/\partial Z\in\mathbb R^{N\times h},则

∂L∂W=XTG,∂L∂X=GWT,∂L∂bj=∑iGij.\frac{\partial L}{\partial W}=X^TG,\quad \frac{\partial L}{\partial X}=GW^T,\quad \frac{\partial L}{\partial b_j}=\sum_iG_{ij}.

权重梯度为 (d×N)(N×h)=d×h(d\times N)(N\times h)=d\times h,与权重一致。若损失取平均,缩放应已包含在上游梯度中,避免重复除以批量数。

练习与框架约定

输入 16×816\times8、输出 16×316\times3 时,参数共 8⋅3+3=278\cdot3+3=27 个。某些框架把权重存为 h×dh\times d,前向用转置,阅读文档时先检查维度。

NumPy 矩阵计算 → 线性层 → 注意力,是同一知识在不同场景中的展开。

这一节,你理解到哪里了?

这是你的自我反馈,与练习估计、课程进度分别记录。

本文为TheZ原创教学内容。正文采用 CC BY-NC-SA 4.0,代码采用 MIT 许可。请尊重署名与授权范围。