资讯详情 人工智能经典习题集及各章总结:知识漏洞驱动的考前复习
📅 2026/10/31 13:15:20
简介这份《人工智能经典习题集及各章总结期末考试必备》面向高校人工智能课程学习者和期末备考学生围绕概念梳理、章节复习与习题训练组织内容。资料以1个doc文档交付压缩包约2.19MB将各章小结与典型习题解答集中呈现便于按章节对照复习。内容覆盖人工智能发展历程、研究内容、三大研究学派与主要研究领域并延伸到知识表示中的谓词表示、产生式规则、框架表示和语义网络以及归结演绎推理、自然演绎推理、不确定与非单调推理等核心方法。通过绪论、知识表示、推理等部分的习题解析读者可对照题目理解求解思路梳理搜索技术、专家系统、机器学习、神经网络等知识点之间的联系。目前已有101人学习适合需要系统整理课堂重点、检查概念掌握程度并针对期末考试查漏补缺的学生使用。1. 习题集不是刷题量「人工智能经典习题集及各章总结」真正扫描的是知识漏洞考前两周翻开一本人工智能经典习题集第一章的名词解释一路顺下去翻到 EM 那一页突然卡住——这就是最典型的信号作业做对了不代表推得动。各章总结的价值也不在「再背一遍」而在于把散落在监督学习、评估方法、无监督、神经网络、强化学习里的概念压成一张能互相索引的地图让任何一个知识点都能被三个方向检索到它解决什么问题、它的假设是什么、它的算法步骤能不能手写出来。这套东西适合三类人正在准备期末复习的本科生、跨专业补基础的在职开发者、把课程内容当面试材料重新过一遍的工程师。能不能用得起来取决于你有没有把「看懂了」换成「写得出、跑得通、算得对」这三条硬标准而不是翻页数量。2. 拆解各章总结把六个主线方向对齐到可验证的知识点各章总结最容易写成目录抄写把标题抄一遍配两行定义合上本子什么也没留下。我在整理这类复习材料时会强制每一章只填三类内容——定义与假设、算法步骤、可验证的数值结论并且把这三类内容落到同一张表里。这样做的理由很实际期末题的失分点几乎全部集中在「假设被悄悄改掉」和「中间量算错」这两处而不是「没听说过这个名词」。2.1 每章只保留「定义—假设—算法」三个锚点先说清楚什么是锚点。以 PCA 为例定义是「寻找一组正交方向使数据投影后的方差最大等价于重构误差最小」假设是「方差大的方向承载更多信息且数据的主要结构是线性的」算法是「去均值 → 算协方差矩阵 → 特征分解 → 取前 k 个特征向量 → 投影」。这三句话必须能脱稿写出来而且顺序不能乱因为考试里让你证明「PCA 的最优投影方向是协方差矩阵的特征向量」时你依赖的正是定义里那句「方差最大」。再以逻辑回归为例定义是「用 sigmoid 把线性打分映射成概率用交叉熵做极大似然估计」假设是「对数几率是特征的线性函数」算法是「初始化 → 前向算概率 → 算梯度 → 更新」。注意这里的假设是可以被出题人动手脚的地方把对数几率改成二次项模型就不再是逻辑回归了但很多人答「还是逻辑回归只是特征变了」这就是典型的假设没抓住。三个锚点里定义决定你能不能答名词解释假设决定你能不能答判断题和证明题算法决定你能不能答计算题和设计题。我一般要求学生每一章至少能默写三个这样的三元组多写没用写不熟等于没写。2.2 一张对齐表核心概念、高频题型、手推重点、验证点放在同一行把六个主线方向列成行每一行填四列。这张表的作用不是背诵而是自查哪一行的「验证点」你写不出来就说明那一章的算法你只是记住了名字。主线方向核心概念高频题型手推重点代码验证点概率与数学基础期望、方差、贝叶斯公式、极大似然名词解释、概率计算极大似然求导、共轭先验用采样估计期望误差随样本量收敛监督学习基础线性回归、逻辑回归、正则化计算题、损失函数推导正规方程、交叉熵梯度闭式解与梯度下降结果一致模型评估与选择偏差方差、交叉验证、ROC/AUC简答、指标计算偏差方差分解、AUC 定义手算 AUC 与排序统计量一致无监督学习K-means、PCA、EM、GMM算法步骤、收敛性说明EM 的 ELBO 推导、K-means 目标迭代中目标函数单调不增神经网络链式法则、激活函数、softmax反向传播推导、梯度计算softmax 交叉熵梯度数值梯度与解析梯度对齐强化学习MDP、Bellman 方程、值迭代状态价值计算、策略比较Bellman 最优算子、压缩映射值迭代收敛到不动点填这张表有个技巧验证点这一列必须写成「可执行的一句话」比如「迭代中目标函数单调不增」可以直接变成三行代码去测如果写成「理解 K-means 的收敛性」那这一格就是空的。横向看这张表还能发现一个常见误区很多人把「模型评估」当成独立的一章去背指标公式实际上它和后面的每一章都咬合——你在无监督那一章答「用轮廓系数选 k」在神经网络那一章答「用验证集早停」本质上是同一套评估思路在两个场景的落地。复习时按行记答题时才能跨章调用。2.3 用一段 NumPy 代码把线性回归和 K-means 串起来表格填完接下来要让「算法」这一列落地。下面这段代码把两个最基础、也最容易被低估的算法放在一起跑线性回归用闭式解和梯度下降互相对照K-means 用来验证目标函数单调下降。它替代不了任何一道题但能让你在考场上写计算步骤时心里有底。import numpy as np rng np.random.default_rng(7) # ---------- 1) 线性回归闭式解 vs 梯度下降 ---------- n, d 200, 3 X rng.normal(size(n, d)) X np.c_[np.ones(n), X] # 补一列 1把截距吸收进权重 w_true np.array([0.5, 1.2, -0.8, 2.0]) y X w_true rng.normal(scale0.1, sizen) w_closed np.linalg.solve(X.T X, X.T y) # 正规方程避免显式求逆 w np.zeros(d 1) lr, epochs 0.05, 2000 # 学习率与迭代轮数见下方说明 for _ in range(epochs): grad 2.0 / n * X.T (X w - y) # 均方误差对 w 的梯度 w - lr * grad print(闭式解 :, np.round(w_closed, 4)) print(梯度下降 :, np.round(w, 4)) # ---------- 2) K-means目标函数是否单调不增 ---------- pts np.r_[rng.normal(0, 1, 50), rng.normal(6, 1, 50)] c np.array([-1.0, 3.0]) # 故意选偏观察迭代次数 sse_hist [] for it in range(20): label np.argmin((pts[:, None] - c[None, :]) ** 2, axis1) # 分配步 new_c np.array([pts[label k].mean() for k in range(2)]) # 更新步 sse sum(((pts[label k] - new_c[k]) ** 2).sum() for k in range(2)) sse_hist.append(sse) if np.allclose(new_c, c, atol1e-8): break c new_c print(K-means 中心:, np.round(c, 3), 迭代轮数:, it 1) print(SSE 序列单调不增:, all(sse_hist[i] sse_hist[i 1] for i in range(len(sse_hist) - 1)))逻辑说明第一段用正规方程给出解析最优解再用批量梯度下降逼近同一个解两者一致说明你对梯度推导没有写错符号。注意梯度前的系数2.0/n如果漏掉学习率需要整体改小这是计算题里最常见的符号与系数错误。第二段先做「分配」再做「更新」交替进行每一步都不会让平方误差和上升这正是 K-means 收敛性的证明骨架代码里的sse_hist就是把这个骨架变成可观测的序列。参数说明lr0.05是在特征已标准化、样本量 200 的前提下取的保守值如果特征量纲差距大先标准化再调学习率epochs2000只是上限真正的判据是相邻两轮权重变化的范数小于 1e-6。K-means 里初始中心选得偏迭代轮数会明显变多这解释了为什么作业题总让你比较不同初始化的结果——它收敛到的是局部最优不是全局最优。atol1e-8用来判定中心不再移动设得太大可能提前退出设得太小会白跑几轮。3. 手推公式的复现路径梯度、期望、KL 散度怎么写代码自证习题集里丢分最狠的一类题是「推导 计算」因为这两步的验证成本最高你写了一页纸却不知道中间哪一步错了。我的做法是凡是有梯度的公式一律用数值梯度反查凡是涉及概率分布的公式一律用构造的小分布算两遍。3.1 三个必须手推到底的公式第一个是极大似然到交叉熵。给定样本与模型输出概率对数似然取负就是交叉熵这个等价关系必须能一行行写出来包括为什么取对数把连乘变连加数值上避免下溢、为什么取负把最大化转成最小化。第二个是 softmax 加交叉熵的梯度。结论很干净梯度等于「预测概率减去 one-hot 标签」再乘上输入。但考试要的是过程你要写出 softmax 的雅可比矩阵再用链式法则消项。这个推导写不出来反向传播那一章的计算题基本无从下手。第三个是 KL 散度与最大似然的关系。最小化 KL 散度等价于最大化似然其中熵那一项与参数无关所以训练时只优化交叉熵。很多人背了结论被问「为什么不用优化熵」时就哑了。3.2 用中心差分做数值梯度校验步长、容差和失败判据数值梯度的中心差分形式是(f(xh) - f(x-h)) / (2h)误差是 O(h²)比前向差分稳。步长取 1e-5 左右比较合适太大截断误差抬头太小浮点相减丢有效位。判据不看绝对误差看相对误差|g_num - g_ana| / (|g_num| |g_ana| eps)的最大值低于 1e-6 视为通过。import numpy as np def softmax(z): z z - z.max(axis-1, keepdimsTrue) # 减最大值防 exp 溢出 e np.exp(z) return e / e.sum(axis-1, keepdimsTrue) def ce_loss(W, X, y_idx): p softmax(X W) return -np.log(p[np.arange(len(y_idx)), y_idx] 1e-12).mean() def numeric_grad(f, x, h1e-5): g np.zeros_like(x) it np.nditer(x, flags[multi_index]) while not it.finished: i it.multi_index old x[i] x[i] old h; fp f(x) x[i] old - h; fm f(x) x[i] old # 复原避免污染后续维度 g[i] (fp - fm) / (2 * h) it.iternext() return g def analytic_grad(W, X, y_idx): p softmax(X W) p[np.arange(len(y_idx)), y_idx] - 1 # softmax - onehot return X.T p / len(y_idx) rng np.random.default_rng(0) X rng.normal(size(6, 4)) W rng.normal(scale0.1, size(4, 3)) y_idx rng.integers(0, 3, size6) g_num numeric_grad(lambda w: ce_loss(w, X, y_idx), W.copy()) g_ana analytic_grad(W, X, y_idx) rel np.abs(g_num - g_ana) / (np.abs(g_num) np.abs(g_ana) 1e-12) print(最大相对误差:, rel.max())逻辑说明numeric_grad逐元素扰动权重矩阵每次只改一个位置、算两次损失、再复原得到的是同一个函数在这一点上的局部斜率。analytic_grad用的是你手推出来的结论。两者对上说明推导里的符号、转置、除以样本数都没有问题对不上先查转置维度再查是否漏了1/n最后查 softmax 是否沿正确的轴归一化。参数说明h1e-5是双精度下的经验值如果你用单精度或者损失值本身量级很小比如 1e-8需要把 h 放大到 1e-3 量级否则相减会丢精度。scale0.1初始化权重是为了让 softmax 输出接近均匀分布梯度量级适中权重太大会让概率饱和到 0 或 1数值梯度和解析梯度都接近零相对误差反而失去意义。这也是一个常被忽略的考点softmax 在极端输入下梯度消失。3.3 KL 散度与最大似然用两个小分布算两遍KL 散度不对称这一点必须用数字记住而不是用「KL 不是距离」这句话记住。取 p [0.7, 0.2, 0.1]q [0.5, 0.3, 0.2]分别算 KL(p‖q) 和 KL(q‖p)你会看到前者小于后者。这个差异在变分推断那类题目里会直接决定你写的是「前向 KL」还是「反向 KL」以及对应的「零强制」和「均值寻找」行为。import numpy as np p np.array([0.7, 0.2, 0.1]) q np.array([0.5, 0.3, 0.2]) kl_pq np.sum(p * np.log(p / q)) kl_qp np.sum(q * np.log(q / p)) print(KL(p||q) , round(kl_pq, 4)) print(KL(q||p) , round(kl_qp, 4)) print(非负性检查:, kl_pq 0 and kl_qp 0)逻辑说明p * np.log(p / q)逐项展开就是定义式直接照着公式写不要图省事写成np.sum(np.log(p/q))/len(p)那是把期望写成了平均是计算题里非常典型的错误。非负性检查用来看你有没有把方向写反——写反了结果还是正数但数值会变和标准答案对不上。参数说明两个分布必须归一化且每一项大于零否则 log 会出现负无穷工程里一般在分母加一个极小量考试里则要说明「假设所有取值的概率严格为正」。这也是一个可以主动写进答案的细节能体现你理解定义域。4. 五种题型的答题模板从名词解释到设计题怎么拿步骤分同一份习题集里的题分值分布差别很大名词解释两三分推导题十分往上设计题按点给分。用同一套写法应对所有题型结果通常是简单题写太多、大题写不完。4.1 名词解释与简答三句话结构第一句给定义用「是什么 输入输出」的形式第二句给作用说明它解决了什么问题、替代了什么第三句给边界说明它在什么条件下失效。以「过拟合」为例模型在训练集上误差低、在未见数据上误差高成因是模型容量相对数据量过大边界是它与「欠拟合」不是程度问题而是方向不同且在小样本、高维特征场景下更容易出现。三句话写完就停不要展开例子例子留给后面的题。简答题同理但可以把第三句换成「一个具体的判断依据」比如「看训练损失与验证损失的差距是否随训练持续扩大」。这句话是阅卷人最想看到的因为它证明你会用不只是会背。4.2 计算题把中间量写成表格留痕计算题失分很少是因为不会而是因为中间量没写。我的习惯是在草稿区先画一张三列表步骤、公式、数值。以逻辑回归的交叉熵计算为例第一行写线性打分第二行写 softmax 或 sigmoid第三行写损失第四行写梯度。每一行都保留四位小数最后统一判对错。步骤写什么占分点线性打分z Wx b 的具体数值是否写全偏置项激活sigmoid / softmax 的输入输出是否沿样本维归一化损失交叉熵定义式代入是否取负、是否平均梯度预测减标签是否乘输入、是否除样本数表格的用处是让你在时间紧张时按行检查而不是从头重算。真正上考场时不必画得这么整齐但中间量的数值必须留在卷面上。4.3 推导与证明从假设写到结论的三段式第一段写清前提数据独立同分布、参数空间是什么、优化目标是什么。第二段做变形每一步只做一件事取对数、交换求和与期望、配方写完一步在旁边注明依据。第三段收口明确写出「因此最优解为……」不要停在半路让阅卷人猜。以「最小二乘的闭式解」为例前提是设计矩阵列满秩中间对目标函数求导、令梯度为零、移项得到正规方程收口时补一句「当 XᵀX 可逆时解唯一」。最后这句是加分项因为它点出了假设的边界——列不满秩时要用伪逆或者正则化这个延伸很多人在设计题里还会再用一次。4.4 设计题先写评估口径再写模型设计题最容易写成「我选个神经网络因为它效果好」。正确顺序是先定义成功标准用什么指标、在什么数据划分下评估、基线是什么。然后再选模型并说明为什么这个模型适配数据的结构比如样本量小、特征稀疏、存在类别不平衡各自对应不同的处理。把评估口径写在前面还有一个实际好处后面模型部分的篇幅可以压缩因为评分点已经拿到了。反过来先写模型再补评估往往时间不够最后只剩一句「用准确率评估」在类别不平衡的场景里这一句基本等于自动放弃。5. 复习翻车排查五条现象、原因与解决办法复习过程中出错的方式高度重复下面五条是我见得最多的。5.1 公式与推导类的三种翻车现象一梯度推导写出来量纲对不上比如损失是标量梯度却是个向量加标量。原因多半是链式法则里漏了「对谁求导」的维度关系把矩阵乘法顺序写反。解决办法是先在纸上标出每个量的形状前向写一遍形状流反向对照着写最后用第 3 章的数值梯度做一次校验。现象二概率题里熵和交叉熵混用算出来数值总是差一截。原因是把「真实分布的熵」当成了常数项在求导时错误地保留了下来。解决办法是每次写 KL 或交叉熵时明确标出哪一项与参数无关无关项直接划掉不要带着走。现象三收敛性证明写成了「迭代会越来越好」。原因是没写出单调性的依据比如 K-means 的分配步和更新步各自不增。解决办法是背下这两步的证明骨架固定中心时按最近中心分配必然不增固定分配时取均值必然不增两步交替因此整体不增且有下界。5.2 代码与心态类的两种翻车现象四自己写的验证脚本和教材结论不一致于是怀疑教材。原因通常是随机种子没固定或者标准化做在了划分数据集之后造成信息泄漏。解决办法是先固定种子把所有预处理放进流程里用同一份数据跑两遍确认结果可复现再谈结论对错。现象五复习计划前几天很猛后几天全在刷已经会的章节。原因是缺少暴露弱点的机制只按舒服的顺序推进。解决办法是把第 2 章那张对齐表的「验证点」列当成唯一进度条写不出来的格子才安排时间写得出来的一律跳过哪怕它看起来很重要。6. 考前 72 小时把习题集压缩成一张可执行的检查表最后这段时间不该再刷题量而是做压缩。我一般分三轮每轮有明确产出物没有产出物就不算完成。6.1 三轮压缩法与验收标准时间窗任务产出物验收标准72h48h只回炉做过标记的错题一张错因分类表每道错题能归到「假设、公式、计算、表达」之一48h24h白纸默写六个主线方向的核心推导六页手写推导不看资料能在 8 分钟内推完一个24h开考过五种题型的答题模板一页纸公式与模板每个模板能说出第一句写什么第一轮的关键在分类不在重做。同一类错因出现三次以上说明它不是粗心而是概念缺口这时候才值得回到第 2 章的对齐表去补那一行。第二轮的默写要用空白纸允许卡住但卡住之后必须当场推完不要翻答案再「哦我懂了」那是最容易骗自己的环节。第三轮只做减法把一页纸压到半页压不下去说明你还在靠记忆而不是靠结构。有个具体技巧把手写推导拍下来隔两小时再默写一遍对比两版的差异位置。差异点往往就是你在考场上会卡住的地方比任何押题都准。血泪经验是我曾经把三轮时间全花在第一轮错题重做了三遍结果考场上遇到一道需要现场推 softmax 雅可比的题笔停在那里十分钟——那十分钟本来是可以提前用一次空白纸默写换来的。现在我自己带人复习只看一个指标能不能在没人提示的情况下把「定义—假设—算法—验证」四件事对同一个知识点讲完整。讲不完整的地方就是还需要投入的地方讲得完整的地方哪怕它出现在目录最显眼的位置也可以放心跳过。希望帮到你。本文还有配套的精品资源点击获取