基于 Excel 展示 MLP 神经网络的计算过程
刘君老师 高级算法与程序设计作业
学生:孙欣怡
一、实验目的
本次算法作业要求通过 Excel 文件展示多层感知机 MLP 的计算过程,并以博客形式说明具体的计算步骤。本文以一个简单的 MLP 网络为例,展示从输入层到隐藏层、输出层的前向传播过程,并进一步说明损失函数计算、反向传播梯度计算以及参数更新过程。
通过本实验,可以更加直观地理解 MLP 神经网络中权重、偏置、激活函数、损失函数和梯度下降之间的关系。
二、MLP 模型结构
本文采用一个简单的三层 MLP 网络结构,包括:
- 输入层:2 个神经元
- 隐藏层:2 个神经元
- 输出层:1 个神经元
网络结构可以表示为:
输入层 x1, x2 ↓ 隐藏层 h1, h2 ↓ 输出层 y_pred其中,隐藏层和输出层都使用 Sigmoid 激活函数。
Sigmoid 函数公式如下:
sigmoid(x) = 1 / (1 + e^(-x))该函数可以将输入值映射到 0 到 1 之间,常用于二分类任务或简单神经网络示例中。
三、初始化参数
在 Excel 文件中,首先设置输入数据、目标输出、学习率以及各层权重和偏置。
假设输入为:
x1 = 0.6 x2 = 0.8目标输出为:
y = 1学习率为:
η = 0.5初始权重和偏置示例如下:
w11 = 0.1 w12 = 0.2 w21 = 0.3 w22 = 0.4 b1 = 0.1 b2 = 0.1 v1 = 0.2 v2 = 0.3 b3 = 0.1其中:
w11、w12、w21、w22表示输入层到隐藏层的权重b1、b2表示隐藏层神经元的偏置v1、v2表示隐藏层到输出层的权重b3表示输出层偏置
四、前向传播计算过程
1. 隐藏层加权求和
隐藏层第一个神经元的输入为:
z1 = x1 * w11 + x2 * w21 + b1隐藏层第二个神经元的输入为:
z2 = x1 * w12 + x2 * w22 + b2代入数据后,Excel 会根据公式自动计算出隐藏层两个神经元的加权和。
2. 隐藏层激活输出
对隐藏层加权和使用 Sigmoid 激活函数:
h1 = sigmoid(z1) h2 = sigmoid(z2)也就是:
h1 = 1 / (1 + EXP(-z1)) h2 = 1 / (1 + EXP(-z2))在 Excel 中,可以使用如下公式:
=1/(1+EXP(-单元格))这样就可以得到隐藏层两个神经元的输出值。
3. 输出层加权求和
输出层输入为:
z3 = h1 * v1 + h2 * v2 + b3其中,h1和h2是隐藏层的输出,v1和v2是隐藏层到输出层的权重,b3是输出层偏置。
4. 输出层预测结果
输出层同样使用 Sigmoid 函数:
y_pred = sigmoid(z3)即:
y_pred = 1 / (1 + e^(-z3))在 Excel 中仍然可以使用:
=1/(1+EXP(-单元格))最终得到模型的预测输出y_pred。
五、损失函数计算
为了衡量预测值和真实值之间的误差,本文采用平方误差损失函数:
Loss = 1/2 * (y_pred - y)^2其中:
y_pred表示模型预测值y表示真实标签Loss表示损失值
在 Excel 中可以写成:
=0.5*(预测值单元格-真实值单元格)^2损失值越小,说明模型预测结果越接近真实值。
六、反向传播计算过程
前向传播得到预测值和损失后,需要通过反向传播计算各参数的梯度,并利用梯度下降更新参数。
1. 输出层误差项
由于输出层使用 Sigmoid 激活函数,因此输出层误差项为:
δ3 = (y_pred - y) * y_pred * (1 - y_pred)其中,y_pred * (1 - y_pred)是 Sigmoid 函数的导数。
2. 输出层权重梯度
输出层权重v1和v2的梯度分别为:
∂Loss/∂v1 = δ3 * h1 ∂Loss/∂v2 = δ3 * h2输出层偏置的梯度为:
∂Loss/∂b3 = δ33. 隐藏层误差项
隐藏层误差需要由输出层误差反向传播得到。
隐藏层第一个神经元的误差项为:
δ1 = δ3 * v1 * h1 * (1 - h1)隐藏层第二个神经元的误差项为:
δ2 = δ3 * v2 * h2 * (1 - h2)4. 输入层到隐藏层权重梯度
输入层到隐藏层的权重梯度如下:
∂Loss/∂w11 = δ1 * x1 ∂Loss/∂w21 = δ1 * x2 ∂Loss/∂w12 = δ2 * x1 ∂Loss/∂w22 = δ2 * x2隐藏层偏置梯度为:
∂Loss/∂b1 = δ1 ∂Loss/∂b2 = δ2七、参数更新过程
本文采用梯度下降法更新参数。参数更新公式为:
新参数 = 原参数 - 学习率 * 梯度例如,输出层权重v1的更新过程为:
v1_new = v1 - η * ∂Loss/∂v1输入层到隐藏层权重w11的更新过程为:
w11_new = w11 - η * ∂Loss/∂w11其他权重和偏置也按照相同方式进行更新。
在 Excel 中,可以通过单元格公式完成参数更新,例如:
=旧权重单元格 - 学习率单元格 * 梯度单元格这样,Excel 就能够完整展示一次 MLP 的前向传播、损失计算、反向传播和参数更新过程。
八、Excel 文件设计说明
本次作业的 Excel 文件主要包括以下几个部分:
1. 参数设置表
用于存放输入数据、目标值、学习率、初始权重和偏置。
2. 前向传播计算表
展示隐藏层加权求和、隐藏层激活输出、输出层加权求和以及最终预测值。
3. 损失函数计算表
展示预测值与真实值之间的误差,并计算平方误差损失。
4. 反向传播计算表
展示输出层误差项、隐藏层误差项以及各个参数对应的梯度。
5. 参数更新表
根据学习率和梯度计算更新后的权重与偏置。
通过这些表格,可以清晰地看到 MLP 每一步的计算结果和公式来源。
九、实验总结
通过本次实验,我使用 Excel 展示了一个简单 MLP 神经网络的完整计算过程。相比直接使用 Python 编程实现,Excel 表格能够更加直观地展示每个中间变量的计算过程,例如隐藏层输入、激活输出、预测结果、损失值、梯度以及参数更新结果。
本次实验加深了我对 MLP 神经网络工作原理的理解。MLP 的核心过程主要包括前向传播、损失计算、反向传播和参数更新。其中,前向传播用于得到预测结果,损失函数用于衡量预测误差,反向传播用于计算参数梯度,梯度下降用于不断优化模型参数。
通过 Excel 的公式计算,可以清楚地看到神经网络并不是一个“黑箱”,而是由大量矩阵运算、激活函数和梯度计算组成的数学模型。
十、附件说明
本文对应的 Excel 文件已经展示了 MLP 的完整计算过程,包括参数初始化、前向传播、损失计算、反向传播和参数更新。
