AI 引论——期中复习
-
AI 概述
- AI 的六大核心方向:计算机视觉、自然语言处理、机器学习、认知推理、多智能体、机器人
- 人工智能,是研究模拟、延伸和扩展人类智能的理论、方法技术以及应用系统的学科
- 四种可能定义:类人行为、类人思考、理性行为、理性思考
- 智能体(Agent):任何通过传感器感知环境并通过执行器作用于该环境的事物
- 设计理性智能体的几个维度:性能度量、环境、执行器、传感器
-
搜索
- 搜索的几个要素:目标、状态、动作、状态转移模型、动作代价函数
- 广度优先搜索(bfs)
- 特点:优先扩张最浅的节点
- 实现:先进先出的队列
- 深度优先搜索(dfs)
- 特点:优先扩张最深的节点
- 实现:先进后出的栈
- 一致代价搜索(ucs)
- 特点:优先扩张代价最小的节点
- 实现:总成本优先队列(用二叉堆实现)
- 一定最优!
- 局限:没有考虑目标信息
- 盲目搜索 vs 知情搜索:
- 盲目搜索:bfs、dfs、ucs 等,不使用目标信息
- 知情搜索:启发、贪心、A*等,使用目标信息
- 启发:
- 启发是一个估计当前状态与目标状态距离的函数
- 贪心搜索:
- 永远扩展看起来最近的
- 为什么不一定最优:
-
- 单次最优不一定是全局最优
-
- 启发估计不一定准确
-
- 特点:扩展一个根据预计离目标最近的点
- 经常被误导去一个错误的目标
- A*搜索
- 将 ucs 和贪心搜索结合
- ucs 使用距离起点距离 \(g(x)\) 排序,贪心使用预计距离终点距离 \(h(x)\) 排序,A* 使用两者之和 \(f(x) = g(x) +h(x)\) 排序
- 从优先队列取出目标时停止
- 最优吗?保证最优的启发函数具有什么性质?
- 可接受启发:
- 启发代价不大于真实代价
- 最优性的证明:分析最优目标和非最优目标差值,具体略
- 在搜索树上最优!只保证了目标状态一定是第一个取出时最优,但是非目标状态可能被多次更新最优值!
- 一致性启发:
- 每条边 \(x \rightarrow y\) 的边权不小于启发值之差 \(h(x) - h(y)\)
- 于是:一条路径上的 \(f\) 值永远不会减少,所以每一个状态第一次取出时一定最优,每个状态可以只用来更新其他状态一次!
- 即在图搜索上也保证最优!
- 可接受启发:
- 约束满足问题(CSP)
- 一类特殊的搜索问题:
- 状态:一些变量的赋值
- 目标:每个变量都被赋值,并且满足一些约束
- 动作:对一个还没赋值的变量赋值
- 分类:
- 离散变量/连续变量
- 优先域/无限域
- 一元约束/多元约束
- 解决方法:回溯搜索(Backtracking Search)
- 一次只考虑一个未赋值变量
- 每一步都判断是否满足约束
- 改进的潜力:
- 顺序:应该先给哪个变量赋哪个值?
- 筛选:可以提早判断约束的失败吗?
- 顺序:
- 选择最多约束的变量,即最少剩余值启发
- 选择带来最少约束的赋值,选给剩下变量留下最多可能的值
- 筛选:
- 提前检查:去掉那些加到现有赋值就会违反约束的值
- 边一致性:使用队列,初始将所有点对加入队列,每一次检查点对 \((x,y)\) 看是否 x 的每个取值都有 y 的取值相容,若没有,则将这个 x 的取值删除,并且把所有包含 x 的点对再次加入队列,直到队列为空。
- 一类特殊的搜索问题:
- SAT 问题:
- SAT 问题是变量均为 bool 变量的 CSP 问题
- CSP 问题可以被转化为 SAT 问题:通过逻辑
- 逻辑:
- 与、或、非
- 合取范式(CNF):每一个子句是变量的或,将所有子句与起来
- 析取范式(DNF):每一个子句是变量的与,将所有子句或起来
- DPLL 算法:
- 采用 CNF,还是回溯搜索
- 每一个字句在搜索过程中有以下可能状态:
- 已经满足(子句中有字符为真)
- 无法满足(所有字符都为假 )
- 单字符(只有一个字符未赋值,其他都为假)
- 其他
- 当有子句为假时,回溯
- 单字符传递:当有子句状态为单字符时,这个字符被赋值为真
- 布尔约束传递(BCP):重复使用单字符传递,直到没有子句状态为单字符为止
- 矛盾指向的子句学习算法(CDCL) :
- 不考……
- 对抗搜索
- 搜索的目标不再是最小化代价,而是最大化分数/效用
- Minimax 搜索:
- 轮流行动,玩家最大化价值,对手最小化价值
- 假设对手是最理性的情况下,自己可以达到的最优效用
- Alpha-Beta 剪枝:
- 对于 min 节点 x,设 \(\alpha\) 是从 x 到根上所有 max 节点的最大值,如果 x 的取值小于等于 \(\alpha\) ,则 x 一定无用,可以不计算剩下的子节点,直接返回
- 对于 max 节点 x,设 \(\beta\) 是从 x 到根上所有 min 节点的最小值,如果 x 的取值大于等于 \(\beta\) ,则 x 一定无用,可以不计算剩下的子节点,直接返回
- 不会对最终根节点的结果造成影响,但是会影响中间节点的值
- 不同的节点顺序会造成不同的剪枝效果
- 估值:
- 每一次都搜索到底的复杂度无法承受,于是只搜索有限维,然后将最终效用替换为估值函数
- 估值函数嵌入得越深,其质量对问题的影响越小
- 期望最大化搜索:
- 当对手不是理性,而是纯随机时,对对手层,不是用 min 而是使用期望
- 计算当我方策略最优、对手策略随机时的最大期望得分
- 蒙特卡洛搜索(MCTS)
- 蒙特卡洛方法:
- 利用大规模随机抽样来近似问题的解
- 例:使用蒙特卡洛方法计算圆周率
- 次数越多越准确,估计的准确度与方差有关
- 问题:实际上,在每一个状态,只有少数几个动作具有高价值
- 如何平衡抽样的不确定性:以牢虎机为例
- 相关的变量:
- 可选动作的数量 \(k\)
- 动作的实际价值 \(q^*(a)\)
- 在时间 \(t\) 及之前,对动作的估值 \(Q_{t}(a)\),动作被选中的次数 \(N_{t}(a)\)
- 在时间 \(t\) 得到的价值 \(R_{t}\)、选择的动作 \(A_{t}\)
- 两种基本策略:
- 利用:选择现在最优的
- 探索:选择现在非最优的
- \(\epsilon-\)greedy:以 \(\epsilon\) 的概率探索,否则利用
- 但是我们希望在探索时更多地去尝试那些可能成为最优的动作,这样效率才更高
- 最大置信(UCB):
- 已知:尝试次数越多估值越准确,我们对尝试次数少的还需要更多探索
- 探索时需要平衡估值的大小和次数的多少:估值越大、次数越少,越要探索
- \(A_{t+1} = argmax_{a}\bigg[ Q_{t}(a) + c\sqrt{ \frac{\ln t}{N_t(a)} } \bigg]\)
- \(c\):超参数,用于平衡估值和信任度对决策的影响
- 相关的变量:
- 蒙特卡洛树(MCTS):
- UCB 可以选择单次动作,通过 MCTS 在 UCB 基础上生成序列动作
- 生成一棵树,每个节点上标记获胜次数/总次数
- 每一步有四个环节:选择、扩展、模拟、回溯
- 选择1:对当前节点,由 UCB 选择动作;反复此过程,直到叶子节点
- 扩展1:一次性扩展所有可能的叶子节点,全标记为 0/0
- 或者:
- 选择2:对当前节点,由 UCB 选择动作(除了已有儿子节点,还有未选择的动作对应的新节点);反复此过程,直到新节点
- 扩展2:对当前新节点,标记为0/0
- 模拟:对于扩展出的 0/0 节点,随机模拟一次博弈,可能是随机博弈几层然后估值,反正要得出胜负
- 回溯:由扩展结果更新到根路径上的获胜次数/总次数
- 然后再从根节点开始选择……
- 基于MTCS ,发明 AlphaGo,还有若干优化
- 利用真实对战数据,学习更好的估值
- 使用自我博弈数据继续学习
- 蒙特卡洛方法:
-
机器学习
- 基本概念:
- 学习:通过实践提高表现的过程
- 机器学习:让计算机从数据中学习的过程
- 模型分类:判别式模型、描述式模型、生成式模型
- 方法分类:监督式学习(提供标签)、非监督式学习(不提供标签)、强化学习(自己从环境中提取数据)
- 判别式模型
- 分类 vs 回归:分类的标签离散,回归的标签连续
- 模型训练过程:训练数据 ->(特征提取)-> 向量 -> (模型训练)-> 模型函数
- 模型评估:
- 训练误差:在训练集上的平均误差,通过最小化训练误差来训练模型
- 测试误差:在测试集上的平均误差,用来衡量模型在新数据上的好坏,衡量模型的繁华能力
- 训练集、测试集划分:一般按 90-10 的比例随机划分
- 过拟合:训练误差远大于测试误差
- 欠拟合:训练完成后,训练误差仍很大
- k 近邻算法(KNN)
- 最简单的机器学习算法
- 对于一个测试数据,用训练数据中距离最近的 k 个样本中占多数的标签来预测
- 优点:不需要训练,只需要一个距离函数(通常为欧式距离)
- 缺点:
- 需要储存所有的训练样本
- 在测试时需要计算测试样本到所有样本的距离
- 有时很难找到一个好的距离函数
- 参数化模型 vs 非参数化模型
- 非参数化模型:
- 例如 KNN
- 不能被有限参数定义,或者不包含参数
- 只需要保存训练样本,对测试样本进行预测
- 参数化模型:
- 例如:线性回归、神经网络等
- 模型包含可训练的参数,通过拟合训练数据来估算模型参数
- 训练好参数后,可以丢弃训练数据,仅通过模型参数去预测新样本
- 非参数化模型:
- 线性模型:
- 最简单的参数化模型
- \(f(x) = w^Tx + b\)
- \(w,b\) 称为权重(矩阵)和偏置(向量)
- 损失函数:平方损失函数
- \(\sum (f(x_{i}) - y_{i}) ^{2}\)
- 通过在训练集上最小化损失函数来训练 \(w,b\)
- 梯度下降:
- 如何求解 \(w,b\) ?
- 分别计算损失对 \(w,b\) 的偏导 \(\frac{\partial L}{\partial w},\frac{\partial L}{\partial b}\)
- 每次沿着损失减少最快的方向使 \(w,b\) 走一小步
- \(w \leftarrow w -\alpha * \frac{\partial L}{\partial w},b \leftarrow b -\alpha * \frac{\partial L}{\partial b}\)
- \(\alpha\) :超参数学习率
- 当 f(x) 是入函数时,找到的局部最小值就是全局最小值,故尽量把损失设计为凸函数
- 分类问题:
- 二分类问题(逻辑回归):
- 标签只有两种(-1,1)
- 对输出,使用 sigmoid 函数 \(\sigma(x) = \frac{1}{1 + e^{-x}}\),生成选择标签 1 的概率
- 损失函数:
- 交叉熵损失函数:\(\sum \log[1 + e^{-y_{i}f(x_{i})}]\)
- 原理:最大概然估计(MLE)
- 合页损失函数(Hinge Loss):\(\sum max(0, 1-y_{i}f(x_{i}))\)
- 交叉熵损失函数:\(\sum \log[1 + e^{-y_{i}f(x_{i})}]\)
- 多分类问题:
- 多个输出 \(f_{k}(x)\) 表示取第 \(k\) 类的概率
- 使用 softmax 归一化:\(p(y = k|x) = \frac{e^{f_{k}(x)}}{\sum e^{f_{i}(x)}}\),具有放大效应
- 二分类问题(逻辑回归):
- 正则化:
- 为了缓解过拟合现象
- 在损失函数后加一个正则化项,用于惩罚过于复杂的模型 \(L' = L + \lambda R(f)\)
- L2正则化:\(R(f) = \|w\|^{2}\),惩罚少数过大权重的维度,使权重分配更加平均
- L1正则化:\(R(f) = \|w\|\),鼓励稀疏的 \(w\),即使得只有少数维度非 0
- 带正则化的回归和分类:
- 岭回归 (Ridge Regression):线性回归 + L2 正则化
- Lasso 回归:线性回归 + L1 正则化
- 逻辑回归(完整形式):交叉熵损失 + L2正则化
- 支持向量机(SVM):合页损失 + L2 正则化
- 超参数与模型选择
- 将数据按 80-10-10 的比例划分为训练集、验证集、测试集
- 对于不同的超参数和模型,使用训练集训练,在验证集上验证误差
- 选择在验证集上误差最小的超参数和模型
- 最后在测试集上测试最终误差,估计模型的泛化能力
- K-折交叉验证(K-fold Cross-Validation)
- 将测试集以外的数据随机分为 k 份
- 每次取 k-1 份训练,剩下一份验证
- 最后选取 k 次验证平均误差最低的超参数和模型
- 决策树:
- 模型定义:树形结构,根节点包含样本全集,;每个非叶节点对应一个特征属性测试,根据结果将数据划分到子节点中;每个叶节点对应决策结果
- 最优划分属性:
- 我们希望随着划分的进行,数据标签的“纯度”不断提高
- 想要找到一个属性,使得划分后,每个子集标签纯度尽量高
- 只要找到当前节点最优属性,就在树上递归划分,直到纯度达到要求/深度达到上限
- 纯度度量:
- 信息熵:\(H(X) = -\sum_{x} p(x) \log_{2}p(x)\)
- 联合熵:\(H(X,Y) = -\sum_{x}\sum_{y}p(x,y)\log_{2}p(x,y)\)
- 条件熵:\(H(Y|X) = -\sum_{x} p(x) H(Y|X = x) = -\sum_{x}\sum_{y}p(x,y)\log_{2}p(y|x)\)
- 条件熵与联合熵的关系:\(H(X,Y) = H(X) + H(Y|X) = H(Y) + H(X|Y) = H(Y,X)\)
- 互信息:描述 Y 中包含 X(或 X 中包含 Y) 的信息量\(I(X,Y) = H(X) + H(Y) - H(X,Y) = H(X) - H(X|Y) = H(Y) - H(Y|X)\)
- 相关性越强,互信息越大
- 样本集合的标签纯度:\(H(D) = -\sum \frac{|D_{k}|}{|D|} \log_{2}\frac{|D_{k}|}{|D|}\)
- 划分准则:
-
- 信息增益准则
- 信息增益:标签与指定属性的互信息
- \(g(D,A) = H(D) - \sum \frac{|D_{A = a_{i}}|}{|D|}H(D_{A=a_{i}})\)
- 倾向于选择具备较多取值可能的属性
-
- 增益率准则
- 增益率:\(g_{R}(D,A) = \frac{g(D,A)}{H_{A}(D)}\)
- 其中,\(H_{A}(D) = -\sum \frac{|D_{A=a_{i}}|}{|D|} \log_{2}\frac{|D_{A=a_{i}}|}{|D|}\) 描述属性 A 本身的熵
- 对取值数目较少的属性有所偏好
-
- 基尼指数准则
- \(Gini(D) = \sum \frac{|D_{A=a_{i}}|}{|D|} \left( 1-\frac{|D_{A=a_{i}}|}{|D|} \right) = 1 - \sum (\frac{|D_{A=a_{i}}|}{|D|})^{2}\)
- 选择基尼指数最小的属性
-
- 离散到连续:
- 属性从离散到连续:
- 使用二分法
- 对属性 A 对取值排序,选取位置划分为两半
- 对属性和划分位置为整体,计算信息增益
- 标签从离散到连续:
- 划分树 -> 回归树
- 以样本方差为划分准则
- \(L(D) = \sum_{i \in D}(y_{i} -\bar{y}_{D})^{2}, L(D,A) = \sum L(D_{A=a_{i}})\)
- 选取方差最小的属性
- 属性从离散到连续:
- 随机森林:
- 集成学习:多个个体学习器 + 结合策略
- 个体学习器:决策树;结合策略:样本扰动 + 属性扰动
- 对于每一个决策树,随机采样得到样本数据子集,随机选起其中一部分属性
- 最后,用所有决策树预测的结果输出(例如 取平均、取多数类等)
- 神经网络、反向传播
- 多层感知器(MLP)
- 输入层 -> 隐层 -> 输出层
- 隐层层数和神经元个数可以自由设计
- 每一个线性层中都是全连接
- 正向传播
- \(x^{(k+1)} = g({w^{(k)}}^Tx^{(k)} + b)\)
- 其中,\(g(x)\):激活函数,非线性的来源
- 常见的激活函数:sigmoid、tanh、ReLu……
- 最后输出,对于不同的问题,不同方案
- 对于回归问题,直接输出
- 对于分类问题,softmax 以后输出分类概率
- 反向传播
- 作用:求出最终损失对每一个参数的偏导,以进行梯度下降
- 下游梯度 = 上游梯度 * 本地梯度
- 具体情况,具体计算,略……
- 可能需要写成矩阵形式,可以对每一个分量分别计算,然后合成急诊形式,注意下表对应关系!注意矩阵是否转置!!!
- 计算图
- 将神经网络简化为层与层之间连接的计算图的形式,矩阵计算可以用 GPU 显著加速
- 具体代码实现:
- 对于每一种节点(线性层、ReLu、Softmax 等)定义正向传播和反向传播
- 将节点按顺序排列,构成计算图
- 对训练数据,一次进行正向传播 + 反向传播 + 梯度下降完成一轮迭代
- 反复迭代梯度下降直到收敛
- 神经网络训练:
- 全数据梯度下降:每一次迭代使用所有数据计算梯度,算力消耗大
- 随机梯度下降:每一次迭代随机选取一个数据计算梯度,波动大难收敛
- 小批量梯度下降:每次随机采样一小批数据计算梯度,效果较好
- 多层感知器(MLP)
- 基本概念:
-
计算机视觉
- 概述
- 概念
- 视觉指从光信号到产生对现实世界理解的过程;计算机视觉的目的是用计算机实现人类的视觉功能
- 视觉可分为视感觉和视知觉;视感觉:将光信号转化为人脑或计算机可处理的数据的过程;视知觉:完成对光学信息的处理,实现对世界的理解的过程
- 历史与发展
- 视觉信号处理的三个层次
- 计算理论层:视觉计算的目标是什么,逻辑是什么?是否合理?
- 表达与算法层:为了实践计算理论,如何表达输入和输出,如何设计算法?
- 硬件实现层:上述表达和算法如何通过物理实现?
- 视觉信号处理的三个层次
- 研究方向
- 核心问题可分为判别式和生成式;还有与自然语言处理等模块的交叉任务
- 具体任务:图像分类、目标检测、语义分割、目标跟踪、行为识别、行人识别、图像去噪、三维重建、图像描述生成、文本生成图像等……
- 应用……
- 概念
- 图像分类
- 定义:判断图像所属类别
- 难点:视角变化大、姿态变化多、遮挡严重、类内差异大、尺度变化大等
- 数据集:MNIST 70000 张数字图像,28*28;CIFAR数据集:60000 张图片,10 嘞常见物品,32*32;ImageNet 数据集,规模最大的图像数据集
- 计算机中图像的表示:
- 用二维函数 \(f(x,y)\) 表示,其中 \(x,y,f\) 均为离散值
- \(x,y\) 表示坐标,\(f\) 表示灰度,可用三原色的灰度表示颜色
- 基于手动特征提取的图像分类算法
- 输入图像 -> 特征表示 -> 分类器 -> 类别预测
- 特征提取算子——梯度直方图(HOG)
- 动机:目标的局部形状能被梯度或边缘的方向密度分布很好描述
- 优点
- 对图像的几何和光学形变都能保持很好的不变性
- 可以忽略人体的细微动作而不影响检测效果
- HOG 特征多用于图像中的行人检测
- 过程:
-
- 将彩色图像色彩变换和灰度校正变成黑白图像
-
- 对每个像素灰度分别计算垂直和水平梯度,并合成向量
-
- 将图像分为 16*16 个 cell ,每个内部统计各个方向上的梯度数量
-
- 相邻的 cell 组成 block,各个 cell 的梯度直方图合成特征序列
-
- 特征提取算子——Haar
- 一种对边缘敏感的特征,可以分为边缘特征、线性特征、中心特征
- 特征提取算子——SIFT
- 一种对旋转、光照、尺度缩放具有不变性的局部特征
- 三种特征提取方法的比较:
- HOG
- 优点:具有对几何和光学形变d 良好不变性,可以忽略肢体动作,适合行人检测
- 缺点:计算量大,无法处理遮挡
- Haar
- 优点:使用模版匹配,计算速度快,适用于人脸检测
- 对旋转适应性不佳
- SIFT
- 优点:信息量丰富,检测匹配速度快,可以部分解决遮挡、角度变化的问题
- 缺点:对边缘光滑的目标无法准确提取特征
- HOG
- 分类器:最近邻、线性分类、支持向量机
- 基于卷积神经网络的图像分类算法
- 写过代码了,具体细节描述太麻烦,略……
- 基本结构:卷积层(Convolution),补零(Padding),批归一化(BatchNormalization),池化层(Pooling),Dropout,全连接层……
- 残差连接
- 图像数据增强:对图像进行几何变换、颜色变换,增强模型泛化能力
- 摄像机几何——从三维到二维
- 世界坐标系 -> 相机坐标系 -> 成像平面坐标 -> 图像坐标
- 世界坐标系 -> 相机坐标系: \(P = R \mathbb P + T\),R 旋转矩阵,T 平移向量
- 相机坐标系 -> 图像坐标:\(P^* = \frac{1}{z} KP\),K 相机内参矩阵
- 三维重建——从二维到三维
- 基于对应点重建
- 通过两个相机图像的对应点位置,求解相机之间的相对位置,再计算出图像熵每个点在空间中的位置
- 就是咔咔解方程组
- 核心在于找到对应点,使用特征点描述子(比如 SIFT)
-
- 检测关键点
-
- 生成关键点描述子
-
- 关键点匹配
-
- 基于神经网络重建
- 基于对应点重建
- 概述
-
自然语言处理
- 概述
- 自然语言处理的作用
- 让机器与人类交流、让机器学习到知识、推动对语言和语言使用的科学理解
- 语音识别、语音合成、机器翻译、信息提取……
- 难点:
- 模糊不清,存在歧义,没有正式定义符号到对象的映射
- 自然语言处理的作用
- 上下文无关的文法:
- 句法(Syntax):规定如何使用单次来组成句子
- 语义:语言包含的含义
- 文法(Grammer):是一组规则,定义了合法短语的树形结构
- 语言:是遵循文法规则的子集
- 句法分析(Parsing):
- 根据文法规则分析一串单词以获得其短语结构的过程
- CYK 算法(其实就是一种区间 dp)
- 先将文法规则树转化为二叉树(CNF,乔姆斯基范式)
- 然后具体过程就是区间 dp
- A* 搜索
- 分词(Tokenization)
- 将文本序列分为独立的单词;或将文本序列分割为独立的句子
- 基于马尔科夫模型的文本生成:达到一个状态后,决策只与当前状态有关
- 概述

浙公网安备 33010602011771号