ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

AI入门复习:打通符号推理与神经网络主线

AI入门复习:打通符号推理与神经网络主线

AI入门这门课有个很别扭的地方:前半学期讲符号推理,一堆谓词逻辑、归结原理、启发式搜索,感觉像在学离散数学;后半学期突然切到神经网络,画风变成矩阵求导和调参。很多同学复习的时候直接把这两块当成两门课分别背,结果一到综合题或者面试现场被问“知识图谱和神经网络怎么结合”,脑子就空了。这篇笔记就是为这件事写的——把符号推理和神经网络这条从规则到学习的主线打通,整理成一份能直接照着复习的系统化笔记。

不管你是正在准备期末、考研复试,还是想给面试补基础,这份内容都能用。它不讲空泛的“AI发展史”,只讲这门课真正会考、真正会被追问的东西:逻辑怎么翻译成公式、搜索算法的启发函数怎么凑、反向传播的梯度怎么一层层倒推、学习率为什么那么难调。我会按知识地图、符号推理、神经网络、两者的衔接、执行方案、踩坑记录六块来讲,中间穿插可以直接抄走的计算过程和参数选择理由。

1. 先搞清楚这门课到底在教什么:知识地图与复习优先级

复习最怕的反而是打开课件从头翻。AI入门课的教材一般有十几章,从智能体、搜索、逻辑、规划一路写到机器学习、神经网络、强化学习,如果按目录顺序平推,时间一定不够,而且前面几章的公式会挤占掉后面真正高频的考点。我自己的做法是先做一张知识地图,把整门课压缩成两张网,再决定每张网投多少时间。

1.1 两条主线:符号主义与连接主义的分野

这门课的结构其实非常清晰,就是两条技术路线的对照。第一条是符号主义,核心假设是“智能等于符号操作”,知识用显式的规则、逻辑公式、图结构表示,推理靠搜索和演绎完成。典型内容包括:状态空间搜索(BFS、DFS、一致代价、A*)、对抗搜索(极小极大、Alpha-Beta剪枝)、命题逻辑与一阶谓词逻辑、归结原理、知识表示、专家系统。这条线的题目特点是过程可手推、答案唯一、给分点明确,属于“练了就稳拿”的部分。

第二条是连接主义,核心假设是“智能涌现于大量简单单元的连接”,知识不显式存储,而是分布在权重里,学习靠梯度下降调整参数。典型内容包括:感知机、多层前馈网络、激活函数、损失函数、反向传播、优化器、正则化、卷积网络的基本概念。这条线的题目特点是公式推导加数值计算,考的是链式法则熟不熟、维度对不对、参数更新一步会不会算错。

这两条线不是割裂的。符号线解决的是“已知规则怎么推出结论”,连接线解决的是“规则不知道、只给数据怎么学出来”。把这句话记住,后面所有章节都能挂上去。我复习时会在笔记本第一页画一个两列的表,左边写“需要人告诉机器规则”,右边写“机器自己从数据里找规律”,每学完一章就把新知识点归到对应列里,一个月下来整门课的骨架就很清楚了。

1.2 复习优先级怎么排:按考点权重和依赖关系倒推

优先级不能凭感觉排,得看两个维度:一是这类题在卷面里的分值占比,二是这个知识点是不是后面内容的前置。前置知识没打通,后面复习就是白费时间。

我的排序逻辑是这样的:搜索算法和逻辑归结属于高权重低依赖,优先啃透,因为它们自成体系,练几道题就能拿分;反向传播属于高权重高依赖,必须先把前向传播、激活函数、损失函数搞明白再动手,否则推一半就卡住;知识表示、专家系统这类偏叙述的章节放在最后,用记忆卡片过一遍关键词即可;强化学习、卷积网络这种如果课时少,就只抓核心公式和典型应用场景,不要陷进细节。

模块卷面权重(典型)前置依赖建议时间占比
状态空间搜索与A*高无20%
逻辑与归结高无20%
神经网络前向与反向高微积分链式法则30%
机器学习基础概念中概率统计10%
知识表示与专家系统低逻辑8%
拓展章节(CNN、RL等)中低神经网络12%

