两层神经网络正向 + 反向推导
一、网络结构 输入 x 第一层全连接 W1 b1 → a1 ReLU 激活 → z1 第二层全连接 W2 b2 → a2 Softmax 输出 y 真实标签 t 损失 L
二、正向传播 1 a1 = x・W1 + b1
2 z1 = ReLU (a1) a1>0 时 z1=a1 a1≤0 时 z1=0
3 a2 = z1 · W2 + b2
4 y = softmax(a2)
5 L = -1/N · ΣΣ t · lny
三、反向传播 从损失往回求梯度 1 末尾 SoftmaxWithLoss 层 da2 = ∂L/∂a2 = y - t
2 第二层 Affine 层 ∂L/∂W2 = z1 转置・da2 ∂L/∂b2 = 按样本维度求和 da2 dz1 = da2・W2 转置
3 ReLU 激活层 a1>0 导数为 1 a1≤0 导数为 0 da1 = dz1 逐元素乘 ReLU 局部导数
4 第一层 Affine 层 ∂L/∂W1 = x 转置・da1 ∂L/∂b1 = 按样本维度求和 da1
四、参数梯度下降更新 学习率 η W2 = W2 - η・∂L/∂W2 b2 = b2 - η・∂L/∂b2 W1 = W1 - η・∂L/∂W1 b1 = b1 - η・∂L/∂b1
五、传播流程简写 L → da2 → W2 b2 梯度、dz1 dz1 → da1 → W1 b1 梯度
反向传播的作用
- 正向传播只能算出网络最终的损失误差,无法知道每个权重、偏置需要修改多少。
- 反向传播依靠链式求导,从损失函数倒着逐层计算: 每一层权重 W、偏置 b 对总损失 L 的偏导数(梯度)。
- 拿到梯度后配合梯度下降算法,按照学习率更新所有参数,减小预测值与真实标签之间的误差。
- 让神经网络可以迭代自主学习,不断修正参数,提升模型识别、分类的准确率。
- 只执行一次反向遍历就能求出全部参数梯度,计算效率高,是训练深度神经网络的核心方法。