第 21 章练习与参考答案
全部数字为原创教学设定,先算再运行。
🌈 关于《AI 零基础 36 讲》课后训练
📚与正式讲解配套学习
本篇是《AI 零基础 36 讲》的配套课后训练,与对应章节的正式讲解一起使用。整个系列面向初学者,从日常 AI
使用逐步进入编程、模型训练和大模型应用开发。✍️先独立作答,再核对答案
训练围绕本章知识安排概念判断、结果分析或动手任务,并提供参考答案与解释。建议先读完对应的正式文章,再独立作答;遇到困难时回看相关例子,最后核对答案。
💻代码题请亲手运行
观察程序输出,确认自己能解释结果、发现错误并完成修复。做完一道题,也要弄清答案为什么成立。
练习
- 初始输入
[1, 2]的两个加权和是什么,经过 ReLU 后又是什么? - 输入改成
[2, 1],保持初始参数,最终输出是多少? - 输出偏置从 0.5 改到 1.0,初始输入的预测怎样变化?
- 为什么
x * W1不能代替x @ W1?本章两种输出各是什么形状? - 用两个隐藏节点计算
ReLU(x) + ReLU(-x),输入为 -3 时输出多少?删掉激活函数后呢? - 输出偏置初始梯度为 3,学习率 0.02,更新后多少?二十次拟合一条记录能否证明新数据可靠?
参考答案
第一题加权和为[2.5, -0.5],激活后为[2.5, 0],最终输出 5.5。
第二题第一节点为2 × 0.5 + 1 × 1 = 2,第二节点为2 × (-1) + 1 × 0.5 - 0.5 = -2,激活后为[2, 0],输出 4.5。
第三题预测增加 0.5,变为 6.0。这一改动发生在最后的加法处,不改变两个隐藏节点。
fromexamples.network_coreimportinitial_parameters,forward parameters=initial_parameters()print("第二题",forward([2,1],parameters))parameters["b2"]=parameters["b2"]+0.5print("第三题",forward([1,2],parameters)["output"])第四题*为逐元素乘法,当前广播结果为(2, 2);@完成加权求和,结果为(2,)。本章形状检查与手算应一起使用,因为方阵转置后可能形状相同但含义错误。
第五题得到 3,移除激活后为零。这个网络由人工指定权重,只展示表达能力,没有训练证据。
第六题为0.5 - 0.02 × 3 = 0.44。仅一条训练记录的低损失无法证明新样本可靠,应保留验证和测试数据评估。
fromexamples.network_coreimportX,TARGET,initial_parameters,gradients,update parameters=initial_parameters()new_parameters=update(parameters,gradients(X,TARGET,parameters),rate=0.02)print("输出偏置",new_parameters["b2"])assertabs(float(new_parameters["b2"])-0.44)<1e-12如果想检查一个梯度,可从差分对照表中挑出 W1 的第一项。解析值为 6,数值差分约为 6,两者的小差异来自浮点计算。