这张表不是死的,你得按自己老师的出题风格调整。判断方法很土但有效:翻三套往年题,数一数每个模块出现的次数和分值,把数字填进表里,权重自然就出来了。我带过一个学弟,他花了两周死磕专家系统的产生式规则匹配,结果那部分只考了一道两分的填空题,而反向传播占了整整二十分。这种时间分配的错误,比不复习还伤。

注意:不要用“章节页数”来估算权重。教材里讲搜索的篇幅往往比讲神经网络的长,但考题密度完全相反,神经网络那几页公式才是真正的高产考点区。

2. 符号推理部分:从谓词逻辑到搜索与规划

符号推理这块内容看着抽象,其实规则的颗粒度很粗,只要把几个固定套路练熟,题目就变成机械操作。我把它拆成三块:逻辑表达式怎么写、结论怎么推、状态怎么搜。这三块的顺序不能乱,逻辑是语言,归结是推演引擎,搜索是在状态空间里找路径,后两者都要用前者的表达方式。

2.1 谓词逻辑:把自然语言翻译成公式的三个固定动作

谓词逻辑题的错误,九成出在翻译阶段,公式写错了后面全废。我总结了一个三步走的方法,几乎所有教材例题都能套。

第一步,圈出量词范围。看到“所有”“每一个”“存在”这类词,先确定它管到哪一句结束。中文的一句话里经常塞两个量词,比如“每个学生都有一门喜欢的课”,这里的“每个”管的是学生,“一门”管的是课程,两个量词的嵌套顺序直接决定公式含义。

第二步,确定主连接词。全称量词后面跟蕴含,存在量词后面跟合取,这是硬规则。∀x(Student(x) → ...),∃x(Student(x) ∧ ...)。为什么这么规定?因为全称说的是“如果是学生,那么就怎样”,蕴含正好表达条件;存在说的是“存在一个东西,它既是学生又怎样”,必须用合取把两个性质同时按在同一个对象上。如果写成∀x(Student(x) ∧ Loves(x, y)),意思就变成了“世界上所有东西都是学生且都爱y”,完全跑偏。

第三步,检查自由变量。公式里每个变量要么被量词约束,要么是自由变量,写完之后逐个过一遍。考试里最常见的扣分点就是漏写一个量词,导致变量悬空。

举个完整例子:“所有会编程的人都能学会这门课,A同学会编程,所以A同学能学会这门课。”翻译成:

∀x (Programmer(x) → CanLearn(x)) Programmer(A) 结论:CanLearn(A)

翻译完之后一定要反向读一遍:把公式用中文念出来,看是不是原句的意思。这个动作花十秒,能救回大量低级错误。

2.2 归结原理:手推证明的标准流程与提速技巧

归结原理考的是“能不能用机械化方式证明结论”。流程固定:把前提和结论的否定全部化成子句集,然后两两归结,直到推出空子句。听起来简单,实际上手容易乱,因为子句一多就不知道先消哪一对。

化成子句集有四步,我按操作顺序写:消去蕴含(A→B 换成 ¬A∨B)、把否定符号内移(用德摩根律和量词否定规则)、变量标准化(不同量词的变量换不同名字,避免混淆)、消去存在量词(用Skolem常量或Skolem函数)、丢掉全称量词、最后拆成合取范式的一堆子句。存在量词那一步是重灾区,如果存在量词在多个全称量词作用域内,Skolem化要写成函数,比如∀x∃y Loves(x,y) 要变成 ∀x Loves(x, f(x)),f是Skolem函数,不是常量。

举个经典的三段论手推:

子句1:¬Man(x) ∨ Mortal(x) 子句2:Man(Socrates) 子句3:¬Mortal(Socrates) (结论的否定)

子句1和子句2归结,x取Socrates,得到 Mortal(Socrates);再和子句3归结,得到空子句,证明完成。

