🧪 MNIST先导课程实验报告-课程2
| 课程名称 | 课程2:引入权重 w 和偏置 b(线性) | 日期 | |
|---|---|---|---|
| 学生姓名 | 班级/学号 |
🎯一、实验目的
- 固定初始值, 使用不同的学习率, 观察收敛速度
- 固定学习率, 使用不同的初始值, 观察收敛速度
- 绘制损失曲线和梯度曲线, 分析两者关系
🔧 二、实验参数设置
| 参数名 | 符号 | 说明 |
|---|---|---|
| 输入线索 | clue | 8 |
| 目标值 | target | 5 |
| 学习率 | η | 0.01 |
| 初始权重 | w | 1.2 |
| 初始偏置 | b | 0.8 |
- 实验1:固定 clue=3.0, target=2.0,调整初始 w 和 b,观察不同初始化对收敛的影响(如 w=0.5,b=-0.5;w=1.0,b=-1.0;w=-1.0,b=1.0)。
- 实验2:固定初始参数(如 w=0.5, b=-0.5),改变学习率(η=0.01, 0.1, 0.2),观察是否出现震荡或收敛过慢。
- 实验3:固定参数,改变输入 clue(如 clue=1, 2, 10),观察梯度变化与收敛速度。
- 实验4:clue 过小 (如 0.0001),观察梯度变化与收敛速度。
- 实验5:clue=6, target=5, η=0.03, 观察损失和梯度的震荡现象。
你能通过反复尝试, 找出 η 的收敛和发散的最小区间吗?
- 手算练习:对前4轮进行手工前向计算,填写表格。
📋 三、手工计算表格
训练表格 (2-1)
参数:线索clue=\(_____\),目标T=\(_____\),学习率 \(\eta\)=\(_____\),
初始值:权重W=\(______\), 偏置b=\(_____\)
提示:
- 按照 \(\boxed{S0}\) ~ \(\boxed{S5}\) 的顺序依次计算
- 观察 Loss 是否逐渐减小,参数是否朝正确方向调整。
四、代码运行结果
📊 4.1 训练过程中的损失变化曲线和梯度变化曲线

