BP神经网络前馈计算手算实战:从数学原理到分步推导

1次阅读
没有评论

共计 1687 个字符,预计需要花费 5 分钟才能阅读完成。

image.webp

前言

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

BP 神经网络前馈计算手算实战:从数学原理到分步推导

网络结构与初始参数

我们以最简单的三层网络为例:
– 输入层: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$

前馈计算分步详解

第一步:输入层→隐藏层计算

这是最易出错的部分,关键在于矩阵乘法的维度匹配:

  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}
    $$

  2. 应用 Sigmoid 激活:
    $$ a^{(1)} = \sigma(z^{(1)}) = \frac{1}{1+e^{-z^{(1)}}} $$
    逐元素计算:

  3. $a_1^{(1)} = \frac{1}{1+e^{-0.1}} ≈ 0.525$
  4. $a_2^{(1)} = \frac{1}{1+e^{-0.55}} ≈ 0.634$
  5. $a_3^{(1)} = \frac{1}{1+e^{-0.4}} ≈ 0.599$

第二步:隐藏层→输出层计算

  1. 计算输出层加权和 $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}
    $$

  2. 最终输出:
    $$ y = \sigma(z^{(2)}) = \frac{1}{1+e^{-0.4515}} ≈ 0.611 $$

计算验证技巧

  1. 维度检查:每次矩阵乘法前确认维度匹配
  2. $X_{1×2} \cdot W^{(1)}_{2×3}$ → 结果应为 1×3 向量
  3. $a^{(1)}{1×3} \cdot W^{(2)}$ → 结果应为标量

  4. 数值范围验证

  5. Sigmoid 输出应在 (0,1) 区间
  6. 若出现极大 / 极小值,检查是否漏激活函数

  7. 反向验算

  8. 从输出层结果倒推,验证中间值合理性

常见错误排查

  1. 权重矩阵方向混淆
  2. 注意 $W^{(1)}$ 的行对应前一层神经元,列对应后一层

  3. 偏置项遗漏

  4. 容易忘记加偏置,特别是隐藏层有多个神经元时

  5. 激活函数应用错误

  6. 对加权和 $z$ 而非激活值 $a$ 求导时易混淆

思考题

当前输出 y≈0.611,若希望输出接近目标值 0.8,该如何调整权重?提示:
1. 观察输出层权重 $W^{(2)}$ 对最终结果的影响方向
2. 考虑隐藏层哪个神经元的激活值对提升输出最有效
3. 注意 Sigmoid 函数的饱和区特性

结语

通过这次手算练习,我深刻理解了神经网络前向传播的数学本质。建议读者也找张草稿纸跟着算一遍,遇到维度问题就画出来核对。下一步我准备用同样的网络结构练习反向传播计算,到时候再和大家分享心得!

正文完
 0
评论(没有评论)