AI 引论——期中复习

  • AI 概述

    • AI 的六大核心方向:计算机视觉、自然语言处理、机器学习、认知推理、多智能体、机器人
    • 人工智能,是研究模拟、延伸和扩展人类智能的理论、方法技术以及应用系统的学科
    • 四种可能定义:类人行为、类人思考、理性行为、理性思考
    • 智能体(Agent):任何通过传感器感知环境并通过执行器作用于该环境的事物
    • 设计理性智能体的几个维度:性能度量、环境、执行器、传感器
  • 搜索

    • 搜索的几个要素:目标、状态、动作、状态转移模型、动作代价函数
    • 广度优先搜索(bfs)
      • 特点:优先扩张最浅的节点
      • 实现:先进先出的队列
    • 深度优先搜索(dfs)
      • 特点:优先扩张最深的节点
      • 实现:先进后出的栈
    • 一致代价搜索(ucs)
      • 特点:优先扩张代价最小的节点
      • 实现:总成本优先队列(用二叉堆实现)
      • 一定最优!
      • 局限:没有考虑目标信息
    • 盲目搜索 vs 知情搜索:
      • 盲目搜索:bfs、dfs、ucs 等,不使用目标信息
      • 知情搜索:启发、贪心、A*等,使用目标信息
    • 启发:
      • 启发是一个估计当前状态与目标状态距离的函数
    • 贪心搜索:
      • 永远扩展看起来最近的
      • 为什么不一定最优:
          1. 单次最优不一定是全局最优
          1. 启发估计不一定准确
      • 特点:扩展一个根据预计离目标最近的点
      • 经常被误导去一个错误的目标
    • 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}))\)
      • 多分类问题:
        • 多个输出 \(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|}\)
      • 划分准则:
          1. 信息增益准则
          • 信息增益:标签与指定属性的互信息
          • \(g(D,A) = H(D) - \sum \frac{|D_{A = a_{i}}|}{|D|}H(D_{A=a_{i}})\)
          • 倾向于选择具备较多取值可能的属性
          1. 增益率准则
          • 增益率:\(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 本身的熵
          • 对取值数目较少的属性有所偏好
          1. 基尼指数准则
          • \(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 等)定义正向传播和反向传播
          • 将节点按顺序排列,构成计算图
          • 对训练数据,一次进行正向传播 + 反向传播 + 梯度下降完成一轮迭代
          • 反复迭代梯度下降直到收敛
        • 神经网络训练:
          • 全数据梯度下降:每一次迭代使用所有数据计算梯度,算力消耗大
          • 随机梯度下降:每一次迭代随机选取一个数据计算梯度,波动大难收敛
          • 小批量梯度下降:每次随机采样一小批数据计算梯度,效果较好
  • 计算机视觉

    • 概述
      • 概念
        • 视觉指从光信号到产生对现实世界理解的过程;计算机视觉的目的是用计算机实现人类的视觉功能
        • 视觉可分为视感觉和视知觉;视感觉:将光信号转化为人脑或计算机可处理的数据的过程;视知觉:完成对光学信息的处理,实现对世界的理解的过程
      • 历史与发展
        • 视觉信号处理的三个层次
          • 计算理论层:视觉计算的目标是什么,逻辑是什么?是否合理?
          • 表达与算法层:为了实践计算理论,如何表达输入和输出,如何设计算法?
          • 硬件实现层:上述表达和算法如何通过物理实现?
      • 研究方向
        • 核心问题可分为判别式和生成式;还有与自然语言处理等模块的交叉任务
        • 具体任务:图像分类、目标检测、语义分割、目标跟踪、行为识别、行人识别、图像去噪、三维重建、图像描述生成、文本生成图像等……
      • 应用……
    • 图像分类
      • 定义:判断图像所属类别
      • 难点:视角变化大、姿态变化多、遮挡严重、类内差异大、尺度变化大等
      • 数据集:MNIST 70000 张数字图像,28*28;CIFAR数据集:60000 张图片,10 嘞常见物品,32*32;ImageNet 数据集,规模最大的图像数据集
      • 计算机中图像的表示:
        • 用二维函数 \(f(x,y)\) 表示,其中 \(x,y,f\) 均为离散值
        • \(x,y\) 表示坐标,\(f\) 表示灰度,可用三原色的灰度表示颜色
      • 基于手动特征提取的图像分类算法
        • 输入图像 -> 特征表示 -> 分类器 -> 类别预测
        • 特征提取算子——梯度直方图(HOG)
          • 动机:目标的局部形状能被梯度或边缘的方向密度分布很好描述
          • 优点
            • 对图像的几何和光学形变都能保持很好的不变性
            • 可以忽略人体的细微动作而不影响检测效果
            • HOG 特征多用于图像中的行人检测
          • 过程:
              1. 将彩色图像色彩变换和灰度校正变成黑白图像
              1. 对每个像素灰度分别计算垂直和水平梯度,并合成向量
              1. 将图像分为 16*16 个 cell ,每个内部统计各个方向上的梯度数量
              1. 相邻的 cell 组成 block,各个 cell 的梯度直方图合成特征序列
        • 特征提取算子——Haar
          • 一种对边缘敏感的特征,可以分为边缘特征、线性特征、中心特征
        • 特征提取算子——SIFT
          • 一种对旋转、光照、尺度缩放具有不变性的局部特征
        • 三种特征提取方法的比较:
          • HOG
            • 优点:具有对几何和光学形变d 良好不变性,可以忽略肢体动作,适合行人检测
            • 缺点:计算量大,无法处理遮挡
          • Haar
            • 优点:使用模版匹配,计算速度快,适用于人脸检测
            • 对旋转适应性不佳
          • SIFT
            • 优点:信息量丰富,检测匹配速度快,可以部分解决遮挡、角度变化的问题
            • 缺点:对边缘光滑的目标无法准确提取特征
        • 分类器:最近邻、线性分类、支持向量机
      • 基于卷积神经网络的图像分类算法
        • 写过代码了,具体细节描述太麻烦,略……
        • 基本结构:卷积层(Convolution),补零(Padding),批归一化(BatchNormalization),池化层(Pooling),Dropout,全连接层……
        • 残差连接
        • 图像数据增强:对图像进行几何变换、颜色变换,增强模型泛化能力
    • 摄像机几何——从三维到二维
      • 世界坐标系 -> 相机坐标系 -> 成像平面坐标 -> 图像坐标
      • 世界坐标系 -> 相机坐标系: \(P = R \mathbb P + T\),R 旋转矩阵,T 平移向量
      • 相机坐标系 -> 图像坐标:\(P^* = \frac{1}{z} KP\),K 相机内参矩阵
    • 三维重建——从二维到三维
      • 基于对应点重建
        • 通过两个相机图像的对应点位置,求解相机之间的相对位置,再计算出图像熵每个点在空间中的位置
        • 就是咔咔解方程组
        • 核心在于找到对应点,使用特征点描述子(比如 SIFT)
            1. 检测关键点
            1. 生成关键点描述子
            1. 关键点匹配
      • 基于神经网络重建
  • 自然语言处理

    • 概述
      • 自然语言处理的作用
        • 让机器与人类交流、让机器学习到知识、推动对语言和语言使用的科学理解
        • 语音识别、语音合成、机器翻译、信息提取……
      • 难点:
        • 模糊不清,存在歧义,没有正式定义符号到对象的映射
    • 上下文无关的文法:
      • 句法(Syntax):规定如何使用单次来组成句子
      • 语义:语言包含的含义
      • 文法(Grammer):是一组规则,定义了合法短语的树形结构
      • 语言:是遵循文法规则的子集
    • 句法分析(Parsing):
      • 根据文法规则分析一串单词以获得其短语结构的过程
      • CYK 算法(其实就是一种区间 dp)
        • 先将文法规则树转化为二叉树(CNF,乔姆斯基范式)
        • 然后具体过程就是区间 dp
      • A* 搜索
    • 分词(Tokenization)
      • 将文本序列分为独立的单词;或将文本序列分割为独立的句子
    • 基于马尔科夫模型的文本生成:达到一个状态后,决策只与当前状态有关
posted @ 2025-04-27 12:54  蒟蒻_william555  阅读(87)  评论(1)    收藏  举报