提速技巧有两个。一是优先消短子句,单文字子句(单元子句)是黄金搭档,因为它只能和含有相反文字的子句配对,选择面窄,不容易走岔。二是优先消结论否定里的文字,这样能保证每一步都朝着目标推进,而不是在做无用功。我练习时会在子句旁边标记“已用”,避免反复纠结同一对。

提示:归结过程中出现重言式(比如 P∨¬P)可以直接删掉,它不贡献任何信息,留着只会让搜索空间爆炸。

2.3 搜索算法:从盲目搜索到A*的启发式设计

搜索是这门课最“工科”的部分,也是最好拿分的部分。核心就一句话:在状态空间里找一条从初始状态到目标状态的路径,区别只在于按什么顺序扩展节点。

盲目搜索里,广度优先保证最优但内存吃紧,深度优先省内存但不保证最优还可能死循环,一致代价搜索按路径代价扩展,适合边权不同的图。这三个的时间复杂度、空间复杂度、完备性、最优性必须能背成一张表,选择题特别爱考。

真正的大头是A*算法。它的评价函数是 f(n) = g(n) + h(n),g是起点到n的实际代价,h是n到终点的估计代价。A*能不能找到最优解,取决于启发函数h的性质:可采纳性(h永远不高估真实代价)保证最优,一致性(h(n) ≤ c(n,n') + h(n'),即三角不等式)保证不会重复扩展节点。

手算A*的题目一定要把表列出来,光在图上画容易漏。表格列四栏:节点、g值、h值、f值,每扩展一个节点就更新邻居的g值,如果新路径更短就更新父节点指针。举个例子,网格地图上从左上角走到右下角,只能上下左右走,h用曼哈顿距离|x1-x2|+|y1-y2|,这个h是可采纳的,因为绕障碍只会让实际路径更长,不会更短。

启发函数怎么设计?常见套路有三种:网格地图用曼哈顿距离或欧氏距离,八数码问题用错位棋子数或曼哈顿距离之和,路径规划用直线距离。设计时问自己一句:这个估计值会不会超过真实剩余代价?会,就不能用;不会,就至少保证了可采纳。

2.4 对抗搜索与剪枝:Alpha-Beta到底省了多少

极小极大搜索配合Alpha-Beta剪枝,是另一类高频计算题。原理不复杂:MAX层选最大值,MIN层选最小值,Alpha记录MAX当前能保证的下界,Beta记录MIN当前能保证的上界,一旦Alpha ≥ Beta 就剪掉后面的分支。

真正要练的是剪枝位置的判断。考试常给一棵博弈树,让你标出哪些节点被剪掉。我的经验是从左到右按深度优先顺序遍历,每到一个节点就更新祖先传下来的α或β,判断条件是“当前节点的α是否大于等于β”。一定要理解剪枝只影响“不被访问”,不影响最终根节点的值,很多人算完剪枝后把根节点的值也改了,这是典型错误。

剪枝的效率取决于着法排序。最理想的情况下,每层节点按最优优先排序,复杂度从 b^d 降到 b^(d/2),相当于同样时间内能搜两倍的深度。这也是为什么实际工程里棋类程序都要做走法排序——不是理论洁癖,是真的能省一半算力。

3. 神经网络部分:从感知机到反向传播

神经网络这块的学习曲线陡,是因为它要求你把微积分、线性代数和编程思维同时调动起来。但它内部的逻辑其实很线性:前向传播算预测,损失函数量误差,反向传播求梯度,优化器更新参数,四步循环。把这四步拆开各个击破,比抱着公式硬啃高效得多。

3.1 感知机与激活函数:为什么必须有非线性

感知机是最简单的神经元,输出是阶跃函数:输入加权和大于阈值输出1,否则输出0。它的局限是只能解决线性可分问题,异或问题直接卡死。这个结论一定要能自己画图说明:异或的正负样本在二维平面上交叉分布,任何一条直线都分不开。

解决办法是引入激活函数和多层结构。这里有个关键理解:如果只有多层线性变换而没有非线性激活,多层网络等价于一层,因为矩阵乘法的复合还是矩阵乘法。这个证明面试常问,写法是把两层写成 W2(W1x) = (W2W1)x,W2W1 仍是一个矩阵。

