YSU人工智能导论课程笔记

部署运行你感兴趣的模型镜像

知识点复习

  1. 名词间的关系

  2. 机器学习 ≈ 构建一个映射函数
  3. 机器学习: 是对研究问题进行模型假设,利用计算机从训练数据中学习得到模型参数,并最终对数据进行预测和分析的一门学科。

  4. 名词关系

  • 知道怎么做:已经知道规则,通过构建知识库+推理引擎

  • 专家系统:适用于规则明确,边界清楚的领域

  • 容易做:模型可以从数据中学习映射或者规律(深度学习)

  • 不容易做:规则不容易学习,通过强化学习的试错学习经验,最大化积累奖励,适用于决策类/控制类任务

  1. 机器学习的流程

    原始数据->数据预处理->特征提取->特征转换->预测->结果

                       |-------------- 特征工程 ---------------|

    浅层学习:不涉及特征工程,其特征主要靠人工经验或特征转换方法来抽取。

  2. 表示学习:机器不能直接从字符串或者底层图像中直接获得人们对图片和对文本的理解。 表示学习时机器学习的核心问题。

    • 好的数据表示:

      • 有很强的表示能力

      • 使后续的学习任务变得简单

      • 应该具有一般性,是任务或者领域独立的

  3. 如何表示(表示形式)

    1. 局部表示(每个对象占据唯一位置,向量间互相正交,向量实=是稀疏的、高维的,没有相似度的概念)

      1. 离散表示、符号表示

      2. One-Hot向量(独热编码表示)

        核心思想:每一种类别用一个长度等于类别总数的向量表示

        向量中只有对应类别的位置是1,其他位置全是0

        举个例子

        假设你有一个特征 颜色(Color),它有三个可能取值:

        样本颜色
        1红色
        2蓝色
        3绿色

        类别集合是: ["红色", "蓝色", "绿色"]

        对应的 One-Hot 编码如下:

        颜色One-Hot 向量
        红色[1, 0, 0]
        蓝色[0, 1, 0]
        绿色[0, 0, 1]

        为什么要用 One-Hot 编码?

        因为:

        • 机器学习模型通常不能直接理解文字或类别标签

        • 如果直接把“红色=1, 蓝色=2, 绿色=3”,模型可能误以为 3 > 2 > 1 有数值关系

        • 但颜色之间没有“大小关系”,所以要把它变成互相独立的维度(正交向量);

        • 这样模型就不会错误地引入“顺序信息”。

    2. 分布式(distributed)表示(用一个地位的、稠密向量表示对象,每个维度都携带部分语义信息)

      1. 压缩、低维、稠密向量

  4. 深度学习定义:

    1. 一种实现机器学习的技术,是机器学习的重要分支

    2. 源于人工神经网络的研究。深度学习的模型结构是一种韩多隐藏层的神经网络

    3. 通过组合底层特征形成更加抽象的高层特征

传统机器学习与深度学习之间的区别

