用 Excel 手动实现 MLP 前向传播 + 反向传播(完整版)
一、为什么还要用 Excel 学神经网络?
很多人觉得神经网络必须用 Python + PyTorch 才能跑。但当你亲手在单元格里写出每一行梯度公式时,才能真正理解“链式法则”是如何从输出流回输入,理解权重为什么更新、学习率怎么影响每一步。
Excel 的优势是完全透明:所有中间值、梯度、更新量一览无余,没有任何黑盒。调整一个输入,整个表格立刻重新计算,非常适合初学者验证每一步的数值。
二、网络结构与公式推导
我们实现一个2‑输入 → 2‑隐藏神经元 → 1‑输出的 MLP,结构如下:
x1 ---\ \ --> z1 --> a1 = ReLU(z1) ---\ x2 ---/ \ --> y_pred = a1*v1 + a2*v2 x1 ---\ / \ / --> z2 --> a2 = ReLU(z2) ---/ x2 ---/参数:
隐藏层权重:
w11(x1→神经元1),w21(x2→神经元1),w12(x1→神经元2),w22(x2→神经元2)隐藏层偏置:
b1,b2输出层权重:
v1,v2损失函数:
L = ½ (y_pred – y_true)²激活函数:ReLU,导数
ReLU'(z) = 1 if z>0 else 0
前向传播:
z1 = x1*w11 + x2*w21 + b1 a1 = max(0, z1) z2 = x1*w12 + x2*w22 + b2 a2 = max(0, z2) y_pred = a1*v1 + a2*v2反向传播(核心梯度):
∂L/∂y_pred = y_pred - y_true ∂L/∂v1 = ∂L/∂y_pred * a1 ∂L/∂v2 = ∂L/∂y_pred * a2 ∂L/∂a1 = ∂L/∂y_pred * v1 ∂L/∂a2 = ∂L/∂y_pred * v2 ∂L/∂z1 = ∂L/∂a1 * ReLU'(z1) ∂L/∂z2 = ∂L/∂a2 * ReLU'(z2) ∂L/∂w11 = ∂L/∂z1 * x1 ∂L/∂w21 = ∂L/∂z1 * x2 ∂L/∂b1 = ∂L/∂z1 ∂L/∂w12 = ∂L/∂z2 * x1 ∂L/∂w22 = ∂L/∂z2 * x2 ∂L/∂b2 = ∂L/∂z2参数更新(学习率 η = 0.1):
新参数 = 旧参数 - η * 梯度
三、Excel 文件结构(5 张工作表)
你下载的MLP完整版_前向+反向传播.xlsx包含以下工作表:
📄 Parameters(参数初始值)
| 参数 | 值 |
|---|---|
| x1, x2 | 0.5, 0.8 |
| w11, w21, w12, w22 | 0.2, 0.3, 0.4, 0.7 |
| v1, v2 | 0.6, 0.9 |
| b1, b2 | 0.1, 0.1 |
| y_true | 1 |
| lr | 0.1 |
📈 Forward(前向传播)
公式完全引用 Parameters,自动计算:
z1,a1z2,a2y_pred
当前初始值下:y_pred = 0.44*0.6 + 0.86*0.9 = 1.038
📉 Loss(损失)
Loss = 0.5*(1.038-1)^2 = 0.000722
🔁 Backward(完整梯度)
按上述链式法则计算所有 13 个梯度。例如:
dL/dv1 = 0.038 * 0.44 = 0.01672dL/dw11 = dL/dz1 * x1 = (dL/da1 * 1) * 0.5 = (0.038*0.6)*0.5 = 0.0114等等。
🔄 Update(参数更新)
使用梯度下降更新所有权重和偏置,例如:
v1_new = 0.6 - 0.1*0.01672 = 0.59833w11_new = 0.2 - 0.1*0.0114 = 0.19886
一次迭代后,损失从 0.000722 下降(实际需多次迭代)。你只需将 Update 表中的新值复制回 Parameters 表,Excel 就会自动重算下一轮。
四、如何用这个文件进行实验?
手动验证一次前向和反向:对照公式,用计算器验算 Excel 的数值。
改变学习率:修改 Parameters!B12(例如改成 0.5),观察梯度更新的幅度。
修改激活函数:在 Forward!B2 和 Forward!B4 中将
MAX(0, …)改为1/(1+EXP(-…))(Sigmoid),并相应修改 Backward 中 ReLU 导数部分(改为a*(1-a))。多轮训练:复制 Update 表中的新值,用“选择性粘贴 – 数值”覆盖 Parameters 对应单元格,反复操作,观察 Loss 收敛。
增加样本:可扩展为多行,用 SUM 或数组公式实现批量梯度下降。
五、完整 Excel 文件获取方式
百度网盘:通过网盘分享的文件:MLP完整版_前向+反向传播.xlsx
链接: https://pan.baidu.com/s/17yzJgfgo_sYbeeC2E_A98w?pwd=gt6r 提取码: gt6r
六、总结
这个 Excel 文件完整展示了一个 MLP 从输入到损失、再到反向传播更新参数的全部细节。对于学生、教师、以及想彻底搞懂反向传播的工程师,它都是绝佳的动手工具。
试一试:修改初始权重,观察梯度变化;或者把激活函数换成 Leaky ReLU,看看导数如何修改。一旦你亲手在单元格里敲出dL/dw11 = dL/dz1 * x1,神经网络就不再是魔法,而只是微积分和链式法则的美丽应用。
