用 Excel 手算一个 1-6-1 MLP:前向传播、损失、反向传播与参数更新

计算示例:

本文用一个单输入、6 个隐藏神经元、单输出的多层感知机(MLP)作为例子,展示如何用 Excel 公式完整复现一次训练迭代。配套 Excel 文件中的"MLP计算过程"工作表已经把前向传播、损失计算、反向传播梯度和参数更新全部写成可联动公式。

1. 模型结构与初始参数

本例的网络结构为 1-6-1 :输入层 1 个神经元,隐藏层 6 个神经元,输出层 1 个神经元。输入值为 x=5,目标值为 y=208,学习率为 η=0.01。激活函数使用 Leaky ReLU:

f(t)=IF(t>0,t,0.05t)

j 隐藏层权重 W_j 隐藏层偏置 b_j 输出层权重 v_j
1 10 10 10
2 20 10 20
3 30 10 10
4 20 10 10
5 10 10 30
6 20 10 20

2. 前向传播

隐藏层第 j 个神经元先计算加权和:

z_j = x·W_j + b_j

然后经过激活函数得到隐藏层输出:

h_j = f(z_j)

本例中隐藏层输出为:

h = [60, 110, 160, 110, 60, 110]

输出层加权和为:

s = Σ(v_j·h_j) + c = 9520

由于 s>0,最终输出为 ŷ=f(s)=9520

3. 损失函数

单样本平方误差为:

L=(ŷ-y)^2=(9520-208)^2=86,713,344

4. 反向传播

先计算输出层梯度:

∂L/∂s = 2(ŷ-y)·f'(s) = 18,624

然后逐层向前传递梯度。例如:

  • ∂L/∂v_j = ∂L/∂s · h_j
  • ∂L/∂c = ∂L/∂s
  • ∂L/∂h_j = ∂L/∂s · v_j
  • ∂L/∂z_j = ∂L/∂h_j · f'(z_j)
  • ∂L/∂W_j = ∂L/∂z_j · x
  • ∂L/∂b_j = ∂L/∂z_j

5. 参数更新

所有参数都使用梯度下降更新:

θ_new = θ - η · ∂L/∂θ

例如第 1 个隐藏层权重的更新为:

W_1_new = 10 - 0.01 × 931200 = -9302

输出层偏置的更新为:

c_new = 20 - 0.01 × 18624 = -166.24

6. Excel 中的核心公式

步骤 Excel 公式 作用
隐藏层加权和 =B18*C18+D18 计算 z_j
激活函数 =IF(E18>0,E18,$B$7*E18) 计算 h_j
输出层加权和 =SUMPRODUCT(H18:H23,F18:F23)+B8 计算 s
损失函数 =(B10-B6)^2 计算平方误差
参数更新 =C18-$B$4*K18 更新隐藏层权重

提示:本例主要用于展示 MLP 的计算链路。学习率较大时,一次更新可能让参数变化非常明显;实际训练中通常需要调整学习率、归一化数据,并进行多轮迭代。

7. 总结

通过这个 Excel 示例,可以清楚看到 MLP 的四个关键步骤:前向传播得到预测值,损失函数衡量预测误差,反向传播计算每个参数的梯度,最后用梯度下降更新参数。Excel 的优势在于每个单元格都可以显示公式,非常适合用来学习神经网络的底层计算过程。

相关推荐
程序员敲代码吗21 小时前
Go语言中Channel的实现与内存通信机制详解
excel
时空自由民.1 天前
vim入门配置教程
编辑器·vim·excel
_院长大人_1 天前
Java Excel导出:如何实现自定义表头与字段顺序的完全控制
java·开发语言·后端·excel
Cloud_Shy6181 天前
Python 数据分析基础入门:《Excel Python:飞速搞定数据分析与处理》学习笔记系列(第十一章 Python 包跟踪器 下篇)
前端·后端·python·数据分析·excel
asdzx671 天前
使用 C# 打印 Excel 文档(详细教程)
c#·excel
vennnnnnnnnnnnnn1 天前
Excel 导入原文保留与内联排名配置问题复盘
前端·数据库·excel
anlog1 天前
Excel返回或设置边框、字体或内部颜色
excel·背景色
工具怪1 天前
Excel 如何加水印?4种常见使用场景与操作步骤
excel
写了20年代码的老程序员2 天前
Excel 导入导出为什么总是把后端逼成字段搬运工
java·excel