用 Excel 展示 MLP(多层感知机)的计算过程
作者:孙明良
主题:利用 Excel 拆解 MLP 的前向传播、误差计算、反向传播与参数更新
一、为什么要用 Excel 展示 MLP?
MLP(Multilayer Perceptron,多层感知机)是神经网络中最基础的模型之一。很多同学在学习 MLP 时,容易只记住公式,却不清楚每一个权重、偏置和梯度到底是怎样一步步算出来的。因此,本次作业采用 Excel 文件展示一个简单 MLP 的完整计算过程。
Excel 的优点是所有中间变量都可以被直接看见,而且单元格之间可以通过公式联动。当输入值、目标值、学习率或权重发生变化时,前向传播结果、损失值、梯度和更新后的参数都会自动变化,这样可以更直观地理解神经网络的计算逻辑。
二、网络结构与初始参数
本示例采用一个简单的1-6-1 结构 MLP:输入层有 1 个神经元,隐藏层有 6 个神经元,输出层有 1 个神经元。为了与原始示例中的数值保持一致,隐藏层默认采用线性激活函数,即:
f(z)=z
初始参数如下:
| 项目 | 取值 |
|---|---|
| 学习率 η | 0.01 |
| 输入值 x | 5 |
| 真实目标 t | 208 |
| 隐藏层权重 W | [10, 20, 30, 20, 10, 20] |
| 隐藏层偏置 B | [10, 10, 10, 10, 10, 10] |
| 输出层权重 V | [10, 20, 10, 10, 30, 20] |
| 输出层偏置 b_out | 20 |
三、前向传播计算过程
前向传播的任务是根据当前权重和偏置,由输入值计算出模型预测值。
对于第 j 个隐藏层神经元,首先计算加权和:
z_j = x × W_j + B_j
由于本例默认采用线性激活函数,所以隐藏层输出为:
h_j = f(z_j) = z_j
输出层预测值为:
ŷ = Σ(h_j × V_j) + b_out
以第 1 个隐藏神经元为例:
z_1 = 5 × 10 + 10 = 60
h_1 = 60
它对输出层的贡献为:
h_1 × V_1 = 60 × 10 = 600
6 个隐藏神经元的贡献求和为 9500,再加上输出偏置 20,得到最终预测值:
ŷ = 9500 + 20 = 9520
四、误差与损失函数
模型预测值为 9520,而真实目标值为 208,因此预测误差为:
e = ŷ - t = 9520 - 208 = 9312
本示例采用平方误差作为损失函数:
L = (ŷ - t)^2
代入数值得到:
L = 9312^2 = 86713344
平方误差越大,说明模型当前预测结果与真实目标之间的差距越大。由于本例初始权重较大,输出预测值远高于目标值,所以损失值也非常大。
五、反向传播计算过程
反向传播的核心思想是利用链式法则,计算损失函数对每一个参数的梯度,然后根据梯度方向调整参数。
首先计算损失函数对输出值的导数:
∂L/∂ŷ = 2(ŷ - t) = 2 × 9312 = 18624
1. 输出层权重梯度
输出层第 j 个权重的梯度为:
∂L/∂V_j = h_j × ∂L/∂ŷ
这表示:某个隐藏神经元输出越大,它对应的输出权重对最终损失的影响越大。
2. 输出层偏置梯度
输出偏置直接作用于最终预测值,因此:
∂L/∂b_out = ∂L/∂ŷ = 18624
3. 隐藏层梯度
误差从输出层继续传回隐藏层。第 j 个隐藏神经元加权和的梯度为:
∂L/∂z_j = ∂L/∂ŷ × V_j × f'(z_j)
由于线性激活函数的导数为 1,所以:
∂L/∂z_j = ∂L/∂ŷ × V_j
4. 输入层到隐藏层权重梯度
第 j 个隐藏层输入权重的梯度为:
∂L/∂W_j = x × ∂L/∂z_j
隐藏层偏置的梯度为:
∂L/∂B_j = ∂L/∂z_j
Excel 的 Backprop 工作表已经把以上公式逐项拆开,能够看到每个神经元对应的梯度值。
六、参数更新过程
完成梯度计算后,使用梯度下降法更新参数:
θ_new = θ_old - η × ∂L/∂θ
其中,θ 可以表示任意一个权重或偏置,η 为学习率。本例中学习率为 0.01。
例如,输出偏置的更新为:
b_out_new = b_out_old - η × ∂L/∂b_out
b_out_new = 20 - 0.01 × 18624 = -166.24
同理,隐藏层权重、隐藏层偏置和输出层权重都可以按照相同规则进行更新。Excel 的 Update 工作表展示了一次梯度下降后的全部新参数。
需要注意的是,本示例中初始误差较大,如果学习率设置为 0.01,部分参数更新幅度会非常大。在真实神经网络训练中,通常需要进行输入归一化、选择合适的学习率,并通过多轮迭代逐步优化模型。
七、Excel 文件结构说明
配套 Excel 文件主要包括以下工作表:
| 工作表 | 内容说明 |
|---|---|
| Blog | 作业说明和阅读顺序 |
| Input | 输入值、目标值、学习率、权重和偏置 |
| Forward | 隐藏层加权和、隐藏层输出、输出预测、误差和损失 |
| Backprop | 输出层梯度、隐藏层梯度和输入权重梯度 |
| Update | 一次梯度下降后的新参数 |
| Original | 保留上传的原始示例数据,便于对照 |
八、总结
通过这个 Excel 示例,可以清楚地看到 MLP 的计算并不是一个“黑箱”过程。前向传播负责根据输入和参数得到预测值,损失函数衡量预测值与真实目标的差距,反向传播利用链式法则计算梯度,最后梯度下降根据梯度更新权重和偏置。
把这些过程放到 Excel 中,可以让每一步计算都有对应的单元格和公式,便于检查、修改和学习。对于刚接触神经网络的学习者来说,这种方式能够帮助理解 MLP 从输入到输出、再从误差回传到参数更新的完整过程。