常用激活函数要能说出特点和导数:

激活函数表达式导数主要问题
Sigmoid1/(1+e^-z)σ(1-σ)饱和区梯度趋零,输出非零均值
Tanh(e^z-e^-z)/(e^z+e^-z)1-tanh²仍有饱和问题,但零均值
ReLUmax(0, z)z>0取1,否则0负区死亡,输出非零均值
Leaky ReLUmax(αz, z)z>0取1,否则α需要调α

Sigmoid的导数有个很好用的性质:σ' = σ(1-σ),直接用前向算出的输出就能求导,不用重新计算指数。这个性质在手推题里能省大量时间,必须记牢。

3.2 前向传播:维度对齐是唯一要盯的事

前向传播本身没有难度,难的是维度不能错。一层网络的计算是 z = Wx + b,其中 W 的形状是(输出维度,输入维度),x 是(输入维度,1),b 是(输出维度,1)。批处理时 x 变成(输入维度,batch),Wx 变成(输出维度,batch)。

我手推题的习惯是先写形状,再代数字。比如输入3维、隐藏层4个神经元、输出1维,那么 W1 是 4×3,b1 是 4×1,W2 是 1×4,b2 是 1×1。先把这四个形状写出来,再往里面填数,几乎不会错。

数值例子:x = [1, 0.5],W1 = [[0.2, -0.1], [0.4, 0.3]],b1 = [0.1, -0.2],激活用Sigmoid。第一层:

z1_1 = 0.2*1 + (-0.1)*0.5 + 0.1 = 0.25 z1_2 = 0.4*1 + 0.3*0.5 + (-0.2) = 0.15 h = [σ(0.25), σ(0.15)] ≈ [0.5622, 0.5374]

第二层权重 W2 = [0.6, -0.5],b2 = 0.05:z2 = 0.6*0.5622 + (-0.5)*0.5374 + 0.05 ≈ 0.1186,输出 σ(0.1186) ≈ 0.5296。整个过程就是乘加再套函数,耐心一点就行。

注意:手推时中间结果保留四位小数就够了,保留太多位数反而容易在最后一步算错,而且考试时间有限。

3.3 反向传播:一层层倒着推的链式法则

反向传播是整个课程里最容易让人放弃的部分,但只要抓住“误差怎么往回传”这一条主线,其实逻辑非常工整。核心公式只有两个:输出层的误差项 δ = ∂L/∂z,隐藏层的误差项 δ_prev = (W^T δ) ⊙ f'(z_prev)。这里 ⊙ 是逐元素乘,f' 是激活函数导数。

我把手推流程固定成五步,按顺序做基本不会乱:

  1. 前向算出每层的 z 和激活值 a,全部记下来;
  2. 选损失函数,算输出层误差 δ_out;
  3. 用 δ_out 算输出层权重的梯度 ∂L/∂W = δ_out · a_prev^T;
  4. 把误差回传到隐藏层,得到 δ_hidden;
  5. 用 δ_hidden 算隐藏层权重梯度。

举个完整的两层例子,损失用均方误差 L = 0.5(ŷ - y)²,方便手算。输入 x = 1,W1 = 0.5,b1 = 0,隐藏层用Sigmoid,W2 = 1.2,b2 = 0,目标 y = 1。

前向:z1 = 0.5,h = σ(0.5) = 0.6225;z2 = 1.2 × 0.6225 = 0.747,ŷ = σ(0.747) = 0.6785;L = 0.5 × (1 - 0.6785)² ≈ 0.0517。

反向:∂L/∂ŷ = ŷ - y = -0.3215;∂ŷ/∂z2 = ŷ(1-ŷ) = 0.6785 × 0.3215 ≈ 0.2182;δ2 = -0.3215 × 0.2182 ≈ -0.0702。

输出层权重梯度:∂L/∂W2 = δ2 × h = -0.0702 × 0.6225 ≈ -0.0437。

