这题要你手写一个 2-3-1 的前馈神经网络,并对单个样本做一次完整的:
- 前向传播
- 计算二分类交叉熵损失(BCE)
- 反向传播求梯度
- 用梯度下降更新参数
网络结构:
题目描述
实现一个两层全连接神经网络,网络结构为:
- 输入层:2 维
- 隐藏层:3 个神经元,激活函数为 ReLU
- 输出层:1 个神经元,激活函数为 Sigmoid
给定网络参数 W1, b1, W2, b2,单个输入样本 x = [x1, x2] 和标签 y(0 或 1),以及学习率 lr,对这个样本执行:
- 一次前向传播(Forward)
- 计算二分类交叉熵损失(Binary Cross Entropy)
- 一次反向传播(Backward)
- 使用梯度下降更新参数
需要返回 loss 和更新后的参数。
前向传播公式
设输入为 x∈R2:
-
隐藏层线性变换:
z1=W1x+b1(维度 3)
-
ReLU 激活:
h=ReLU(z1)=max(0,z1)
-
输出层线性变换:
z2=W2⊤h+b2(标量)
-
Sigmoid 输出:
y^=σ(z2)=1+e−z21
损失函数(BCE)
loss=−[ylogy^+(1−y)log(1−y^)]
反向传播(单样本)
你需要对以上计算过程进行反向传播,求出对所有参数的梯度,并使用学习率 lr 做一次梯度下降更新:
- W1←W1−lr⋅∂W1∂loss
- b1←b1−lr⋅∂b1∂loss
- W2←W2−lr⋅∂W2∂loss
- b2←b2−lr⋅∂b2∂loss
输入参数
lr:学习率
W1:形状为 2×3 的隐藏层权重矩阵
b1:长度为 3 的隐藏层偏置向量
W2:长度为 3 的输出层权重向量
b2:输出层偏置标量
x:长度为 2 的输入向量
y:标签,y∈0,1
返回值
loss:当前样本的二分类交叉熵损失
W1'、b1'、W2'、b2':一次梯度更新后的参数
示例 1
输入:
lr = 0.1
W1 = [[0.1, -0.5, 0.3],[0.4, 0.5, -0.6]]
b1 = [0.0, 0.1, 0.0]
W2 = [0.2, -0.1, 0.4]
b2 = 0.0
x = [1.0, 2.0]
y = 1
输出:
loss = 0.63
W1' = [[0.11, -0.5, 0.3], [0.42, 0.49, -0.6]]
b1' = [0.01, 0.1, 0.0]
W2' = [0.24, -0.07, 0.4]
b2' = 0.05
提示
-
输入和参数均为浮点数,使用双精度计算
-
维度约束:
W1 为 2×3
b1 长度为 3
W2 长度为 3
b2 为标量
x 为长度 2
-
学习率范围:
0<lr≤1
-
输入向量范围:
−1000≤x[i]≤1000
-
权重与偏置范围:
−10≤W1[i][j]≤10
−10≤b1[j]≤10
−10≤W2[j]≤10
−10≤b2≤10