速成 · 人工智能导论

十四讲的跨度很大:知识图谱之后插入 Python 数据处理,接着又转向机器学习、自然语言处理、搜索和强化学习。复习时可以用一个问题把它们接起来:怎样让机器根据输入,做出合适的判断或行动?

课程给了三种互补的办法:

  1. 把知识明确写出来:用 RDF、知识图谱和规则表达“世界里有什么、它们有什么关系”。
  2. 让模型从样本里学出来:用回归、SVM、神经网络、语言模型从数据中估计规律。
  3. 让智能体通过试探找到行动:搜索在已知规则里规划路径,强化学习在反馈中改进策略。

Python、NumPy 和 Pandas 是承上启下的工具层:它们不直接定义“智能”,但负责把数据变成算法能吃的形状。

十四讲怎样串起来

模块核心问题最该会的东西
人工智能概述“智能”有哪些技术路线?符号主义、连接主义、行为主义;能力与风险边界
知识工程如何把事实交给机器?RDF 三元组、URI、图数据库、Cypher
Python 数据工具如何表示、清洗和计算数据?容器、切片、ndarray、广播、Series、DataFrame
机器学习基础如何从样本估计规律?训练/测试、损失、泛化、评估指标、梯度下降
典型模型不同任务该用什么模型?线性回归、逻辑回归、SVM、神经网络
NLP 与大模型机器怎样处理词和序列?N-gram、词向量、Seq2Seq、Attention、Transformer、GPT/BERT
搜索已知规则时,怎样找到行动序列?BFS、DFS、UCS、迭代加深、A*、局部搜索
强化学习只有奖励时,怎样学会行动?MDP、价值函数、Bellman、MC、TD、SARSA、Q-learning

1. 知识表示:把“事实”变成机器可操作的结构

普通文字对人很友好,但机器很难稳定区分实体和关系。知识工程把一句话拆成三元组:

(主语, 谓语, 宾语)(\text{主语},\ \text{谓语},\ \text{宾语})

例如“李东骏就读于南京理工大学”可写成:

(李东骏, 就读于, 南京理工大学)(\text{李东骏},\ \text{就读于},\ \text{南京理工大学})

RDF 用 URI 唯一标识资源,用三元组连接事实;Neo4j 则把实体存成节点,把关系存成带方向的边。二者都在做结构化知识,但侧重点不同:RDF 更强调开放网络中的统一语义,Neo4j 更强调图的存储、遍历和工程查询。

最小的 Cypher 心智模型只有四个词:

CREATE (lee:Person {name: '李东骏'})
CREATE (njust:University {name: '南京理工大学'})
CREATE (lee)-[:STUDIES_AT]->(njust)

MATCH (p:Person)-[:STUDIES_AT]->(u:University)
RETURN p.name, u.name

2. 数据工具:从 Python 对象到二维表

Python 的列表可以装不同类型,适合写程序;NumPy 的数组要求元素同质,换来紧凑存储和向量化计算;Pandas 再在数组外加行列标签、缺失值处理和分组聚合。

import numpy as np
import pandas as pd

x = np.array([[1.0, 2.0], [3.0, 4.0]])
standardized = (x - x.mean(axis=0)) / x.std(axis=0)

df = pd.DataFrame(x, columns=["feature_a", "feature_b"])
summary = df.groupby(df.index % 2).mean()

这里最常考、也最容易错的是 axis:对一个形状为 (样本数, 特征数) 的数组,axis=0 表示沿着行向下压缩,结果是“每一列一个数”;axis=1 表示横向压缩,结果是“每一行一个数”。

3. 机器学习共同框架

一个监督学习问题可以压缩成四件事:

  • 数据:(xi,yi)(x_i,y_i);
  • 模型:y^=f(x;θ)\hat y=f(x;\theta);
  • 损失:衡量预测和答案差多少;
  • 优化:调参数 θ\theta,让训练损失下降。

梯度下降的统一写法是:

θ←θ−η∇θL(θ)\theta \leftarrow \theta-\eta\nabla_\theta L(\theta)

η\eta 是学习率。太大会跨过最低点甚至发散,太小则走得慢。

真正目标不是记住训练集,而是在没见过的数据上也做对,这叫泛化。因此必须分训练集和测试集;调超参数时再加入验证集或交叉验证。训练误差、测试误差都高是欠拟合;训练误差低、测试误差高是过拟合。正则化、减少模型复杂度、增加数据、早停都在控制过拟合。

分类指标怎么选

设 TP 是“正类判成正类”,FP 是“负类误判成正类”,FN 是“正类漏判为负类”:

Precision=TPTP+FP,Recall=TPTP+FN\text{Precision}=\frac{TP}{TP+FP},\qquad \text{Recall}=\frac{TP}{TP+FN} F1=2PRP+RF_1=\frac{2PR}{P+R}

查垃圾短信时,不想误伤正常短信就关注 Precision;不想漏掉垃圾短信就关注 Recall。Accuracy 在类别极不平衡时可能很会骗人。

4. 三个典型模型

线性回归:拟合一条“最合适”的直线

y^=w⊤x+b,L=1n∑i=1n(y^i−yi)2\hat y=w^\top x+b,\qquad L=\frac{1}{n}\sum_{i=1}^n(\hat y_i-y_i)^2

参数既可以用梯度下降求,也可以在条件允许时用正规方程直接求。加入 L2L_2 正则得到 Ridge,参数整体变小;加入 L1L_1 正则得到 Lasso,一部分参数可能直接变成零。

