大家复习人工智能导论之前,先想明白一件事:这门课不是靠背就能过的,但更不是靠“感觉会了”就能拿分的。我是湖南科技大学大三下选的这门课,期中考试前一周才真正进入状态,后来发现,只要把考点拆成几条主线,配合手算、画图、默写这一步一步的功夫,两小时的机考完全来得及。这篇笔记就是我当时整理的思路,从考点分布到每类题型的固定解法,再到我踩过的坑,一次性讲清楚,希望能帮你少走弯路。
这篇内容适合谁?正在准备人工智能导论期中考试的同学,尤其是不清楚老师出题风格、不知道从何下手、或者前面几周听课稀里糊涂的。哪怕是零基础的文科背景转过来的,只要按这篇笔记的节奏走,把搜索、知识表示、推理、机器学习基础这几块吃透,期中拿个不错的分数并不难。
1. 先摸清这门课的考试脾气:考点分布与复习策略
1.1 从课程大纲倒推期中考点
人工智能导论这门课内容跨度很大,从搜索策略到知识表示,从谓词逻辑到机器学习基础,老师半个学期讲下来,基本都是“广度优先”模式。但期中考试考什么,其实是有规律的。我当时把老师的课件目录和课后习题标了一遍,最终锁定了四个必考区域:搜索策略、知识表示、确定性推理、机器学习基础。
搜索策略这块,盲目搜索和启发式搜索几乎年年考,A*算法常年占据一个大题的位置,而且通常会让你手算open表、closed表的变化过程。知识表示相对友好一些,产生式、语义网络、框架这三种表示方法,考的是“给你一个场景,选合适的表示方法并画出来”。推理部分重点在谓词逻辑和归结原理,很多时候是给几个谓词公式,让你化简成子句集,再做归结。机器学习基础考得比较浅,但决策树、朴素贝叶斯、KNN这几个经典模型要能手工算,特别容易出计算题。
1.2 复习资料只抓这三样就够
很多同学复习的时候喜欢把整本书从头啃到尾,实际效率很低。我身边那些考得不错的同学,资料都很精简:课件PPT、课后习题答案、加上老师专门列的重点复习题,就这三样。课件PPT是考试范围的最准依据,题目的截图我都是直接复现原图,自己动手再做一遍,这比看“例题讲解”有效得多。
这里要特别提醒一点:如果老师用的是自己学校的平台发布课件,重点内容一般在“章节小结”和“思考题”里,这些地方往往会变成考试原题或变体。我是把课后题全做了一遍,又把课件里标注“重要”“必考”的点单独抄在一张A4纸上,考前反复默写。事实证明,这个动作至少帮我拿到了30分的“稳分”。
2. 搜索策略:不只是画图,还要会证明为什么
2.1 盲目搜索的画图与判优
盲目搜索是AI搜索引擎的开胃菜,主要考深度优先和广度优先。很多同学会觉得“这就是树的遍历嘛”,但实际上课和考试的侧重点完全不同。考试要求你画出完整的状态空间树,并写出节点的扩展顺序。
深度优先搜索的关键是“一条路走到黑,不行再回头”。考试里给定一个图,起点和终点标注好,你按DFS规则扩展节点,然后把访问序列写出来。这里容易出错的地方有两个:一是遇到多个可选邻接点时按什么顺序选,题目一般会说明“按节点编号从小到大”,但如果你没注意这个约定,顺序就全错了;二是何时判断到达目标,如果目标是某个深层节点,DFS可能先探很多死胡同才找到它,这时候扩展顺序写起来特别长,容易漏写。
广度优先搜索的核心则是“逐层扩展”。它一定会找到最短路径,所以考试经常问你“用BFS找到的路径是什么”。我实测下来,画状态空间树的时候,每一层节点写齐了,再标出目标节点的第一次出现位置,后面再出现的同名节点就不用管了。这样既能拿全扩展顺序的分,又能拿路径长度判断的分。
2.2 A*算法:从手算到证明完备性
A算法可以说是期中考试最大的分水岭。会算的人觉得它就是个带启发值的Dijkstra,不会算的人看半天不知道open表里的节点到底留谁删谁。我复习的时候总结了A手算的固定套路:初始节点放入open表,每次从open表里选f(n)=g(n)+h(n)最小的节点扩展,生成后继节点时,如果新路径的g值更小就更新,否则忽略,扩展完的节点放入closed表。
为了把这个过程练熟,我用了一个经典题目——八数码问题。从初始状态用A*搜索到目标状态,每一步算g、h、f值,写出open表、closed表的变化。这个题我重复做了三遍,第一遍对照答案,第二遍默写,第三遍限时15分钟完成。考场上看到类似的题目,10分钟之内就能写完整。
另一个容易被问到的点是A的性质。老师可能不给一个具体的图,而是问“为什么A算法在h(n)可采纳(即h(n)不超过真实代价)时能找到最优解”。当时我用的解释是两层递推:因为h值低估了实际代价,所以f值是真实代价的下界;当下一个要扩展的节点是目标节点时,它的f值就是真实代价,而所有未扩展节点的f值都更大,不可能是更优解。这个推理逻辑很顺,写答案的时候只要把两步表达清楚,基本就能拿到全分。
2.3 对抗搜索:极大极小与α-β剪枝的考场计算
期中考试如果出了博弈树相关题目,通常不会太复杂。我复习时主要练的是给定一棵博弈树,用极大极小值算法给每个节点标注值,再用α-β剪枝标出哪些分支可以被剪掉。
做这类题有个关键点:画博弈树时,MAX层取子节点最大值,MIN层取子节点最小值。α-β剪枝的规则很多人背不熟,我提供一个笨但管用的记忆方式:α值是当前MAX节点能找到的“保底下限”,β值是当前MIN节点能压到的“封顶上限”,一旦某个节点的值超出了父节点已经确定的区间,就立即停止搜索这个分支。考场上只要把这个区间判断写明白,剪枝题基本不丢分。
我踩过的坑是:剪枝判断时把“>”和“>=”搞混。一些教材中,当右边界值等于父节点的α值时,也可以剪枝,但有些版本要求严格大于。考试前一定要问清楚老师采用哪种定义,否则一整道大题全错。
3. 知识表示与推理:送分题里也有坑
3.1 五种知识表示方法怎么选
知识表示这一章,期中考试基本不会让你“默写定义”,而是给你一个场景,让你选择合适的方法并画出表示图。考试频率最高的三个:产生式规则、语义网络、框架表示。
产生式规则就是IF-THEN结构,用在医疗诊断、故障排查这类场景特别合适。画的时候注意把所有条件和结论分开,“IF(条件1)AND(条件2)THEN(结论)”,考试时经常要求你把自然语言描述转写成这种规则,这时候别漏条件,因果关系用文字连起来,得分点就到了。
语义网络用节点表示概念、实体或属性,用带标注的边表示关系。这种题的迷惑点在于:关系类型别乱造。是”属于“就写is-a,是”拥有“就写has,是”是一种“就写kind-of。宁可全用英文标准关系词,也别用中文“是一种”这种口语化表达,因为阅卷时标准答案用的基本是英文或教材约定俗成的写法。
框架表示其实是更结构化的知识组织方式,用“槽位”和“侧面值”来描述一个对象。考试一般会给你一个具体场景,让你列出框架名、槽名、侧面值、继承关系。我当时复习的时候特意把课本里的“学生框架”例子默写了一遍,重点理解“默认值”和“继承值”的区别,这两个概念在选择题里也是常客。
3.2 谓词逻辑与归结推理的固定套路
谓词逻辑部分,考试重点有三个:谓词公式的翻译、子句集的化简、归结原理证明。这三个技能是逐层递进的,不会化简子句集,归结证明就无从谈起。
命题翻译相对简单,就是自然语言“翻译”成谓词表达式,注意全称量词和存在量词的先后顺序。比如“所有人都会死”,要写成∀x(Man(x)→Mortal(x)),这里蕴含符号不能写反,写反了就变成“所有人不死”,完全错误。尤其是带多个量词的句子,比如“每个学生都选修至少一门课程”,主范式是∀x(Student(x)→∃y(Course(y)∧Select(x,y))),量词顺序错了就是零分。
化简子句集是重头戏。我的操作顺序是:消蕴含、否定深入、变量标准化、消存在量词(Skolem化)、消全称量词、化前束合取范式、去掉合取词、换变量名。这八步每一步都有固定套路,考试时能写多细就写多细,每步一个箭头往下推,阅卷老师只看关键转换对不对,所以中间步骤尽量不要跳。
归结证明的核心思想是反证法:把结论的否定加入前提集合,然后反复做归结,直到推出空子句。我当时练了一道经典“动物分类”的题,就是把“猫是哺乳动物”“哺乳动物有皮毛”“如果有皮毛则它哺乳后代”这些规则写成子句,再证明“猫有皮毛且哺乳后代”。归结的顺序选得好,两步就能出空子句,顺序选得差,要绕一大圈。这个只能靠多练几道题找手感。
4. 机器学习基石:决策树、贝叶斯与KNN的手算得分点
4.1 决策树ID3:信息增益计算的考场步骤
机器学习基础部分是期中考试后半程的重点,其中决策树ID3算法的计算题出场率极高。考场上的典型题目是给一个小型数据集,包含几个样本和几个属性,让你算每个属性的信息增益,并选定根节点、画出一层决策树。
计算信息增益的固定流程是:先算总数据集的熵,再按每个属性的取值把数据划分成子集,分别算条件熵,二者相减就是信息增益。公式长这样: Entropy(S)=-∑p_i·log₂(p_i) Gain(S,A)=Entropy(S)-∑(|S_v|/|S|)·Entropy(S_v)
这里最容易丢分的是log₂的计算。考场上不可能用计算器,所以你得熟练掌握简单数值的对数估算。比如数据分的类别比例是0.5和0.5,信息熵就是1;比例是0.25和0.75,信息熵约等于0.811。这几个常见的熵值最好提前背下来,我备考时整理过一张表:两个类别时,熵值从0到1之间变化,0/1组合熵为0,0.5/0.5组合熵为1,0.25/0.75约0.811,0.1/0.9约0.469。把这些值背熟,计算速度至少快一倍。
4.2 朴素贝叶斯与KNN:边界情况和判题陷阱
朴素贝叶斯考的是给一组训练数据,预测新样本的类别。解题套路就是贝叶斯定理:P(类别|特征)=P(特征|类别)·P(类别)/P(特征),因为分母对所有类别都一样,比较分子大小即可。做这类题时,最怕的数据情况是“特征在某个类别下出现次数为0”,此时概率直接变成0,会让整个乘积归零,导致结论不合理。
应付“零概率”的常见方案是拉普拉斯平滑。公式是P(特征|类别)=(count(特征,类别)+1)/(count(类别)+类别取值数)。这个方法的名字不一定在课上学过,但考试如果直接给一个含零次出现的数据表,你就得想到给频数加1再算。我当时就把“平滑”这个动作写在最显眼的位置提醒自己:一旦看到任何分母或分子出现0,就启用拉普拉斯修正。
KNN的题目通常比较简单,给你几个样本点,每个点带标签,再给你一个待预测点,问k=3或k=5时分类结果是什么。考试的坑有两个:一是距离公式,欧氏距离需要开根号,但如果你只比较大小不展示开根后的数值,部分老师不给分,所以我建议写成根号形式再化简;二是平票情况,如果k=5时两类票数相等,不同教材处理方式不同,必须有明确的破平规则(比如按距离最近者优先),考前最好跟同学确认老师的判卷标准。
4.3 手写感知机与聚类:把公式翻译成步骤
感知机如果出现在期中考卷里,一般是以“迭代更新权重”的形式出现。给定初始权重和学习率,要求你按训练样本迭代一轮或两轮,写出每次更新的权重值。感知机的更新规则是:如果预测错误,在错误方向上调整权重,w=w+η·(y-y_pred)·x,b=b+η·(y-y_pred)。
做这种题时,我看过好多同学栽在符号上:y_pred是“预测标签”,取值是1或-1,而不是0或1。如果按0/1逻辑代入错误符号,后面全乱。另外学习率很小(比如0.1)时,两轮迭代权重变化很小,这很正常,千万别以为自己算错了。
K-means聚类在期中出题也不少见,通常是给一些二维坐标点,要求按k=2进行一轮或两轮迭代。套路是先随机选两个点作为初始聚类中心,计算每个点到两个中心的欧氏距离,把它归入距离更近的那一类,然后重新计算质心。做这种题,第一轮质心一定是坐标的算术平均值,写成分数形式就能保留精度,不要提前四舍五入,否则第二轮距离计算就有误差,越差越多。
5. 常见考场翻车现场与避坑实录
5.1 画图题的隐性扣分点
画图题在外面看来是送分题,但实际扣分率不低。我复盘过自己和身边同学的失分情况,发现几个共性原因:画了图但没标箭头方向,产生式规则的圈和框用了不同形状但没有图例说明,语义网络里关系名写得过于口语化,框架表示里漏写了继承关系。这些细节看似小,但每题扣个2到3分,加在一起就影响总评了。
我的对策是:考前专门花半小时练画三类图,每一类都按“规范版”画。规范版的定义是:节点要有名称,边要有标签,层次结构要体现继承关系。考试时宁可画慢一点,也要保证一套逻辑闭环,因为老师阅卷看的不是“好看”,而是“完整”。
另外,有些机考系统是直接在网页上做图,不支持手写,这时候更要提前练一下在线画图工具的快捷键。我考试用的系统支持拖拽节点和连线,但如果你不熟悉操作,光画一个语义网络就花15分钟,后面大题的时间就极度压缩。有条件的话,考前找同学搭个模拟环境,哪怕用白板软件练一遍也好。
5.2 概念题与计算题的常见失误速查
我在复习后期整理了一份“错题画像”,把小伙伴们最容易错的题目类型和对应解决办法列成了速查表。下面就是我当时贴在电脑前的备忘,今天直接分享出来:
| 题型 | 常见失误 | 解决办法 |
|---|---|---|
| 搜索题 | 邻接点扩展顺序自上而下随意选 | 按字典序或编号从小到大扩展并写明约定 |
| A*计算 | 忘记更新已存在open表中的节点 | 每次扩展后重算f值,若更小则替换 |
| α-β剪枝 | 剪枝条件写成大于而不是大于等于 | 考前确认教材定义,保持一致 |
| 子句化简 | Skolem化时忽略了存在量词位置 | 先写全称、存在的次序,再逐层Skolem |
| 贝叶斯 | 特征出现0次直接判为不可能 | 使用拉普拉斯平滑,频率加1 |
| KNN | 距离只比较大小而未写计算过程 | 保留根号并化简,写完整公式 |
| 感知机 | 预测标签写成0/1而非1/-1 | 明确当前y∈{1,-1},按符号判断 |
| K-means | 质心取整导致后续距离偏差 | 用分数表示质心,最后再约简 |
当时我还给自己定了一条规矩:计算题不管多简单,一律写出公式再代入数值。这个习惯救了我好几次,因为机考系统按步骤给分,公式写对至少拿一半分,数值算错只扣那一步的分,总比一整道题零分强。
6. 考前3天冲刺计划与考场时间分配
6.1 最后一轮复习做什么
如果现在离考试只剩三天,别再从头刷视频课了,性价比最高的方案是做题加默写。我当时的安排是:第一天专攻搜索与对抗搜索,把BFS、DFS、A*、α-β四类题各做两道;第二天专攻知识表示和推理,画两遍语义网络,化三个子句集,做两道归结证明;第三天主刷机器学习计算题,决策树算一棵、贝叶斯算两遍、KNN和K-means各做一题,同时把前面整理的速查表从头到尾背一遍。
这三天还有一个每日必做的动作:早上用15分钟默写五大知识表示方法的框架、A*算法流程、α-β剪枝步骤、子句化简八步、信息增益公式、贝叶斯公式。这些东西不是“看会了”就完了,一定要写到纸上,因为考场上时间紧张,如果你的手比脑子快,你就赢了一半。
6.2 两小时机考的时间分配方案
我考的那场是两小时机考,总共十来个题,含单选、判断、填空和大题。我的实际时间分配是:单选判断填空控制在25分钟以内,大题按分值分配时间,每道大题至少留10~15分钟。搜索类和机器学习算要动手画图、计算的题,优先做;概念类、叙述类的题放最后答,因为可以边打边想,不容易卡住。
这里分享一个考场小技巧:打开试卷后先用3分钟快速浏览全部题目,把每道题的分值和难易程度标在草稿纸上,然后按“先熟后生、先算后述”的顺序作答。我那次考试,A*大题就在最后一道,分值很高,很多同学从头做到尾时间不够,最后草草写几行就交卷了。我因为提前浏览,直接跳到最后先做这道15分的大题,保住了最重要的分数。这个小习惯,建议所有同学都试试。
还有一点要记得:机考系统一般有自动保存,但不同学校的系统偶尔抽风,我在前一次其他课的机考中就遇到过提交后没保存成功的情况。所以每做完一题,我就习惯性点一次保存,考完前再检查一遍“已提交题目数”是否与试卷总题数一致。多花两分钟,买一份安心,这个买卖很划算。
最后再说一个实操层面的体会:人工智能导论的门槛不在智商,而在“能不能把抽象算法落到笔头”。我见过很多同学上课一听就懂,但一画状态空间树就手忙脚乱,一算信息增益就数字乱飞。这门课的期中考试,检验的恰恰是这些“手头功夫”。只要你把本文梳理的几条主线练熟,考场上心态稳住,时间分配合理,考出理想成绩是水到渠成的事。