共计 1687 个字符,预计需要花费 5 分钟才能阅读完成。
前言
最近在自学神经网络时,发现很多教程都直接跳过了手算过程。为了彻底弄懂 BP 神经网络的前馈计算原理,我决定用一个具体例题来完整推导 2 -3- 1 结构的计算流程。以下是详细记录,特别适合像我这样的初学者跟着一步步验算。

网络结构与初始参数
我们以最简单的三层网络为例:
– 输入层:2 个神经元(x₁, x₂)
– 隐藏层:3 个神经元(h₁, h₂, h₃)
– 输出层:1 个神经元(y)
给定具体参数值:
1. 输入向量:$X = [1.0, 0.5]$
2. 输入层→隐藏层权重矩阵:
$$ W^{(1)} = \begin{bmatrix} 0.1 & 0.3 & -0.2 \ -0.4 & 0.7 & 0.6 \end{bmatrix} $$
3. 隐藏层偏置:$b^{(1)} = [0.2, -0.1, 0.3]$
4. 隐藏层→输出层权重:$W^{(2)} = [0.5, -0.3, 0.8]$
5. 输出层偏置:$b^{(2)} = -0.1$
前馈计算分步详解
第一步:输入层→隐藏层计算
这是最易出错的部分,关键在于矩阵乘法的维度匹配:
-
计算加权和 $z^{(1)}$:
$$ z^{(1)} = X \cdot W^{(1)} + b^{(1)} $$
具体展开:
$$
\begin{aligned}
z^{(1)} &= [1.0, 0.5] \cdot \begin{bmatrix} 0.1 & 0.3 & -0.2 \ -0.4 & 0.7 & 0.6 \end{bmatrix} + [0.2, -0.1, 0.3] \
&= [1.0×0.1+0.5×(-0.4), 1.0×0.3+0.5×0.7, 1.0×(-0.2)+0.5×0.6] + [0.2, -0.1, 0.3] \
&= [-0.1, 0.65, 0.1] + [0.2, -0.1, 0.3] \
&= [0.1, 0.55, 0.4]
\end{aligned}
$$ -
应用 Sigmoid 激活:
$$ a^{(1)} = \sigma(z^{(1)}) = \frac{1}{1+e^{-z^{(1)}}} $$
逐元素计算: - $a_1^{(1)} = \frac{1}{1+e^{-0.1}} ≈ 0.525$
- $a_2^{(1)} = \frac{1}{1+e^{-0.55}} ≈ 0.634$
- $a_3^{(1)} = \frac{1}{1+e^{-0.4}} ≈ 0.599$
第二步:隐藏层→输出层计算
-
计算输出层加权和 $z^{(2)}$:
$$ z^{(2)} = a^{(1)} \cdot W^{(2)} + b^{(2)} $$
具体展开:
$$
\begin{aligned}
z^{(2)} &= [0.525, 0.634, 0.599] \cdot \begin{bmatrix} 0.5 \ -0.3 \ 0.8 \end{bmatrix} + (-0.1) \
&= 0.525×0.5 + 0.634×(-0.3) + 0.599×0.8 – 0.1 \
&= 0.2625 – 0.1902 + 0.4792 – 0.1 ≈ 0.4515
\end{aligned}
$$ -
最终输出:
$$ y = \sigma(z^{(2)}) = \frac{1}{1+e^{-0.4515}} ≈ 0.611 $$
计算验证技巧
- 维度检查:每次矩阵乘法前确认维度匹配
- $X_{1×2} \cdot W^{(1)}_{2×3}$ → 结果应为 1×3 向量
-
$a^{(1)}{1×3} \cdot W^{(2)}$ → 结果应为标量
-
数值范围验证:
- Sigmoid 输出应在 (0,1) 区间
-
若出现极大 / 极小值,检查是否漏激活函数
-
反向验算:
- 从输出层结果倒推,验证中间值合理性
常见错误排查
- 权重矩阵方向混淆:
-
注意 $W^{(1)}$ 的行对应前一层神经元,列对应后一层
-
偏置项遗漏:
-
容易忘记加偏置,特别是隐藏层有多个神经元时
-
激活函数应用错误:
- 对加权和 $z$ 而非激活值 $a$ 求导时易混淆
思考题
当前输出 y≈0.611,若希望输出接近目标值 0.8,该如何调整权重?提示:
1. 观察输出层权重 $W^{(2)}$ 对最终结果的影响方向
2. 考虑隐藏层哪个神经元的激活值对提升输出最有效
3. 注意 Sigmoid 函数的饱和区特性
结语
通过这次手算练习,我深刻理解了神经网络前向传播的数学本质。建议读者也找张草稿纸跟着算一遍,遇到维度问题就画出来核对。下一步我准备用同样的网络结构练习反向传播计算,到时候再和大家分享心得!
