速成 · 人工智能导论
十四讲的跨度很大:知识图谱之后插入 Python 数据处理,接着又转向机器学习、自然语言处理、搜索和强化学习。复习时可以用一个问题把它们接起来:怎样让机器根据输入,做出合适的判断或行动?
课程给了三种互补的办法:
- 把知识明确写出来:用 RDF、知识图谱和规则表达“世界里有什么、它们有什么关系”。
- 让模型从样本里学出来:用回归、SVM、神经网络、语言模型从数据中估计规律。
- 让智能体通过试探找到行动:搜索在已知规则里规划路径,强化学习在反馈中改进策略。
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. 知识表示:把“事实”变成机器可操作的结构
普通文字对人很友好,但机器很难稳定区分实体和关系。知识工程把一句话拆成三元组:
例如“李东骏就读于南京理工大学”可写成:
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. 机器学习共同框架
一个监督学习问题可以压缩成四件事:
- 数据:;
- 模型:;
- 损失:衡量预测和答案差多少;
- 优化:调参数 ,让训练损失下降。
梯度下降的统一写法是:
是学习率。太大会跨过最低点甚至发散,太小则走得慢。
真正目标不是记住训练集,而是在没见过的数据上也做对,这叫泛化。因此必须分训练集和测试集;调超参数时再加入验证集或交叉验证。训练误差、测试误差都高是欠拟合;训练误差低、测试误差高是过拟合。正则化、减少模型复杂度、增加数据、早停都在控制过拟合。
分类指标怎么选
设 TP 是“正类判成正类”,FP 是“负类误判成正类”,FN 是“正类漏判为负类”:
查垃圾短信时,不想误伤正常短信就关注 Precision;不想漏掉垃圾短信就关注 Recall。Accuracy 在类别极不平衡时可能很会骗人。
4. 三个典型模型
线性回归:拟合一条“最合适”的直线
参数既可以用梯度下降求,也可以在条件允许时用正规方程直接求。加入 正则得到 Ridge,参数整体变小;加入 正则得到 Lasso,一部分参数可能直接变成零。
SVM:把两类之间的安全通道撑到最宽
硬间隔 SVM 解的是:
最靠近边界的样本是支持向量,它们决定最终边界。软间隔允许少量样本越界, 越大越不容错,越容易追着训练样本跑;核函数则在不显式展开高维坐标的情况下计算高维内积,RBF 核常用来画弯曲边界。
神经网络:重复“仿射变换 + 非线性”
单层写作:
如果层与层之间没有非线性,再深也能合并成一个线性变换。反向传播只是链式法则的高效复用。CNN 用局部感受野和权重共享处理图像;RNN/LSTM 用循环状态处理序列;Transformer 改用注意力,让任意位置直接交换信息。
5. 从语言模型到 Transformer
语言模型估计一个词序列的概率:
N-gram 只看固定长度的历史,简单但稀疏;Word2Vec 把词映射为稠密向量;Seq2Seq 用编码器和解码器处理变长输入输出,但固定长度上下文容易成为瓶颈。Attention 让每个查询按相关性从所有位置取信息:
Transformer 把注意力、多头、位置编码、前馈网络、残差连接和归一化组合起来。BERT 主要是编码器式的双向表示,常用遮盖词训练;GPT 主要是解码器式的自回归模型,训练目标是预测下一个 token。第 10 讲负责讲机制,第 11 讲再用这套机制解释预训练、提示、指令微调和人类反馈对齐。
6. 搜索:在已知规则中规划
先把问题写成初始状态、动作/后继函数、目标测试和路径代价。算法的差别主要在于如何管理尚未展开的节点集合 frontier:
| 算法 | 选择规则 | 完备性 | 最优性 | 典型代价 |
|---|---|---|---|---|
| BFS | 最浅节点,FIFO | 有限分支下是 | 单位步长下是 | 时间、空间都约 |
| UCS | 最小累计代价 | 正代价下是 | 是 | 可能占用大量内存 |
| DFS | 最深节点,栈 | 无限深时否 | 否 | 空间约 |
| 迭代加深 | 深度上限逐轮增加 | 是 | 单位步长下是 | 时间约 ,空间约 |
| A* | 最小 | 条件满足时是 | 可采纳时是 | 效率取决于启发函数 |
A* 的 是已经付出的代价, 是从当前状态到目标的估计。若 从不高估真实剩余代价,就不会因为“过分乐观地看错方向”而错过最优解。
局部搜索只保留少量当前状态,适合路径本身不重要的优化问题。爬山法只接受变好,容易卡在局部最优;模拟退火偶尔接受变差,用逐渐降低的温度换取跳出陷阱的机会;遗传算法则用选择、交叉和变异维护一群候选解。
7. 强化学习:价值把长期奖励传回来
强化学习的难点是:动作会改变后续数据,奖励还可能延迟。MDP 用五元组 描述这个闭环。折扣回报为:
价值函数不是“眼前奖励”,而是从某状态或状态—动作对出发的预期长期回报。Bellman 方程把长期问题拆成一步:
已知环境模型时,可以做动态规划;只拿到完整轨迹时,可以用蒙特卡洛平均回报;想每走一步就更新,则用 TD:
SARSA 用实际下一动作更新,属于 on-policy;Q-learning 用下一状态中最大的 更新,学习目标策略与采样策略可以不同,属于 off-policy。
最后一小时怎么复习
- 先默写三条主线:知识表示、从数据学习、搜索/交互决策。
- 把监督学习四件套和分类指标写一遍。
- 用同一张草稿比较线性回归、SVM、神经网络。
- 默写 Attention、A*、TD、SARSA、Q-learning 的公式,并逐个解释每一项。
- 最后回看 Python/NumPy/Pandas 的对象、切片、
axis、广播和缺失值处理。
现有课程资料里没有真实往年卷,因此“真题”目录保持为空。复习重点只能依据 14 份课件和三次作业,不能用凭空编出的题目替代原始证据。