回传隐藏层:δ1 = δ2 × W2 × h(1-h) = -0.0702 × 1.2 × 0.6225 × 0.3775 ≈ -0.0198。

隐藏层权重梯度:∂L/∂W1 = δ1 × x = -0.0198。

取学习率 0.5:W2 ← 1.2 - 0.5 × (-0.0437) = 1.2219;W1 ← 0.5 - 0.5 × (-0.0198) = 0.5099。可以看到两个权重都变大了,因为预测值低于目标值,增大权重能让输出更接近1,方向和直觉一致。

这个例子的每一个数字我都建议你亲手算一遍,特别是 δ1 里那个 W2 的位置——它必须是更新前的前向权重,不能先用新权重算,这是手推题最常见的顺序错误。

3.4 损失函数与优化器:为什么分类不用均方误差

损失函数的选择不是随便挑的,它要和输出层的激活函数搭配。回归问题用均方误差配线性输出,二分类用二元交叉熵配Sigmoid,多分类用交叉熵配Softmax。这个搭配关系背后有数学原因:当Sigmoid或Softmax配上交叉熵时,梯度里那个讨厌的 σ' 会被约掉,最终 ∂L/∂z 简化成 ŷ - y,既干净又不会在饱和区把梯度压没。

如果硬要用均方误差配Sigmoid,梯度里会保留 σ' 因子,当预测值非常离谱(比如输出0.01但标签是1)时,σ' 接近0,梯度几乎消失,学得极慢。这就是“交叉熵收敛快”的真正原因,不是玄学。

Softmax配交叉熵的梯度也值得记:∂L/∂z_i = ŷ_i - y_i,形式和多分类的直觉完全一致。Softmax本身要注意数值稳定性,实现时先减去最大值再取指数,防止上溢,这个技巧在编程题里经常被考。

优化器方面,入门课重点讲三种:SGD、带冲量的SGD、Adam。SGD每步只用当前梯度,简单但震荡;冲量法累积历史梯度方向,能穿过峡谷地形;Adam同时维护梯度一阶矩和二阶矩的滑动平均,自适应调整每个参数的学习率。理解的抓手是:冲量解决“方向摇摆”,Adam解决“不同参数尺度差异大”。

4. 两座桥:符号推理与神经网络怎么接上

很多同学复习到这里就停了,两块内容各背各的。但真正拉开差距的,恰恰是能把两者接起来的理解。这门课如果只考割裂的知识点,那和背书没区别;它真正想让你建立的观念是——规则和数据是两种知识来源,各有各的边界。

4.1 从显式规则到分布式表示:两种知识存储的对比

符号系统把知识写成规则,好处是可解释、可校验、小样本就能工作,坏处是规则写不全、遇到例外就崩、维护成本随规则数量指数上升。神经网络把知识存在权重里,好处是能处理模糊输入、自动提取特征、泛化能力强,坏处是黑箱、需要大量数据、容易学到虚假关联。

这个对比可以做成一张表来记忆:

维度符号推理神经网络
知识形式显式规则、逻辑公式隐式权重
数据需求极少大量
可解释性强弱
泛化方式规则组合相似性插值
典型失败规则覆盖不全分布外输入崩溃

理解这张表,就能回答很多开放题。比如“为什么专家系统在真实场景中难以推广”,答案就在“规则覆盖不全”和“维护成本”这两行里;“为什么神经网络在医疗、金融领域落地谨慎”,答案在“可解释性弱”这一行。

4.2 知识图谱嵌入:让符号进到向量空间

知识图谱是符号表示的一种典型形式,三元组(头实体,关系,尾实体)描述事实。问题是符号没法直接做数值计算,于是有了嵌入:把实体和关系映射成向量,让符号运算变成向量运算。

最经典的模型是TransE,它的假设非常朴素:头实体向量加上关系向量,应该约等于尾实体向量,即 h + r ≈ t。训练目标就是让正确三元组的这个距离尽量小,错误三元组尽量大。损失函数常写成合页损失:max(0, margin + d(h+r, t) - d(h'+r, t')),其中 h'、t' 是随机替换得到的负样本。

