答案

以下是《动手学深度学习》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]

影响

  • 需确保模型能处理可变长度输入
  • 最后一个批次的梯度计算可能更不稳定,但整体训练仍有效

通过这些问题,可以更深入理解线性回归的实现细节和深度学习中的通用概念。

更多推荐