深度学习具有强大的特征学习和任务解决能力

  1. 机器学习三要素

    1. 模型

      1. 线性方法:

      2. 广义线性方法

        如果f(x)为可学习得非线性基函数,f(x,θ)就等价于神经网络

    2. 学习准则(本质上是一个损失函数)

      1. 类型损失函数应用场景说明
        均方误差(MSE)( L = \frac{1}{n}\sum (y{pred} - y{true})^2 )回归问题惩罚预测值偏差较大的样本
        平均绝对误差(MAE)( L = \frac{1}{n}\sumy{pred} - y{true})
        交叉熵损失(Cross Entropy)( L = -\sum y{true}\log(y{pred}) )分类问题衡量两个分布差距
        Hinge Loss(合页损失)( L = \max(0, 1 - y{true}\cdot y{pred}) )SVM分类强调分类间隔
      2. 期望风险:指的是在所有数据上判断得到的平均错误率。

      3. 经验风险:在训练集上得到的平均损失。

      4. 泛化误差:模型对于从未见过的数据上的预测误差。期望风险和经验风险之差

        1. 减小泛化误差的方法

          1. 正则化:在拟合数据保持泛化能力之间找到平衡

          2. 所有正则化方式的共同点是:

            让优化过程变得更加困难一点。让模型不能完全记住训练数据不至于过拟合

          3. 提前停止:使用一个验证集来测试每一次迭代的参数在验证集上是否最优,如果在验证集上错错误率不在下降就停止迭代

      5. 机器学习就是用经验风险逼近期望风险的过程。

    3. 优化(模型的训练目标是min(Loss))

      1. 梯度下降:不断更新参数来减小损失

        更新公式:θnew=θold−η⋅∂θ/∂L

        η:学习率 ∂θ/∂L:损失函数对参数的梯度,方向导数

        学习率大小效果图像比喻
        太大容易越过最优点,震荡不收敛跳太远
        太小收敛太慢,训练效率低爬山太慢
        合适平稳快速地到达最优解理想情况
  2. 常见机器学习问题:回归、分类、聚类

  3. 类别标签的ground truth

    ground truth:可翻译为地面实况等。在机器学习领域一般用于表示真实值、标准答案等,表示通过直接观察收集到的真实结果。
  4. 数据集拆分为训练集和测试集

    1. 留出法

      1. 步骤:

        1. 将数据分为两组,一组作为训练集,一组作为测试集。

        2. 利用训练集训练分类器,然后利用测试集评估模型,记录最后得分类准确率为此分类器的性能指标。

      2. 优缺点:处理简单,但是测试集上的预测性能的高低与数据集拆分情况有很大的关系,性能评价结果不够稳定

    2. k折交叉验证

      1. 过程

        1. 数据集被分为k份(k通常取5或者10)

        2. 不重复地每次取其中一份做测试集,用其他k-1份做训练集训练,这样会得到k个评价模型

        3. 将上述步骤2的k次评价地性能均值作为最后评价结果

  5. 分类问题是有监督学习的一个核心问题:输出值通常为有限个离散值

    1. 分类器:可以将分类器看成一个函数,将输入空间通过一定运算变换为输出空间

      1. 观察输入特征,然后判断该输出哪一类。

      2. 分类器可能是(决策树、逻辑回归、KNN近邻法)

    2. 图像分类、目标检测、目标分割

  6. KNN近邻法(最经典的监督学习分类算法之一

    1. 主要思路

      1. 计算距离:计算测试样本点(待分类点)到其他每个样本点的距离

      2. 选择K个点:对每个距离进行排序,然后选择出最小的K个点,这些点被称为测试样本点的K个最近邻

      3. 分类决策:对K个点所属的类别进行比较,根据少数服从多数的远测,将测试样本点归入K个点中占比最高的那一类

  7. 分类性能度量

    1. 准确率 = (TP + TN)/(P + N)

      实际类预测类=正预测类=负
      实际为正TP(真正例)FN(假负例)
      实际为负FP(假正例)TN(真负例)
    2. 精确率和召回率:精确率(precision)= TP/(TP + FP) 召回率(recall)= TP/(TP+FN)

      • 精确率反映了模型判定的正例中真正正例的比重

      • 召回率反映了总正例中被模型正确判定正例的比重。

  8. 模型性能评价方法

    1. 平均绝对误差MAE(mean_absolute_error)

    2. 均方误差MSE(mean_squared_error)及均方根差RMSE

    3. Log loss, 或称交叉熵loss(cross-entropy-loss)

      1. 交叉熵一般用于分类问题,交叉熵是一类损失函数

      2. 用于衡量模型预测的概率分布和真实标签的“相似程度”

      3. 交叉熵越大,预测与不准确;交叉熵越小,预测越准确

  9. python基础

    1. 数据类型:复数(complex):a + bj / complex(real,imag)

    2. 列表常用方法:

      1. 插入(insert(index,element)):向指定位置插入一个元素

      2. 追加(append(element)):向列表尾部添加一个新元素

      3. 删除(remove(value)):移除列表中第一个出现的值为value的元素

      4. 清空(clear()):将列表里所有元素清空

      5. del语句:

        1. del list[2]删除指定位置的元素

        2. del list[1:3]删除指定范围的元素

        3. del list删除整个列表

      6. 列表推导式:通过一个表达式和一个可选条件,从可迭代对象中生成列表

        [表达式 for 变量 in 可迭代对象 if 条件]

         # 从nums列表中选取满足条件的num加入新列表valid_nums中
         valid_nums = [num for num in nums if is_valid(num)]

    3. 元组:与列表的区别:

      1. 可以包含多个类型不同的元素;

      2. 用()包含且元素不能修改

      3. ()称为空元组

    4. 字典:键值对的映射

      1. 键必须唯一,不同元素的键不能相同

      2. 键必须是可哈希数据,不能是列表、集合、字典等类型

      3. 创建字典

        1. a={}

        2. b=dict()

        3. info={'name':张三,'age':19,'score':{'python':95, 'math':92}}

      4. 访问字典元素

        1. print(info['name'])通过键访问

        2. print(info['score'])={'python': 95, 'math': 92}

        3. print(info['score']['python'])=95

    5. 条件与循环语句

       if condition1:
           statement_block_1
       elif condition2:
           statement_block_2
       else:
           statemeny_block_3
       ​
       // 循环语句
       for i in range(1,3,step)//第三个参数为步长,末尾取不到
    6. 函数的定义与使用

       def add(a,b)
           return a+b
    7. Numpy库

      1. NumPy库是SciPy,Pandas等数据处理或科学计算库的基础

      2. NumPy的引用import numpy as np

      3. N维数组对象:ndarray

        1. 要求所有元素类型相同,数组下标从0开始

        2. 数组对象可以去掉元素间运算所需的循环,使一维向量更像单个数据

      4. ndarray数组的计算

      5. ndarray的对象属性

      6. ndarray与列表的转换

         glist = [[1,2,3], [5,4,1], [3,6,7]]
         garray = np.array(glist)
         glist1 = garray.tolist()
         print(garray)
         print(glist1)

    8. Matplotlib

       # 创建多项式并绘制函数
       import numpy as np
       import matplotlib.pyplot as plt
       %matplotlib inline
       func = np,polyld(np.array([1,2,3,4]).astype(float))
       x = np.linespace(-10,10,30)
       y = func(x)
       plt.plot(x,y)
       plt.xlabel('x')
       plt.ylabel('y')
       plt.show()
    9. Pytorch基本用法

      1. tensor张量:表示多维矩阵。是标量、向量、矩阵的推广形式

        tensor张量可以和Numpy数组相互转换。唯一不同的是:Pytorch可以在GPU上运行,而NumPy的数组只能在CPU上运行

        张量是多维数据容器,可以表示用来存储图片、音频、视频、点云等各种数据

        名称维度举例说明
        标量(Scalar)0维3只有一个数值
        向量(Vector)1维[1, 2, 3]一维数组
        矩阵(Matrix)2维[[1, 2, 3], [4, 5, 6]]二维数组
        张量(Tensor)n维比如 [2, 3, 4, 5](四维)多维数组
      2. 基本操作方法:

        调用方法释义
        torch.tensor()Torch产生一个张量
        torch.rand()Torch生成一个随机矩阵
        torch.zeros()Torch生成一个全零矩阵
        torch.ones()Torch生成一个全一矩阵
        torch.from_numpy(numpy_data)Torch数组转张量
        torch_data.numpy()Torch张量转数组

        流程梳理

         list(列表) ---> numpy_array(numpy数组) ---> tensor(张量)
                     |                          |
             np.array(list_data)      tensor.from_numpy(numpy_data) 
             
         list(列表) <--- numpy_array(numpy数组) <--- tensor(张量)
                     |                          |
             numpy_data.tolist()           torch_data.numpy()     
      3. tensor对象属性(用张量方法)

      对象属性释义
      Tensor.ndim()返回该张量的维度
      Tensor.shape/Tensor.size返回张量的形状
      Tensor.shape[n]返回第n个维度的长度
      Tensor.numel()返回所有元素的总数
       import torch
       ​
       # 创建一个四维张量
       x = torch.ones(2, 3, 4, 5)
       ​
       print(x.ndim)      # 4
       print(x.shape)     # torch.Size([2, 3, 4, 5])
       print(x.shape[0])  # 2
       print(x.size())    # torch.Size([2, 3, 4, 5])
       print(x.numel())   # 120

      区分

      关于torch.tensor.的区别

      区别点torch.xxx()Tensor.xxx()
      调用方式需要显式传入张量直接对张量对象调用
      举例torch.reshape(x, (2,3))x.reshape(2,3)
      代码风格偏函数式(Functional)偏面向对象(OOP)
      常见用途操作多个张量或函数式 API操作单个张量实例
      1. torch方法

       torch.full()
       torch.from_numpy()
       torch.arrange()       # 生成一个一维张量,其值介于[start,end),以                      # step为步长取间隔值
       torch.reshape()       # 更改张量的形状(尺寸和维度)不包括原始数据                      # 的大小和顺序
       torch.squeeze()       # 维度压缩,删除输入张量中大小为1的所有维度
                             
       torch.unsqueeze()     # 维度扩展,返回一个新的张量,对输入的既定位                      # 置插入维度1

深度神经网络DNN

1.神经元与激活函数

神经元:就是加权求和 + 激活判断

非线性判断

人脑里的神经细胞接收到别的神经元传来的信号,信号足够强就“兴奋”放电,不够则不反应

这个“要不要反应”的过程,就是非线性判断

人工神经元公式

z = w1·x1 + w2·x2 + ... + wn·xn + b
输出 = 激活函数( z )

通俗理解

输入像考试成绩(Xi),Wi 像不同科目的权重(语文0.2,数学0.5...),b像额外加分,最后加权求和,再用激活函数判断“是否及格” → 输出。

激活函数存在的意义

如果没有激活函数,网络只是一堆加权相加,本质是线性回归->无法解决复杂问题。

有了激活函数,网络可以变得更加聪明,能够模拟非线性关系(比如识别图片、语音、风格转换等)

常见激活函数对比

激活函数输出范围直观理解缺点
Sigmoid (0,1)像概率门槛,小于0给0.01,大于0给0.99导数很小 → 梯度消失,训练慢
ReLU max(0,z)负数直接抛弃,正数全部保留简单有效,训练快负数部分“死”了(Dead ReLU)
Leaky ReLU / PReLUReLU改进版,负区也留一点点梯度解决ReLU死区问题略复杂
ELU / SELU负区带平滑曲线更平滑收敛更稳计算量比ReLU大

实际深度网络中 ReLU 系列是主流,Sigmoid多用于二分类输出层,Softmax用于多分类输出


深度学习的三个步骤

  1. 定义网络

  2. 损失函数

  3. 优化

2.网络结构的理解

网络 = 一层一层连接的神经元计算工厂

  • 输入层:只接受数据

  • 隐藏层:不断总“加权 -> 激活”

  • 输出层:根据任务输出概率/数值

如果每层都完全连接(每个节点直接均相连),就是DNN(深度前馈神经网络)

如果换成卷积、池化,就变成了CNN。


3.训练的本质:不停的“犯错 -> 修正”

  1. 前向传播:输入 -> 一层层计算 -> 预测结果

  2. 计算损失:和真实标签对比,例如猫的概率应该是[0,0,1]但输出是[0.2,0.3,0.5]

  3. 反向传播:误差反向传,计算每个参数应该“加”还是“减”→ 调整权重

  4. 迭代到模型预测越来越准确

    反向传播就是链式法则 + 梯度下降


CNN卷积神经网络

1.前言

全连接网络(DNN)的问题:全部节点连接太大,训练满,容易过拟合

CNN的解决方式

不要一上来就全连接,而是先用”小窗口"扫描图像 -> 逐步提取有用的特征 -> 再决策分类


2.CNN的步骤

1.卷积(Convolution):用卷积核扫描图片提取特征

假设有一张图片,CNN的策略是用一个卷积核(如3X3大小)扫描全图

图像区域(窗口)卷积核(看成小滤镜)输出一个数字(特征强度)
3×3像素块3×3参数矩阵点乘求和 = 这个位置的特征响应

每一个卷积核=学会识别一种特征(如横线、竖线等)有多少个卷积核就有多少个特征

每次卷积得到的结果就叫做特征图

输出特征图大小计算公式

W_out = (W_in - F + 2P) / S + 1
符号含义示例理解(图片大小32×32)
输入W_in输入宽/高32
F卷积核尺寸5×5 → F=5
Ppadding0 或 1
S步长(stride)通常是1或2
输出W_out卷积后的特征图尺寸28(如果不补零)

padding:为了让卷积核能“照顾”到图像边缘,同时控制输出尺寸不压缩太快。

padding=0,卷积得到的结果图小

padding=1,卷积得到的结果图大

2.参数共享

DNN = 每个像素 ->每个神经元都有权重(参数过多)

CNN = 一个卷积核(如3X3)就只有九个参数,但是可以全图复用

参数大幅度减少,训练更加稳定


3.池化

卷积后进行池化(降采样):

通俗理解 :在一个区域里提取到最能代表该区域的特征值

比如:在2X2的矩形中去最大值,即在四个数中取最大值,

池化目的解释类比
降低数据量 → 加快训练28×28 → 14×14,直接减少四分之三特征点缩略图 vs 原图加载速度
防止过拟合 → 提高泛化不记小细节,网络不容易死记硬背训练集噪声学习不要背每个字,要理解大意
获得平移不变性猫耳稍微移动,池化后还是落在那块区域眼睛往左1个像素还是眼睛

池化尺寸公式

在卷积得到的尺寸结果上继续进行计算

对池化来说:通常kernel size = stride

W_out = (W_in - F + 2P) / S + 1 取整

总结

🔹 卷积 = 发现特征

🔹 池化 = 压缩+筛选重要特征 → “只要信号最强的那个” 

🔹 这样减少参数 + 抗噪声 + 抗平移 + 防过拟合

  • 最大池化

  • 平均池化

结构

输入层 -> [卷积层 -> 激活函数 -> 池化层] × n -> 展平 -> 全连接层 -> 输出层


测试样本和训练样本

数据集作用
训练样本(Training Data)用于CNN模型的参数学习,通过反向传播不断调整CNN模型参数,使CNN模型在该部分数据上的预测误差最小化:
测试样本(Test Data)不参与模型参数调整,仅用于评估模型训练完成后的泛化性能,判断模型是否过度拟合训练数据,能否对新的数据进行准确判断

参数初始化

  1. 随机初始化

    1. Gaussian分布初始化:最简单的初始化方法

    2. 均匀分布初始化:在区间[-r,r]之间采用均匀分布进行初始化

  2. 固定值初始化:偏置(Bias)通常用0来初始化

数据预处理

  • 数据归一化(统一数值范围):

    • 归一化作用:

      加速训练,提高模型稳定性,提升最终准确率

    • 最大最小值归一化

    • 正态分布标准化归一化

    • PCA

学习率

大小影响
太小梯度下降速度慢,学习效率底下
太大梯度更新过大,错过最优点,无法稳定收敛

优化器

作用在反向传播之后,参数更新之前。反向传播计算出每个参数的梯度∇θL,优化器再根据优化策略更新参数

优化器特点适用场景
SGD最基础,学习率固定简单网络
Momentum增加动量,加速收敛避免震荡
RMSProp自适应学习率,适合非平稳目标RNN、深层网络
AdamRMSProp + Momentum,常用大多数神经网络

卷积神经网络

  1. 一种前馈神经网络

  2. 结构特性

    1. 局部链接

    2. 权重共享

    3. 空间或时间上的次采样

  3. 用卷积层代替了全连接层

  4. 特征映射:图像经过卷积以后得到的特征,卷积核看成一个特征提取器,有几个卷积核就有几个特征

LeNet-5

  • 共有七层

  • 常用于识别手写数字

AlexNet

  • 第一个现代深度卷积网络模型:使用GPU进行并行训练,采用ReLU作为非线性激活函数,使用Dropout防止过拟合,使数据增强训练

  • 5个卷积层、3个汇聚层、3个全连接层

自注意力机制

在现代深度学习中非常核心的概念:尤其是在transformer模型(BERT、GPT)中

概念:让模型在处理一个序列的每个元素时可以关注到同一序列中其他位置的相关信息,而不只是依赖相邻的信息。

对比维度DNNCNNRNNSelf-Attention
数据类型普通结构化数据图像、语音时间序列、文本文本、图像、序列
连接方式全连接局部卷积时间递归全局注意力
特征提取人工或自动但局部局部空间特征时间依赖全局关系
并行能力
长距离依赖能力较弱(改进可中等)
代表模型MLPResNet, VGGLSTM, GRUTransformer, BERT, GPT

RNN(Recurrent Neural Network)循环神经网络

  • 适用范围:处理序列数据,比如语音识别、文本分析等

  • 与传统神经模型的区别:隐藏层的节点之间有连接

  • 参数共享:每一层都参数共享

  • 任务序列类型:

    many to many (机器翻译)many to one(情感分类) one to many(文本生成)

  • LSTM(长短期记忆网络)

    • 用于解决RNN无法保留长期信息的问题,LSTM引入了细胞状态Ct,并用“门”结构来控制信息的保留与丢弃

    • 结构与门

      • 遗忘门:决定保留多少旧的cell state

      • 输入门:决定写入多少新信息

      • 输出门:决定什么时候把状态和输入放在一起输出

    • 变体:GRU(把门简化为两个门(更新门和重置门))计算更简单且性能相近

  • 双向RNN

    • 概念:当前步的输出与序列前后都相关时,双向RNN用两个RNN一个向前一个向后。把两者的隐藏状态拼接或相加,得到更丰富的上下文表示

  • 基本结构:

    • 输入层

    • 隐藏层:常见激活函数tanh(非线性激活函数)

    • 输出层

  • 词表示:(用词向量降维,抓住语义间的关联)

    • One-Hot

      • [苹果, 香蕉, 凤梨, 桃子],对应表示的词索引为1,其余为0

      • 优缺点:简单,但是高维稀疏,没有语义信息

    • Word2Vec

      • 概念:将词映射为低维连续向量,能捕捉语义相似度

      • 训练方法:Skip-gram或CBOW,通过上下文窗口优化词向量

  • 中文分词(jieba)

    • 三种模式:

      • 精确模式:尽量切分最精确的词

      • 全模式:把所有可能的词都分出来(有冗余),速度快

      • 搜索引擎模式:对长词进行再切分,适合索引/检索

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值