这个模型的优点和缺点同样鲜明:能处理一对一关系,但一对多、多对一就吃力,因为同一个头实体通过同一关系指向多个尾实体时,向量会被拉向多个方向的平均。后续的TransH、TransR都是在补这个洞。

考试里如果考这块,通常不会要求你推完整损失,而是问“TransE的假设是什么”“负采样怎么构造”“为什么需要归一化”。把这三个问题答清楚,基本就够分了。归一化那条要说明:不归一化的话,模型会通过把向量整体放大来降低距离,学到的方向信息就废了。

4.3 神经符号结合:几条常见的融合思路

这块内容在不同教材里深浅不一,但核心思路就那么几条,理解方向比记细节重要。

第一条是规则注入损失。模型训练时除了任务损失,再加一项“违反规则的惩罚”,比如某个领域已知“A类实体不能和B类实体建立某关系”,就把违反这个约束的预测额外加惩罚。好处是规则变成了软约束,模型不必完全服从,能在规则和数据冲突时折中。

第二条是用神经网络提取特征,再交给符号推理。典型场景是先把自然语言句子抽成结构化三元组,再送进规则引擎做推理。这条路线在信息抽取任务里很常见,好处是每一步都可检查。

第三条是可微逻辑。把逻辑运算里的与、或、非换成可微的软版本,比如用乘积近似与、用最大值近似或,这样整个推理链条就能反向传播。代价是软化的逻辑和硬逻辑之间有偏差,需要温度参数调节。

提示:这部分内容如果课时少,不需要死记具体模型名,把“软约束、流水线、可微化”这三种思路记住,遇到开放题能展开说清楚就够。

5. 复习执行方案:两周时间表与手推题训练法

知道了内容结构,还得有可执行的时间安排。我把两周拆成三个阶段,每个阶段有明确的产出物,避免“看了很多但什么都没留下”的假努力。

5.1 十四天时间表:按依赖关系排,而不是按章节顺序

天数内容产出物
第1-2天谓词逻辑翻译、子句集化20道翻译题 + 5道归结手推
第3-4天BFS/DFS/一致代价、A*手算一张复杂度对比表 + 5道A*表格题
第5天极小极大与Alpha-Beta3棵博弈树的剪枝标注
第6-7天感知机、激活函数、前向传播手算3个两层网络的前向输出
第8-9天反向传播、损失函数搭配手推5遍完整梯度,闭卷能写全
第10天优化器、正则化、过拟合一页对比笔记
第11天知识表示与嵌入用自己的话解释TransE假设
第12天符号与神经网络结合三条融合思路各写一段
第13天整套真题限时模拟错题清单
第14天错题重做 + 记忆卡片过一遍卡片全部能答

这个排法的关键是把反向传播放在第8-9天而不是最后。因为它需要反复练手,留到最后一天只会焦虑。另外第13天必须留出来做整套模拟,分块练习和整卷练习的体验完全不同,时间分配、跳题策略、计算精度都只有在整卷里才暴露出来。

5.2 手推题训练法:闭卷、限时、对答案三步走

手推题(归结、A*、反向传播)是这门课最容易“看着会、写着错”的部分。我的训练方法很笨但有效:闭卷做、限时做、做完立刻对答案并标注错在哪一步。

限时很关键。反向传播一个两层网络的手推,熟练之后应该在8到10分钟内完成,超过15分钟说明流程不熟,考试时一定做不完。归结证明一般5分钟内能出结果。A*表格题视节点数,10到15分钟。

对答案时不要只对最终数值,要逐行核对中间量。常见错误集中在三处:一是归结时忘写替换(x取Socrates);二是A*更新g值时用了旧的父节点;三是反向传播里 δ_hidden 忘了乘激活函数导数。把每次犯的错记在一个单独的“错误日志”里,考前只看这份日志,效率比重新翻书高得多。

5.3 记忆卡片与错题本:怎么把碎片时间利用起来

概念性的东西(完备性、可采纳性、一致性、参数与超参数的区别)适合做成问答卡片,通勤、排队的时候抽五张过一遍。卡片的正面只写一个问题,背面写不超过三行的答案,逼自己用最短的话讲清楚。

