解题思路
本题要求完成一次三层 MLP 的前向传播、反向传播和梯度下降更新。网络结构为:
din→dhidden→dout
隐藏层使用 ReLU 激活函数,输出层为线性输出。
题目内容
在深度学习的训练过程中,反向传播(Backpropagation)是计算梯度并更新网络参数的核心算法。本题要求实现一个用于回归任务的三层 MLP(多层感知机)的单次前向传播与反向传播,给定网络参数、一个输入样本及其目标值,计算梯度下降更新后的新参数。
网络架构与参数
网络为三层全连接结构:
输入层 (din)→ 隐藏层 (dhidden,ReLU)→ 输出层 (dout, 线性)
其中 din、dhidden、dout 分别为各层的维度(神经元个数),网络中所有向量和矩阵的形状均由此三个维度唯一确定。各参数和中间变量定义如下:
| 符号 |
形状 |
说明 |
| x |
(din) |
输入特征向量 |
| W1 |
(dhidden×din) |
输入层到隐藏层的权重矩阵,第i行对应隐藏层第i个神经元 |
| b1 |
(dhidden) |
隐藏层偏置向量 |
| z1 |
隐藏层预激活值,z1=W1x+b1 |
| a1 |
隐藏层激活值,a1=ReLU(z1) |
| W2 |
(dout×dhidden) |
隐藏层到输出层的权重矩阵,第i行对应输出层第i个神经元 |
| b2 |
(dout) |
输出层偏置向量 |
| z2/ypred |
输出层预激活值即为预测值(线性激活),z2=W2a1+b2 |
| ytrue |
目标真实值 |
| η |
标量 |
学习率 |
计算流程
1.前向传播
z1a1ypred=W1x+b1=ReLU(z1)=W2a1+b2
2.损失函数
L=21i=0∑dout−1(ypred,i−ytrue,i)2
3.反向传播
输出层梯度:
δ2∇W2∇b2=ypred−ytrue=δ2⊗a1(外积,结果形状dout×dhidden)=δ2
隐藏层梯度:
δ1∇W1∇b1=(W2⊤δ2)⊙ReLU′(z1)=δ1⊗x(外积,结果形状dhidden×din)=δ1
其中 ⊗ 为向量外积,⊙ 为逐元素乘法,ReLU′(z) 在 z=0 时为 0。
4.权重更新(梯度下降)
Wnew=W−η⋅∇W,bnew=b−η⋅∇b
对 W1,b1,W2,b2 分别执行上述更新。
数据约束
- 1≤din,dhidden,dout≤10
- 权重和偏置的初始值绝对值不超过 5
- 输入特征和目标值绝对值不超过 10
- 0.001≤η≤1.0
输入描述
-
一行:din dhidden dout
-
W1:共 dhidden 行,每行 din 个浮点数
-
b1:一行,dhidden 个浮点数
-
W2:共 dout 行,每行 dhidden 个浮点数
-
b2:一行,dout 个浮点数
-
x:一行,din 个浮点数
-
ytrue:一行,dout 个浮点数
-
η:一个浮点数
输出描述
W1new:共 dhidden行,每行 din 个浮点数
b1new:一行,dhidden 个浮点数
W2new:共 dout行,每行 dhidden 个浮点数
b2new:一行,dout 个浮点数
ypred:一行,dout 个浮点数
所有浮点数保留6位小数,同一行以内以空格分隔。
样例1
输入
2 2 2
0.4 0.3
-0.5 0.6
0.1 -0.2
0.5 -0.3
0.2 0.4
0.0 0.1
1.0 0.5
0.5 0.3
0.2
输出
0.420300 0.310150
-0.500000 0.600000
0.120300 -0.200000
0.522750 -0.300000
0.209100 0.400000
0.035000 0.114000
0.325000 0.230000
说明
本例网络为 2→2→2 的多输出结构。
前向传播时,z1=[0.65,−0.4],第 2 个神经元被 ReLU 关闭,a1=[0.65,0]。
预测值 ypred=[0.325,0.23]。
反向传播时,δ2=[−0.175,−0.07] 是二维向量,两个输出分量的误差通过 W2⊤δ2 叠加后传回隐藏层;
但第 2 个神经元被 ReLU 阻断,因此只有第 1 个神经元对应的 W1第1 行和 b1 第 1 个分量发生更新,第 2 行保持不变。
样例2
输入
2 2 1
-1.0 -1.0
-0.5 -0.8
-0.5 -0.3
0.5 0.3
0.1
1.0 1.0
0.5
0.1
输出
-1.000000 -1.000000
-0.500000 -0.800000
-0.500000 -0.300000
0.500000 0.300000
0.140000
0.100000
说明
本例网络为 2→2→1 结构。
前向传播时,z1=[−2.5,−1.6] 的两个分量均为负值,ReLU 将它们全部置零(a1=[0,0]),预测值完全由输出层偏置决定:ypred=b2=0.1。
反向传播时,由于 a1 全为零且ReLU′(z1)=[0,0],所有流回隐藏层的梯度均被完全阻断,导致 W1、b1、W2 均未更新,只有 b2 因直接连接输出层而从 0.1 更新为 0.14。