点击放大显示 两层神经网络计算图
📝 4.2 训练过程生成的数据表格 (前3行+后3行), Early stop 机制
4.2.1 参数:线索clue=\(8\),目标T=\(5\),学习率 \(\eta\)=\(0.01\), 初始值:权重W=\(1.2\), 偏置b=\(0.8\),停止阈值Threshold = \(0.0001\)
| 轮次 | 权重 w | 偏置 b | 模型输出 (预测值) | 损失 | 预测梯度 | 权重梯度 | 偏置梯度 |
|---|---|---|---|---|---|---|---|
| 0 | 1.2 | 0.8 | 10.4 | 29.16 | 10.8 | 86.4 | 10.8 |
| 1 | 0.336 | 0.692 | 3.38 | 2.6244 | -3.24 | -25.92 | -3.24 |
| 2 | 0.5952 | 0.7244 | 5.486 | 0.2362 | 0.972 | 7.776 | 0.972 |
| 5 | 0.5338 | 0.7167 | 4.9869 | 0.0002 | -0.0262 | -0.21 | -0.0262 |
| 6 | 0.5359 | 0.7170 | 5.0039 | 0 | 0.0079 | 0.0630 | 0.0079 |
| 7 | 0.5352 | 0.7169 | 4.9988 | 0 | -0.0024 | -0.0189 | -0.0024 |
4.2.2 参数:线索clue=\(8\),目标T=\(5\),学习率 \(\eta\)=\(0.01\), 初始值:权重W=\(12\), 偏置b=\(0.8\),停止阈值Threshold = \(0.00001\)
| 轮次 | 权重 w | 偏置 b | 模型输出 (预测值) | 损失 | 预测梯度 | 权重梯度 | 偏置梯度 |
|---|---|---|---|---|---|---|---|
| 0 | 12.0000 | 0.8000 | 96.8000 | 8427.2400 | 183.6000 | 1468.8000 | 183.6000 |
| 1 | -2.6880 | -1.0360 | -22.5400 | 758.4516 | -55.0800 | -440.6400 | -55.0800 |
| 2 | 1.7184 | -0.4852 | 13.2620 | 68.2606 | 16.5240 | 132.1920 | 16.5240 |
| 7 | 0.6991 | -0.6126 | 4.9799 | 0.0004 | -0.0402 | -0.3212 | -0.0402 |
| 8 | 0.7023 | -0.6122 | 5.0060 | 0.0000 | 0.0120 | 0.0964 | 0.0120 |
| 9 | 0.7013 | -0.6123 | 4.9982 | 0.0000 | -0.0036 | -0.0289 | -0.0036 |
4.2.2 参数:线索clue=\(8\),目标T=\(5\),学习率 \(\eta\)=\(0.01\), 初始值:权重W=\(1.2\), 偏置b=\(800\),停止阈值Threshold = \(0.00001\)
| 轮次 | 权重 w | 偏置 b | 模型输出 (预测值) | 损失 | 预测梯度 | 权重梯度 | 偏置梯度 |
|---|---|---|---|---|---|---|---|
| 0 | 1.2000 | 800.0000 | 809.6000 | 647381.1600 | 1609.2000 | 12873.6000 | 1609.2000 |
| 1 | -127.5360 | 783.9080 | -236.3800 | 58264.3044 | -482.7600 | -3862.0800 | -482.7600 |
| 2 | -88.9152 | 788.7356 | 77.4140 | 5243.7874 | 144.8280 | 1158.6240 | 144.8280 |
| 9 | -97.8296 | 787.6213 | 4.9842 | 0.0003 | -0.0317 | -0.2534 | -0.0317 |
| 10 | -97.8271 | 787.6216 | 5.0048 | 0.0000 | 0.0095 | 0.0760 | 0.0095 |
| 11 | -97.8279 | 787.6215 | 4.9986 | 0.0000 | -0.0029 | -0.0228 | -0.0029 |
🎉 五、观察与分析
- 学习率的影响:当学习率过大/过小时,观察到了什么现象? 当学习率过大时,梯度会发生震荡和不降反增现象;当学习率过小时,损失下降缓慢,最终停止学习
- 初始化参数的影响:不同初始 w 和 b 对训练速度有何影响?
有影响,但影响不大 - 神经元死亡现象:是否观察到梯度为0、参数不再更新的情况?如何判断? 是的。当学习率过小时,会发生神经元死亡现象,即参数不再更新
✨ 六、实验结论
(总结本次实验的核心发现,例如:学习率需要适中才能稳定收敛;Leaky ReLU 可以有效避免神经元死亡等)
💫 七、思考题
- 如果输入线索
clue非常大(如 100),训练时可能出现什么问题?如何解决? 收敛过快,梯度在最优值附近震荡;使用更小的\(w\)和\(b\) - 为什么要监控梯度的大小?梯度消失或梯度爆炸对训练有何影响?
防止梯度爆炸和梯度消失;会导致训练失败
八、附录:实验代码
(可附上本次实验的核心代码片段,或说明代码存放位置)
from pydraw import pydraw
def trainmodule1(target:int,clue:int,rate:float,w:float,b:float,there:int):
draw = pydraw()
for epoch in range(200):
pred = w*clue+b
loss=(pred-target)*(pred-target)
grad=2*(pred-target)
gw = grad*clue
gb = grad
print(f"| {epoch} | {w:.4f} | {b:.4f} | {pred:.4f} | {loss:.4f} | {grad:.4f} | {gw:.4f} | {gb:.4f} |")
if loss < there:
break
w = w-(rate*gw)
b = b-(rate*gb)
draw.add(loss,"loss")
draw.add(gw,"gw")
draw.add(gb,"gb")
draw.draw()
target = 5
clue = 8
rate = 0.01
w = 1.2
b = 800
there = 0.00001
### 4.2.1 参数:线索clue=$8$,目标T=$5$,学习率 $\eta$=$0.01$, 初始值:权重W=$1.2$, 偏置b=$0.8$,停止阈值Threshold = $0.0001$
print(f"### 4.2.2 参数:线索clue=${clue}$,目标T=${target}$,学习率 $\eta$=${rate}$, 初始值:权重W=${w}$, 偏置b=${b}$,停止阈值Threshold = ${there:.5f}$")
trainmodule1(target,clue,rate,w,b,there)
浙公网安备 33010602011771号