Ch06 机器学习阶段测试卷¶
总分:100 分(原始分 114 分,最终得分 = 原始得分 ÷ 114 × 100)
题量:25 题
题型:选择题 10 题(10×3=30 分)|填空题 5 题(5×4=20 分)|简答题 6 题(6×6=36 分)|编程题 4 题(4×7=28 分)
计分说明:题型分值按题目要求保留。四类题型合计 114 分,按上式折算为百分制,避免删减任一指定题型。所有概率无量纲;熵、信息增益、交叉熵若使用
log₂,单位为 bit;损失若使用自然对数ln,单位为 nat。代码均可在 Python 3 / Pyodide 运行。范围:§01 经典 ML;§02 GD、SGD、Momentum、Adam、正则化;§03 MLP、CNN、RNN、Transformer 注意力;§04 数据并行、模型并行、AllReduce;§05 MDP、Q-Learning、Policy Gradient、PPO。
符号表:$ \lambda\((正则化系数,\) \lambda\ge0\(;本卷不表示特征值或 Poisson 率);\) \alpha\((正则化系数或 Laplace 平滑参数,按题目逐处标注;不表示显著性水平);\) \beta_1, \beta_2\((Adam 的一阶、二阶指数衰减率,不表示回归系数或二类错误率);\) \delta$(强化学习 TD 误差,或题目明确标注的折扣因子;不表示 $ \varepsilon\(–\) \delta$ 极限定义);$ \varepsilon$(数值稳定项或 $ \varepsilon\(-greedy 探索率,按题目逐处标注;不表示隐私预算);\) \eta\((学习率,\) \eta>0$;不表示渐近效率)。向量默认列向量;梯度默认列向量,Jacobian 默认行向量。
一、选择题(10 × 3 = 30 分)¶
1. 【🟢 入门】【L2 理解】逻辑回归的模型输出与损失函数哪项正确?¶
A. 输出 $
\hat y=\mathbf w^\top\mathbf x+b$,只能取任意实数,通常配 MSE 作为分类损失
B. 输出 $
\hat p=\sigma(z)=1/(1+e^{-z})$,取值在 \((0,1)\),二元交叉熵为 \(-[y\ln\hat p+(1-y)\ln(1-\hat p)]\) nat
C. 输出是类别编号,训练时不需要可导函数
D. 输出概率必须由 $
\operatorname{softmax}$ 产生,即使只有一个类别
答案:B
解析:$
\sigma(0)=1/(1+1)=0.5$,因此输出可解释为正类概率。二元交叉熵(BCE)使用自然对数时单位为 nat;单样本公式为
$$
\operatorname{BCE}=-[y\ln(\hat y)+(1-y)\ln(1-\hat y)].
$$
A 把线性得分和概率混同,C 忽略训练目标,D 混淆二分类与多分类。数字核验:Python/Pyodide 计算 1/(1+exp(0)) 得 0.5。
来源:../../第06章 - 机器学习/01. 经典机器学习.md;../../第06章 - 机器学习/02. 梯度机器学习.md
2. 【🟢 入门】【L3 应用】真实值 $¶
\mathbf y=(1,2)$,预测值 $ \hat{\mathbf y}=(0.9,2.1)$。均方误差 $$ \operatorname{MSE}=\frac1n\sum_{i=1}^{n}(y_i-\hat y_i)^2 $$ 是多少?
A. \(0.005\) B. \(0.01\) C. \(0.02\) D. \(0.1\)
答案:B
解析:\(n=2\),残差为 \(0.1,-0.1\),所以
$$
\operatorname{MSE}=\frac{(1-0.9)^2+(2-2.1)^2}{2}=\frac{0.01+0.01}{2}=0.01.
$$
数字核验:Pyodide sum((y-p)**2)/2 输出 0.01。这里不能把平方和 \(0.02\) 当成 MSE。
来源:../../第06章 - 机器学习/02. 梯度机器学习.md
3. 【🟡 进阶】【L4 分析】某二分类决策树父节点含 4 个样本,正类 2 个、负类 2 个。按某特征分裂后,左子节点含 2 个正类,右子节点含 1 个正类和 1 个负类。使用 \(\log_2\),信息增益是多少?¶
A. \(0\) bit B. \(0.1887\) bit C. \(0.5\) bit D. \(1\) bit
答案:C
解析:父节点熵为 $$ H(S)=-(2/4)\log_2(2/4)-(2/4)\log_2(2/4)=1\text{ bit}. $$ 左节点纯,熵为 \(0\) bit;右节点均衡,熵为 \(1\) bit。加权子节点熵为 $$ (2/4)\cdot0+(2/4)\cdot1=0.5\text{ bit}. $$ 故 \(\operatorname{IG}=1-0.5=0.5\) bit,选 C。数字核验:\(\log_2 2=1\),所以平衡二分类熵确为 1 bit;\(0.5\times1=0.5\) bit 与父熵的差即为信息增益。易错点:把右节点 1 正 1 负当成父节点,或把"加权"写成"取大"。
来源:../../第06章 - 机器学习/01. 经典机器学习.md;../阶段测试题/第05章.md(互信息与熵)
4. 【🟡 进阶】【L3 应用】线性 SVM 约束为 \(y_i(\mathbf w^\top\mathbf x_i+b)\ge1\)。若 $¶
|\mathbf w|_2=5$,决策超平面到规范化间隔边界的几何距离是多少?
A. \(0.1\) B. \(0.2\) C. \(1\) D. \(5\)
答案:B
解析:约束边界为 $ \mathbf w^\top\mathbf x+b=1$,几何距离等于 \(1/\|\mathbf w\|_2=1/5=0.2\) 个输入空间单位。数字核验:\(1\div5=0.2\)。$ |\mathbf w|_2$ 越大,在相同规范化约束下几何间隔越小。
来源:../../第06章 - 机器学习/01. 经典机器学习.md
5. 【🟢 入门】【L3 应用】朴素贝叶斯对样本 $¶
\mathbf x$ 的两个类别给出未归一化后验分数: $$ P(C_A)P(\mathbf x\mid C_A)=0.6\times0.5=0.3, \quad P(C_B)P(\mathbf x\mid C_B)=0.4\times0.25=0.1. $$ 预测类别应为
A. \(C_A\) B. \(C_B\) C. 无法判断 D. 两者相同
答案:A
解析:分母 \(P(\mathbf x)\) 对各类别相同,比较分子即可,\(0.3>0.1\),故预测 \(C_A\)。若归一化,后验分别为 \(0.3/(0.3+0.1)=0.75\) 与 \(0.25\),仍选 \(C_A\)。数字核验:\(0.3+0.1=0.4\),\(0.3/0.4=0.75\)。
来源:../../第06章 - 机器学习/01. 经典机器学习.md
6. 【🟢 入门】【L2 理解】关于 Dropout 的说法正确的是¶
A. 训练和推理阶段都按同一随机掩码删除神经元
B. 训练时随机置零部分激活,推理时使用完整网络并保持期望尺度一致
C. Dropout 必然增大训练集准确率
D. Dropout 等价于把所有权重变成零
答案:B
解析:以保留率 \(q=0.8\) 为例,反向 Dropout 在训练时使用掩码后把保留激活除以 \(q\),使期望激活保持不变。数字核验:激活 \(a=2\) 被保留时缩放为 \(2/0.8=2.5\);保留概率 \(0.8\),期望为 \(0.8\times2.5=2\)。Dropout 通过随机子网络起正则化作用,不保证训练集准确率上升。
来源:../../第06章 - 机器学习/03. 深度学习.md
7. 【🟡 进阶】【L4 分析】以下哪项正确描述 \(L^1\) 与 \(L^2\) 正则化?¶
A. \(L^1\) 正则项使所有参数相等
B. \(L^2\) 正则化诱导精确的零参数,\(L^1\) 只改变尺度
C. \(L^1\) 正则化作为优化目标中的惩罚项时可诱导稀疏解;\(L^2\) 惩罚较大权重并通常使参数变小
D. 正则化只影响测试集,不影响训练目标
答案:C
解析:例如目标 $ L(\theta)+\lambda|\theta|_1$ 中 $ \lambda\((正则化系数)控制惩罚强度;\)L^1$ 惩罚项的尖角可使部分坐标精确为 0,表述应为“\(L^1\) 正则化诱导稀疏解”,不是范数本身具有某种属性。数字核验:$ |(3,-4)|_1=7\(,\) |(3,-4)|_2^2=25$;两者惩罚数值与几何形状不同。
来源:../../第06章 - 机器学习/02. 梯度机器学习.md
8. 【🟡 进阶】【L3 应用】Transformer 注意力的标准缩放点积公式是¶
A. $
\operatorname{softmax}(QK^\top)V$
B. $
\operatorname{softmax}(QK^\top/\sqrt{d_k})V$,其中 $
\sqrt{d_k}$ 是键向量维数 \(d_k\) 的平方根
C. $
\operatorname{softmax}(QV^\top/\sqrt{d_k})K$
D. $
\operatorname{softmax}(KQ^\top/d_k)V$
答案:B
解析:正确公式为 $$ \operatorname{Attention}(Q,K,V)=\operatorname{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V. $$ 缩放因子使用 $ \sqrt{d_k}$,不是 \(d_k\);它控制点积方差随维数增长的问题。数字核验:若 \(d_k=4\),则 $ \sqrt{d_k}=2$;若直接除以 \(4\),缩放量不同。
来源:../../第06章 - 机器学习/03. 深度学习.md
9. 【🟡 进阶】【L3 应用】使用 $¶
\log_2$ 计算语言模型交叉熵,若平均每个 token 的熵为 \(H=3\) bit,则 perplexity 为
A. \(3\) B. \(6\) C. \(8\) D. \(e^3\)
答案:C
解析:perplexity 定义为 $ \operatorname{PPL}=2^H$(这里 \(H\) 的单位是 bit),所以 $ \operatorname{PPL}=2^3=8$。若使用自然对数,定义应写作 $ \exp(H_{nat})\(;bit 与 nat 不能混用。**数字核验**:\)2^3=8$,无量纲。
来源:../../第06章 - 机器学习/03. 深度学习.md;../阶段测试题/第05章.md(熵与交叉熵)
10. 【🔴 高阶】【L5 评价】【⭐进阶,可跳】关于数据并行训练和 AllReduce,下列说法中错误的是¶
A. 每个工作进程保存完整模型副本,但处理不同数据分片
B. 梯度 AllReduce 求和后除以工作进程数,可得到平均梯度
C. 只要使用 AllReduce,就不需要同步各进程的模型参数
D. 若每个进程的 batch 大小相同,平均梯度可保持与单机大 batch 平均梯度一致
答案:C
解析:AllReduce 本身同步参与规约的张量;每轮仍需用规约后的平均梯度更新各副本参数,参数才能保持一致。A、B、D 是同步数据并行的标准口径。数字核验:2 个进程梯度为 \([1,3]\) 与 \([3,5]\),求和为 \([4,8]\),除以 2 得 \([2,4]\);若不广播/更新同一结果,参数会分叉。
来源:../../第06章 - 机器学习/04. 分布式深度学习.md
二、填空题(5 × 4 = 20 分)¶
11. 【🟢 入门】【L2 理解】若线性模型的 logit 为 \(z=0\),则 sigmoid 概率 $¶
\sigma(z)=$ __;若使用阈值 \(0.5\),预测类别为 ____。
答案:\(0.5\);正类(若约定 $ \hat p\ge0.5$ 判为正类)。
解析:$ \sigma(0)=1/(1+e^0)=1/2=0.5\(。**数字核验**:\)e^0=1$,所以分母为 2。阈值规则必须明确,若另行规定严格大于 \(0.5\),边界样本需另行约定。
来源:../../第06章 - 机器学习/01. 经典机器学习.md
12. 【🟢 入门】【L3 应用】真实值 $¶
\mathbf y=(1,2)$,预测值 $ \hat{\mathbf y}=(0.9,2.1)$,则 $$ \operatorname{MSE}=\frac1n\sum_{i=1}^n(y_i-\hat y_i)^2= \underline{\hspace{2cm}}. $$
答案:\(0.01\)。
解析:$ [(1-0.9)^2+(2-2.1)^2]/2=(0.01+0.01)/2=0.01$。数字核验:平方和为 \(0.02\),除以 \(n=2\) 后才是 \(0.01\),答案与解析一致。
来源:../../第06章 - 机器学习/02. 梯度机器学习.md
13. 【🟡 进阶】【L4 分析】修正版二分类决策树节点共有 4 个样本,父节点 2 正 2 负;分裂后左节点 2 正,右节点 1 正 1 负。使用 $¶
\log_2$,信息增益为 ______ bit。
答案:\(0.5\) bit。
解析:父熵 \(H(S)=1\) bit;左熵为 0 bit;右熵为 1 bit;加权子熵为 $ (2/4)\times0+(2/4)\times1=0.5$ bit,因此 IG \(=1-0.5=0.5\) bit。数字核验:\(\log_2 2=1\),所以平衡二分类熵确为 1 bit。
来源:../../第06章 - 机器学习/01. 经典机器学习.md;../阶段测试题/第05章.md
14. 【🟡 进阶】【L4 分析】Adam 的参数为 $¶
\beta_1=0.9\((一阶矩衰减率)、\) \beta_2=0.999$(二阶矩衰减率),初值 \(m_0=v_0=0\),当前梯度 \(g_1=0.2\)。则 \(m_1=\) __,\(v_1=\) _;偏差修正后 $ \hat m1=$ _,$ \hat v1=$ ____。
答案:\(m_1=0.02\);\(v_1=0.00004\);$ \hat m_1=0.2\(;\) \hat v_1=0.04$。
解析: $$ m_1=0.9\cdot0+0.1\cdot0.2=0.02,\quad v_1=0.999\cdot0+0.001\cdot(0.2)^2=0.00004. $$ 偏差修正为 $ \hat m_1=m_1/(1-0.9)=0.2\(,\) \hat v_1=v_1/(1-0.999)=0.04\(。**数字核验**:\)0.2^2=0.04\(,\)0.001\times0.04=0.00004$。
来源:../../第06章 - 机器学习/02. 梯度机器学习.md
15. 【🟡 进阶】【L3 应用】注意力中 \(d_k=4\),则缩放因子 $¶
\sqrt{d_k}=$ __。若某行缩放前的点积为 \((2,0)\),缩放后为 ____。
答案:\(2\);\((1,0)\)。
解析:$ \sqrt4=2$,逐元素除以 2 得 \((2/2,0/2)=(1,0)\)。数字核验:\(2^2=4\)。注意力公式中的分母必须写 $ \sqrt{d_k}$。
来源:../../第06章 - 机器学习/03. 深度学习.md
三、简答题(6 × 6 = 36 分)¶
16. 【🟡 进阶】【L4 分析】写出 Adam 的一阶矩、二阶矩、偏差修正和参数更新公式,并用 $¶
\beta_1=0.9\(、\) \beta_2=0.999\(、\)g_1=0.2\(、\) \eta=0.001\((\) \eta$ 为学习率)、$ \varepsilon=10^{-8}\((\) \varepsilon$ 为数值稳定项)、$ \theta_0=1$ 完成第 1 步更新。
答案: $$ m_t=\beta_1m_{t-1}+(1-\beta_1)g_t, \quad v_t=\beta_2v_{t-1}+(1-\beta_2)g_t^2, $$ $$ \hat m_t=\frac{m_t}{1-\beta_1^t}, \quad \hat v_t=\frac{v_t}{1-\beta_2^t}, \quad \theta_t=\theta_{t-1}-\eta\frac{\hat m_t}{\sqrt{\hat v_t}+\varepsilon}. $$ 第 1 步:\(m_1=0.02\),\(v_1=0.00004\),$ \hat m_1=0.2\(,\) \hat v_1=0.04$; $$ \theta_1=1-0.001\frac{0.2}{\sqrt{0.04}+10^{-8}} \approx1-0.001\frac{0.2}{0.20000001} \approx0.99900000025. $$ 保留 6 位小数为 $ \theta_1=0.999000$。
解析:动量式的 \(m_t\) 是梯度的指数加权平均,\(v_t\) 是平方梯度的指数加权平均;初始为 0 会造成低估,所以要除以 \(1-\beta^t\)。数字核验:Pyodide 计算 $ \sqrt{0.04}=0.2$,更新量约 \(0.001\),与 $ \theta_1\approx0.999$ 一致。易错点是漏掉偏差修正,或把 $ \beta_2g_t^2$ 写成 $ \beta_2g_t$。
来源:../../第06章 - 机器学习/02. 梯度机器学习.md
17. 【🟡 进阶】【L4 应用】手算一次缩放点积注意力。给定¶
$$ Q=(1,0),\quad K=\begin{pmatrix}1&0\0&1\end{pmatrix},\quad V=\begin{pmatrix}2&0\0&2\end{pmatrix},\quad d_k=1. $$ 写出 \(QK^\top/\sqrt{d_k}\)、softmax 权重和最终输出,结果保留 4 位小数。
答案: $$ QK^\top=(1,0),\qquad \sqrt{d_k}=1. $$ 所以 logits 为 \((1,0)\),权重为 $$ \left(\frac{e^1}{e^1+e^0},\frac{e^0}{e^1+e^0}\right) \approx(0.7311,0.2689). $$ 最终输出 $$ (0.7311,0.2689)V=(1.4621,0.5379). $$
解析:注意力先算 \(QK^\top\),再除以 $ \sqrt{d_k}$,再对每行做 softmax,最后以权重对 \(V\) 加权。数字核验:\(e^1/(e^1+1)\approx0.7311\),两权重和为 \(1.0000\);输出第一维为 \(0.7311\times2=1.4622\),使用未四舍五入权重得 \(1.4621\)。本题明确 \(d_k=1\);若 \(d_k=4\),分母则为 2,不能沿用本题数值。
来源:../../第06章 - 机器学习/03. 深度学习.md
18. 【🔴 高阶】【L5 评价】【⭐进阶,可跳】判断并改正下列陈述,说明理由。¶
- MSE 的定义是 $ \sum_i(y_i-\hat y_i)^2$,不需要除以样本数。
- BCE 中可以使用 $ \log_2$,但若如此,损失单位是 bit;使用 $ \ln$ 时单位是 nat。
- Adam 的 $ \beta_1\(、\) \beta_2$ 是 Adam 的一阶和二阶矩衰减率,不是回归模型的系数。
- 注意力公式中的缩放分母是 $ \sqrt{d_k}$,不是 \(d_k\)。
- 数据并行中每个进程只保存自己负责的模型层,因此它属于模型并行。
- Q-Learning 是 on-policy 方法,只能用当前策略产生的样本。
答案:
1. 不成立。按本卷定义,$
\operatorname{MSE}=(1/n)\sum_i(y_i-\hat y_i)^2$;例如两个平方误差均为 \(0.01\) 时,平方和为 \(0.02\),MSE 为 \(0.01\)。
2. 成立。对数底决定信息单位;BCE 使用 $
\log_2$ 为 bit,使用 $
\ln$ 为 nat。
3. 成立。本卷 $
\beta_1,
\beta_2$ 专指 Adam 衰减率;每个题目中的多义符号必须按上下文标注。
4. 成立。公式为 $
\operatorname{softmax}(QK^\top/\sqrt{d_k})V$;例如 \(d_k=4\) 时分母为 \(2\),不是 \(4\)。
5. 不成立。数据并行的每个进程保存完整模型副本,处理不同数据分片;“每个进程保存部分层”是模型并行。
6. 不成立。经典 Q-Learning 是 off-policy:行为策略可以是 $
\varepsilon$-greedy(这里 $
\varepsilon$ 表示探索率),目标使用 $
\max_{a'}Q(s',a')$ 的贪心价值。
解析:本题考查术语边界与符号契约,不是只看公式外形。数字核验:\(d_k=4\) 时 $ \sqrt{4}=2\(;\)\log_2 2=1$ bit,而 $ \ln2\approx0.6931$ nat,说明单位差异真实存在。
来源:../../第06章 - 机器学习/01. 经典机器学习.md;../../第06章 - 机器学习/02. 梯度机器学习.md;../../第06章 - 机器学习/03. 深度学习.md;../../第06章 - 机器学习/04. 分布式深度学习.md;../../第06章 - 机器学习/05. 强化学习.md
19. 【🟡 进阶】【L4 分析】比较数据并行、模型并行和流水线并行。说明同步数据并行中 AllReduce 的计算过程,并指出梯度平均与学习率的关系。¶
答案:
- 数据并行:每个进程保存完整模型,输入 batch 分片;各进程独立前向、反向,再对梯度做 AllReduce,更新后保持副本一致。
- 模型并行:把不同层或张量切到不同设备,单个样本的前向需要跨设备传递中间激活,适合模型大于单卡显存的情况。
- 流水线并行:按层段切分模型,多个 micro-batch 依次通过各段,减少设备空闲,但有流水线气泡和调度开销。
- AllReduce:若两个进程梯度分别为 $ \mathbf g_1=(1,3)^\top\(、\) \mathbf g_2=(3,5)^\top$,求和为 \((4,8)^\top\),平均梯度为 \((2,4)^\top\)。所有进程取得同一规约结果后,用 $ \theta\leftarrow\theta-\eta\bar{\mathbf g}$ 更新。
- 若全局 batch 是各进程 batch 的总和且损失按样本平均,使用平均梯度通常保持单机大 batch 的梯度尺度,学习率无需因“求和”而额外放大;若实现使用梯度求和,则需按进程数或有效 batch 重新标定。
解析:关键区别是“复制数据还是切分模型”。数字核验:2 个进程的梯度平均为 $ [(1+3)/2,(3+5)/2]=(2,4)$;若错误使用求和,更新量会大 2 倍。
来源:../../第06章 - 机器学习/04. 分布式深度学习.md
20. 【🟡 进阶】【L4 分析】定义 MDP 的五元组,写出 Q-Learning 更新式,并计算一次更新:当前 \(Q(s,a)=0.5\),即时奖励 \(r=1\),折扣因子 $¶
\gamma=0.9$,下一状态两个动作的 Q 值为 \(1.5,2.0\),学习率 $ \eta=0.5$。
答案:MDP 可写为 \((\mathcal S,\mathcal A,P,R,\gamma)\):状态集合、动作集合、转移概率、奖励函数、折扣因子。Q-Learning 更新为 $$ Q(s,a)\leftarrow Q(s,a)+\eta\left[r+\gamma\max_{a'}Q(s',a')-Q(s,a)\right]. $$ 令 $ \delta$(TD 误差)为方括号内项,则 $$ \delta=1+0.9\times\max(1.5,2.0)-0.5=1+1.8-0.5=2.3, $$ $$ Q_{new}=0.5+0.5\times2.3=1.65. $$
解析:$ \gamma$ 是折扣因子;本题用 $ \delta$ 表示 TD 误差,不与增量或 Dirac $ \delta$ 函数混用。数字核验:$ \max(1.5,2.0)=2.0\(,\) 0.9\times2=1.8$,最后 \(0.5+1.15=1.65\)。
来源:../../第06章 - 机器学习/05. 强化学习.md
21. 【🟡 进阶】【L4 分析】解释交叉熵、KL 散度和 VAE 中 KL 正则项的关系。要求给出 BCE/CCE 的表达式,并说明 bit 与 nat 的区别。¶
答案:对真实分布 \(P\) 和模型分布 \(Q\),交叉熵为 $$ H(P,Q)=-\sum_xP(x)\log Q(x), $$ KL 散度为 $$ D_{KL}(P|Q)=\sum_xP(x)\log\frac{P(x)}{Q(x)}=H(P,Q)-H(P). $$ 若用 $ \log_2$,单位是 bit;若用 $ \ln$,单位是 nat,数值一般不同。二分类 BCE 为 $$ -\sum_i[y_i\log(\hat y_i)+(1-y_i)\log(1-\hat y_i)], $$ 多分类 CCE 为 $$ -\sum_{k=1}^K y_k\log(\hat y_k). $$ VAE 的目标通常包含重构损失与 $ D_{KL}(q_\phi(z\mid x)|p(z))$ 正则项,后者约束潜变量后验接近先验;训练框架常用 $ \ln$,因此默认单位为 nat。
解析:\(H(P)\) 对固定真实分布是常数,所以在同一数据分布下最小化交叉熵等价于最小化 KL;但 KL 不对称,不能直接称为距离。数字核验:对 one-hot 真实标签且模型给真类概率 \(0.8\),BCE/CCE($ \ln$)为 \(- \ln0.8\approx0.2231\) nat;若用 $ \log_2$,则 \(- \log_2 0.8\approx0.3219\) bit,单位与数值都需写明。
来源:../../第06章 - 机器学习/03. 深度学习.md;../阶段测试题/第05章.md
四、编程题(4 × 7 = 28 分)¶
22. 【🟡 进阶】【L4 应用】实现 Softmax + 多分类交叉熵(7 分)¶
给定 logits z=[2, 1, 0],真实类别索引为 0。实现数值稳定的 softmax 和 CCE。使用自然对数,输出概率和损失,损失单位为 nat。代码不得调用深度学习框架的现成 loss。
参考答案(可运行代码)¶
import math
def softmax(logits):
shift = max(logits)
exps = [math.exp(x - shift) for x in logits]
total = sum(exps)
return [x / total for x in exps]
def cross_entropy(probs, target):
return -math.log(probs[target])
z = [2.0, 1.0, 0.0]
probs = softmax(z)
loss = cross_entropy(probs, 0)
print([round(p, 6) for p in probs])
print(f"loss={loss:.6f} nat")
期望输出¶
答案:softmax 概率约为 \((0.665241,0.244728,0.090031)\),三者和为 1;CCE 为 \(- \ln(0.665241)\approx0.407606\) nat。
解析:减去最大 logit 不改变 softmax 比值,却能避免指数溢出。数字核验:分母为 \(e^0+e^{-1}+e^{-2}\approx1.503215\);第一概率约 \(1/1.503215=0.665241\);$ -\ln(0.665241)\approx0.407606$ nat。若改用 $ \log_2$,数值应约为 \(0.5870\) bit,不能与 nat 混写。
来源:../../第06章 - 机器学习/03. 深度学习.md;../阶段测试题/第05章.md
23. 【🟢 入门】【L3 应用】实现 MSE 与一次线性偏置更新(7 分)¶
给定目标 y=[1,2,3]、预测 pred=[0.8,2.2,2.9]。实现 MSE,并把模型视作只含一个可训练偏置 \(b\) 的预测 $
\hat y_i=\text{pred}_i+b$。学习率 $
\eta=0.1$,计算 MSE 对 \(b\) 的梯度
$$
\frac{\partial\operatorname{MSE}}{\partial b}=\frac2n\sum_i(\hat y_i-y_i),
$$
完成一次更新,输出 MSE、梯度和新偏置。
参考答案(可运行代码)¶
y = [1.0, 2.0, 3.0]
pred = [0.8, 2.2, 2.9]
eta = 0.1
n = len(y)
errors = [p - t for p, t in zip(pred, y)]
mse = sum(e * e for e in errors) / n
grad_b = 2.0 * sum(errors) / n
b_new = 0.0 - eta * grad_b
new_pred = [p + b_new for p in pred]
new_mse = sum((p - t) ** 2 for p, t in zip(new_pred, y)) / n
print(f"mse={mse:.6f}")
print(f"grad_b={grad_b:.6f}")
print(f"b_new={b_new:.6f}")
print(f"new_mse={new_mse:.6f}")
期望输出¶
答案:误差为 \((-0.2,0.2,-0.1)\),平方和为 \(0.09\),MSE 为 \(0.03\);梯度为 \(2(-0.1)/3=-0.133333\);更新后 \(b=0.013333\),新 MSE 约为 \(0.028222\)。
解析:MSE 的平均因子 \(1/n\) 同时影响数值和梯度。负梯度表示整体预测偏低,正向增加偏置。数字核验:\((-0.2)^2+0.2^2+(-0.1)^2=0.09\),\(0.09/3=0.03\);更新后的三项残差为 \(-0.186667,0.213333,-0.086667\),平方平均约 \(0.028222\)。
来源:../../第06章 - 机器学习/02. 梯度机器学习.md
24. 【🟡 进阶】【L4 分析】从零实现 Adam 的第 1 步(7 分)¶
实现标量 Adam,初值 $ \theta_0=1\(、\)m_0=v_0=0$,梯度 \(g_1=0.2\),$ \beta_1=0.9\(、\) \beta_2=0.999\(、\) \eta=0.001\(、\) \varepsilon=10^{-8}$。输出 \(m_1,v_1,\hat m_1,\hat v_1,\theta_1\)。
参考答案(可运行代码)¶
```python beta1 = 0.9 beta2 = 0.999 eta = 0.001 epsilon = 1e-8
theta = 1.0 m = 0.0 v = 0.0 g = 0.2 t = 1
m = beta1 * m + (1 - beta1) * g v = beta2 * v + (1 - beta2) * (g ** 2) m_hat = m / (1 - beta1 ** t) v_hat = v / (1 - beta2 ** t) theta = theta - eta * m_hat / (v_hat ** 0.5 + epsilon)
print(f"m={m:.6f}") print(f"v={v:.6f}") print(f"m_hat={m_hat:.6f}") print(f"v_hat={v_hat:.6f}") print(f"theta={theta:.6f}")
答案:更新后 $ \theta_1\approx0.99900000025$,六位小数为 \(0.999000\)。
解析:$ \varepsilon$ 在本题表示数值稳定项,不是 $ \varepsilon\(-greedy 探索率;\) \eta$ 表示学习率。数字核验:\(m_1=0.02\),\(v_1=4\times10^{-5}\),偏差修正给出 \(0.2\) 与 \(0.04\),步长约 \(0.001\);代码输出与手算一致。
来源:../../第06章 - 机器学习/02. 梯度机器学习.md
25. 【🔴 高阶】【L6 创造】【⭐进阶,可跳】自造一个最小强化学习环境并执行一次 Q-Learning(7 分)¶
设计一个只有两个状态 start、goal 和一个动作 move 的环境:从 start 执行 move 到 goal,奖励为 1;goal 为终止状态。初始 \(Q(start,move)=0\),学习率 $
\eta=0.5$,折扣因子 $
\gamma=0.9$。编写可运行代码,至少执行一次 Bellman 更新,并输出 TD 误差 $
\delta$(本题中 $
\delta$ 表示 TD 误差)和更新后的 Q 值。再改变奖励为 2,说明环境奖励尺度如何影响 Q 值。
参考答案(可运行代码)¶
def q_update(q_value, reward, next_max, eta, gamma):
td_error = reward + gamma * next_max - q_value
new_q = q_value + eta * td_error
return td_error, new_q
eta = 0.5
gamma = 0.9
# 自造环境:start --move/reward--> goal,goal 为终止状态
q_start = 0.0
q_goal_max = 0.0
delta1, q_after_1 = q_update(q_start, 1.0, q_goal_max, eta, gamma)
delta2, q_after_2 = q_update(q_start, 2.0, q_goal_max, eta, gamma)
print(f"reward=1: delta={delta1:.6f}, Q={q_after_1:.6f}")
print(f"reward=2: delta={delta2:.6f}, Q={q_after_2:.6f}")
期望输出¶
答案:终止状态的下一状态价值取 0。奖励为 1 时 $ \delta=1+0.9\times0-0=1$,更新后 \(Q=0+0.5\times1=0.5\);奖励为 2 时 $ \delta=2$,更新后 \(Q=1\)。
解析:这是一个最小可验证环境,学生还可以加入第二个动作、随机转移或 $ \varepsilon$-greedy(此处 $ \varepsilon$ 表示探索率)扩展实验。奖励放大 2 倍时,第 1 步 TD 误差和 Q 更新也放大 2 倍;长期任务还会受到 $ \gamma$ 的折扣。数字核验:终止状态的 bootstrap 项为 0;\(0.5\times1=0.5\),\(0.5\times2=1\),代码与推导一致。
来源:../../第06章 - 机器学习/05. 强化学习.md
交卷前自查:25 题齐全;MSE 计算、决策树信息增益、Softmax+CCE、Adam 推导、Attention 缩放计算、L5 判断题均已覆盖;每个数字例均给出可复算路径;信息论单位已区分 bit/nat;跨章引用均为相对路径;未使用禁用词。
期望输出:reward=2: delta=2.000000, Q=1.000000