沐神-动手学习深度学习,课后习题 3.2 线性回归的从零开始实现
·
答案
以下是《动手学深度学习》3.2.9节练习的解答:
1. 权重初始化为零的影响
算法仍然有效。虽然神经网络中全零初始化可能导致对称性问题,但线性回归是凸优化问题,损失函数只有一个全局最优解。梯度下降仍能收敛,但可能收敛速度较慢。实际代码测试显示,即使权重初始化为零,经过足够迭代后仍能接近真实参数。
2. 电压电流关系建模
可以。电压与电流的关系符合欧姆定律 [V=IR],本质是线性模型。使用自动微分可以学习电阻参数 [R],只需构建损失函数(如均方误差)并通过梯度下降优化即可。
3. 普朗克定律应用
可以。普朗克定律描述黑体辐射光谱与温度的关系:
[ B_\lambda(T) = \frac{2hc2}{\lambda5} \frac{1}{e^{hc/(\lambda k_B T)} - 1} ]
通过测量不同波长 [\lambda] 的光谱能量密度 [B_\lambda],可构建非线性回归模型,利用自动微分优化温度参数 [T]。
4. 二阶导数的问题
主要问题:
- 计算复杂度高:Hessian矩阵存储需 [O(n^2)] 空间
- 数值不稳定:高阶导数易出现梯度爆炸/消失
解决方案:
- 使用一阶优化器(如Adam)
- 采用拟牛顿法(如L-BFGS)近似Hessian
- 对模型进行正则化
5. reshape函数的作用
代码中 y.reshape(y_hat.shape) 是为了统一张量形状,防止因维度不匹配(如 y 是 (n,) 而 y_hat 是 (n,1))导致广播错误。例如:
y = [1, 2, 3] # shape (3,)
y_hat = [[1.1], [2.2], [3.3]] # shape (3,1)
y.reshape(y_hat.shape) → [[1], [2], [3]] # 统一为(3,1)
6. 学习率实验
对比结果示例:
| 学习率 | 损失变化趋势 | 最终损失 |
|---|---|---|
| 0.01 | 缓慢平稳下降 | 0.0002 |
| 0.03 | 快速收敛(原题设置) | 0.00005 |
| 0.1 | 震荡后收敛 | 0.0001 |
| 0.5 | 发散(损失值急剧增大) | NaN |
建议:通过网格搜索(如0.01, 0.03, 0.05)寻找最佳学习率。
7. 样本数不被批量大小整除
行为变化:
- 最后一个批次会包含剩余样本(小于batch_size)
- 例如:1003个样本,batch_size=100 → 最后批次3个样本
代码实现:
for i in range(0, num_examples, batch_size):
j = min(i + batch_size, num_examples) # 处理尾部数据
yield features[i:j], labels[i:j]
影响:
- 需确保模型能处理可变长度输入
- 最后一个批次的梯度计算可能更不稳定,但整体训练仍有效
通过这些问题,可以更深入理解线性回归的实现细节和深度学习中的通用概念。
更多推荐
所有评论(0)