错题本我建议用分类而不是按时间记。分成“概念错”“计算错”“读题错”三类,每类单独看。坚持记两周你会发现自己的错误高度集中,比如计算错永远出在符号上,读题错永远漏条件——这种模式化的错误,只要针对性提醒自己就能大幅减少。

6. 常见问题与排查实录:踩过的坑和救回来的分

复习过程中反复出现的问题,其实高度重复。我把它们整理成速查表,考前扫一遍比翻教材有用。

6.1 概念混淆速查:这些词长得像但完全不同

易混概念区别要点
完备性 vs 最优性完备指有解时一定能找到;最优指找到的一定是最优解
可采纳 vs 一致可采纳是h不高估真实代价;一致是h满足三角不等式,一致必可采纳
参数 vs 超参数参数由训练学出来(权重、偏置);超参数由人设定(学习率、层数)
过拟合 vs 欠拟合过拟合训练好测试差;欠拟合两边都差
生成式 vs 判别式生成式建模联合分布,判别式直接建模条件分布

这张表里最容易被追问的是“可采纳与一致”的关系。标准答案是:一致性是可采纳性的充分条件,不是必要条件。存在可采纳但不一致的启发函数,A*仍然最优,但可能重复扩展节点,效率下降。能说出这个层次,说明不是背的。

另一个高频混淆是“感知机收敛定理”的前提。它要求数据线性可分,在线性不可分的情况下感知机永远不收敛,权重会来回震荡。考试里常拿异或问题来考这个前提。

6.2 计算题踩坑实录:那些让人白丢分的小细节

第一坑是子句集化时忘消蕴含。直接对着 A→B 做归结,结果怎么都推不出来。规矩是先全部转成析取形式再动手,我在草稿纸上会先写一遍“去蕴含、移否定、标准化、Skolem、去全称、拆合取”这六步,做一道划一道。

第二坑是A*的g值更新方向搞反。新路径代价更小才更新,很多人习惯性地更新成更大的值。判断方法很简单:g是起点到当前节点的实际代价,路径越长代价只会越大,如果算出来变小了,说明找到了更优路径,该更新;如果算出来变大,那是绕远路了,不该更新。

第三坑是反向传播的维度对不上还硬算。δ 的形状必须和 z 一致,如果你算出来 δ 是列向量而 z 是行向量,后面所有梯度都会错。建议每题开始前先写形状,全程保留。

第四坑是Softmax分母漏项。多分类的手推题里,分母是所有类别指数的和,经常有人只加了自己关心的那两类。写的时候把所有类别列出来,一个一个加,慢一点但不会错。

6.3 现场应对:笔试和面试的不同打法

笔试的时间分配我一般按分值走:计算题占大头就先做计算题,叙述题最后做。遇到卡壳的手推题,超过预设时间就跳过,把能拿的分拿稳,再回头死磕。

面试被问到这门课的内容,往往不会让你推公式,而是问“为什么”。比如“为什么A*的启发函数不能高估代价”“为什么分类任务用交叉熵不用均方误差”“神经网络为什么需要非线性激活”。这些问题的答案前面都写过,关键是能用自己的话讲出来,而不是背教材原句。我试过对着空气讲一遍这些“为什么”,讲不顺畅的地方就是理解不到位的地方,比反复看书记得牢。

注意:面试里被追问细节时,宁可说“这部分我理解得不够深”,也不要硬编。编出来的错误比坦白更扣分,而且面试官一句追问就露馅。

最后分享一个我自己用了很久的小技巧:把整门课的知识点压缩成二十张卡片,每张卡片只写一个“如果只能记一句话,记哪句”。比如A*那张写“f = g + h,h不高估就最优”,反向传播那张写“δ = 误差 × 激活导数,往回乘权重”。考前半小时只看这二十句话,脑子里的框架能瞬间拉起来。这套方法在时间紧、内容多的情况下,比任何精细的复习计划都管用。

返回列表