SVM:把两类之间的安全通道撑到最宽

硬间隔 SVM 解的是:

min⁡w,b12∥w∥2s.t.yi(w⊤xi+b)≥1\min_{w,b}\frac12\lVert w\rVert^2 \quad\text{s.t.}\quad y_i(w^\top x_i+b)\ge 1

最靠近边界的样本是支持向量,它们决定最终边界。软间隔允许少量样本越界,CC 越大越不容错,越容易追着训练样本跑;核函数则在不显式展开高维坐标的情况下计算高维内积,RBF 核常用来画弯曲边界。

神经网络:重复“仿射变换 + 非线性”

单层写作:

h=σ(Wx+b)h=\sigma(Wx+b)

如果层与层之间没有非线性,再深也能合并成一个线性变换。反向传播只是链式法则的高效复用。CNN 用局部感受野和权重共享处理图像;RNN/LSTM 用循环状态处理序列;Transformer 改用注意力,让任意位置直接交换信息。

5. 从语言模型到 Transformer

语言模型估计一个词序列的概率:

P(w1,…,wT)=∏t=1TP(wt∣w1,…,wt−1)P(w_1,\ldots,w_T)=\prod_{t=1}^{T}P(w_t\mid w_1,\ldots,w_{t-1})

N-gram 只看固定长度的历史,简单但稀疏;Word2Vec 把词映射为稠密向量;Seq2Seq 用编码器和解码器处理变长输入输出,但固定长度上下文容易成为瓶颈。Attention 让每个查询按相关性从所有位置取信息:

Attention⁡(Q,K,V)=softmax⁡(QK⊤dk)V\operatorname{Attention}(Q,K,V) =\operatorname{softmax}\left(\frac{QK^\top}{\sqrt{d_k}}\right)V

Transformer 把注意力、多头、位置编码、前馈网络、残差连接和归一化组合起来。BERT 主要是编码器式的双向表示,常用遮盖词训练;GPT 主要是解码器式的自回归模型,训练目标是预测下一个 token。第 10 讲负责讲机制,第 11 讲再用这套机制解释预训练、提示、指令微调和人类反馈对齐。

6. 搜索:在已知规则中规划

先把问题写成初始状态、动作/后继函数、目标测试和路径代价。算法的差别主要在于如何管理尚未展开的节点集合 frontier:

算法选择规则完备性最优性典型代价
BFS最浅节点,FIFO有限分支下是单位步长下是时间、空间都约 O(bd)O(b^d)
UCS最小累计代价 gg正代价下是是可能占用大量内存
DFS最深节点,栈无限深时否否空间约 O(bm)O(bm)
迭代加深深度上限逐轮增加是单位步长下是时间约 O(bd)O(b^d),空间约 O(bd)O(bd)
A*最小 f=g+hf=g+h条件满足时是hh 可采纳时是效率取决于启发函数

A* 的 gg 是已经付出的代价,hh 是从当前状态到目标的估计。若 hh 从不高估真实剩余代价,就不会因为“过分乐观地看错方向”而错过最优解。

局部搜索只保留少量当前状态,适合路径本身不重要的优化问题。爬山法只接受变好,容易卡在局部最优;模拟退火偶尔接受变差,用逐渐降低的温度换取跳出陷阱的机会;遗传算法则用选择、交叉和变异维护一群候选解。

7. 强化学习:价值把长期奖励传回来

强化学习的难点是:动作会改变后续数据,奖励还可能延迟。MDP 用五元组 (S,A,P,R,γ)(S,A,P,R,\gamma) 描述这个闭环。折扣回报为:

Gt=Rt+1+γRt+2+γ2Rt+3+⋯G_t=R_{t+1}+\gamma R_{t+2}+\gamma^2R_{t+3}+\cdots

价值函数不是“眼前奖励”,而是从某状态或状态—动作对出发的预期长期回报。Bellman 方程把长期问题拆成一步:

Vπ(s)=∑aπ(a∣s)∑s′,rp(s′,r∣s,a)[r+γVπ(s′)]V_\pi(s)=\sum_a\pi(a\mid s)\sum_{s',r} p(s',r\mid s,a)\left[r+\gamma V_\pi(s')\right]

已知环境模型时,可以做动态规划;只拿到完整轨迹时,可以用蒙特卡洛平均回报;想每走一步就更新,则用 TD:

V(St)←V(St)+α[Rt+1+γV(St+1)−V(St)]V(S_t)\leftarrow V(S_t)+\alpha \left[R_{t+1}+\gamma V(S_{t+1})-V(S_t)\right]

SARSA 用实际下一动作更新,属于 on-policy;Q-learning 用下一状态中最大的 QQ 更新,学习目标策略与采样策略可以不同,属于 off-policy。

最后一小时怎么复习

  1. 先默写三条主线:知识表示、从数据学习、搜索/交互决策。
  2. 把监督学习四件套和分类指标写一遍。
  3. 用同一张草稿比较线性回归、SVM、神经网络。
  4. 默写 Attention、A*、TD、SARSA、Q-learning 的公式,并逐个解释每一项。
  5. 最后回看 Python/NumPy/Pandas 的对象、切片、axis、广播和缺失值处理。

现有课程资料里没有真实往年卷,因此“真题”目录保持为空。复习重点只能依据 14 份课件和三次作业,不能用凭空编出的题目替代原始证据。

评论