• 计算机视觉与深度学习(线性分类器、全连接神经网络)


    参考:https://www.bilibili.com/video/BV1V54y1B7K3

    图像分类

    1. 什么是图像分类任务,它有哪些应用场合?

    2. 图像分类任务有哪些难点?
      视觉、光照、尺度、遮挡、形变、遮挡、形变、背景杂波、类内形变、运动模糊

    3. 基于规则的方法是否可行?

    4. 什么是数据驱动的图像分类范式?

    5. 常用的分类任务评价指标是什么?

    数据驱动的图像分类方法

    1.数据集构建

    有监督、无监督数据

    2.分类器设计与学习

    在这里插入图片描述
    图像表示:
    像素表示
    全局特征表示(如GIST,抽出频率,适合城市建筑、风景、大场景分类)
    局部特征表示(如SIFT特征+词袋模型)

    3.分类器决策

    在这里插入图片描述

    分类器
    • 近邻分类器
    • 贝叶斯分类器
    • 线性分类器
    • 支撑向量机分类器
    • 神经网络分类器
    • 随机森林
    • Adaboost

    了解每个工具的优势和劣势,
    懂原理:工具需要修改,以适应场景

    损失函数
    • 0-1损失
    • 多类支撑向量机损失
    • 交叉嫡损失
    • L1损失
    • L2损失
    优化方法

    一阶方法

    • 梯度下降
    • 随机梯度下降
    • 小批量随机梯度下降

    二阶方法

    • 牛顿法
    • BFGS
    • L-BFGS
    训练过程
    • 数据集划分
    • 数据预处理
    • 数据增强
    • 欠拟合与过拟合
      • 减小算法复杂度
      • 使用权重正则项
      • 使用dropout正则化
    • 超参数调整
    • 模型集成
    评价指标

    正确率
    错误率
    top1、top5正确率

    线性分类器

    数据集:CIFAR10数据集

    定义

    线性分类器是一种线性映射,将输入的图像特征映射为类别分数。

    线性分类器决策步骤

    1. 图像表示成向量
    2. 计算当前图片每个类别的分数
    3. 按类别得分判定当前图像

    在这里插入图片描述
    统计:模板记录了统计信息
    在这里插入图片描述
    几何:分界面
    在这里插入图片描述

    损失函数

    定义:用于度量分类器预测值和真实值不一致成都,输出的非负实值可以作为反馈信号来对分类器参数进行调整,以降低当前示例对应的损失值,提升分类器分类效果

    在这里插入图片描述

    多类支持向量机损失

    在这里插入图片描述
    例子
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    正则项

    解决唯一性,让模型有了偏好,
    在这里插入图片描述

    超参数:在开始学习过程之前设置,对模型性能有着重要的影响。

    L2正则项
    在这里插入图片描述
    常用的正则项损失
    在这里插入图片描述

    参数优化

    定义:机器学习核心步骤之一,利用损失函数的输出值作为反馈信号来调整分类器参数,以提升分类器对训练样本的预测性能

    优化算法目标
    在这里插入图片描述

    梯度下降算法

    方向:负梯度方向
    走多远:步长,学习率

    在这里插入图片描述
    梯度向量
    1.数值法,计算量大,不精确!

    在这里插入图片描述
    2.解析法,精确 速度快 函数导数推导容易错
    在这里插入图片描述
    数值梯度有什么作用?
    答:求梯度时一般使用解析梯度,而数值梯度主要用于解析梯度的正确性校验(梯度检查)。

    在这里插入图片描述

    梯度下降算法的计算效率
    在这里插入图片描述

    速度太慢

    随机梯度下降算法
    在这里插入图片描述
    每次迭代朝着整体最优梯度方向

    小批量梯度下降算法
    在这里插入图片描述

    总结

    在这里插入图片描述

    数据集划分

    在这里插入图片描述
    在这里插入图片描述
    测试集 上计算精度
    在这里插入图片描述
    K折交叉验证
    数据太少,验证集合包含的样本太少,如果再划分数据钱进行不同的随机打乱,最终得到的模型性能差别很大。在这里插入图片描述

    通常取5折、10折
    在这里插入图片描述
    在这里插入图片描述

    数据预处理

    去均值:数值都在中心,反映相对差值,,不会受到数值范围影响
    归一化:让两个方向不会受到数值范围影响,去量纲影响

    在这里插入图片描述
    去相关
    让数据独立、不考虑一些维度,达到降为维度效果
    在这里插入图片描述

    全连接神经网络

    全连接神经网络级联多个变换来实现输入到输出的映射。
    /多个线性分类器通过级联后的结果

    注意非线性操作不可以去掉
    在这里插入图片描述

    多层感知器

    全连接神经网络的权值

    在这里插入图片描述
    通过指定模板个数,使得模板更准确,模板越多,记录的信息越准确
    (全联接神经网络的描述能力更强。因为调整W行数等于增加模板个数,分类器有机会学到两个不同方向的马的模板)

    全连接神经网络与线性不区别

    全连接神经网络与线性分类器区别:
    线性分类器只能解决线性可分的问题
    全连接神经网络可以解决线性不可分的问题
    在这里插入图片描述
    依赖全连接网络非线性操作,通过非线性映射关系, 实现线性不可分的类别的学习

    全连接神经网络绘制与命名

    通常选择第二种表示
    在这里插入图片描述
    N层神经网络
    N=除了输入层的其他层数

    在这里插入图片描述

    激活函数

    多层感知器最关键的是激活函数

    去掉激活函数,全连接神经网络退化成线性分类器
    常用激活函数:
    sigmoid 不是对称的,5的时候接近于1,映射到(0,1)
    tanh 对称,3的时候接近于1,映射到(-1,1)
    ReLU,比0大就是自己,小于0等于0
    Leaky ReLU=max(0.1x,x)

    在这里插入图片描述

    网络结构设计

    神经元个数越多,分界面可以越复杂,在这几个集合上的分类能力越强

    在这里插入图片描述
    1.用不用隐层,用一个还是用几个隐层?(深度设计)
    2.每隐层设置多少个神经元比较合适?(宽度设计)
    没有统一的答案!

    依据分类任务的难易程度来调整神经网络模型的复杂程度。分类任务越难,我们设计的神经网络结构就应该越深、越宽。但是,需要注意的是对训练集分类精度最高的全连接神经网络模型,在真实场景下识别性能未必是最好的(过拟合)。

    小结

    • 全连接神经网络组成:一个输入层、一个输出层及多个隐层;
    • 输入层与输出层的神经元个数由任务决定,而隐层数量以及每个
      隐层的神经元个数需要人为指定;
    • 激活函数是全连接神经网络中的一个重要部分,缺少了激活函数,
      全连接神经网络将退化为线性分类器。

    在这里插入图片描述

    损失函数

    SOFTMAX

    (logistic回归扩展)
    把神经网络的绝对输出变成概率
    在这里插入图片描述
    示例
    在这里插入图片描述

    交叉熵

    定义:度量两个分布的距离,两个分布越接近,交叉熵损失值越小

    预测分布于one-hot表示的真实分布
    在这里插入图片描述
    多类支撑向量机损失,只考虑xi是否大于xj大过1,希望两个分布越接近越好

    在这里插入图片描述

    熵,反映信息量的大小
    [1,0,0] H§最小,[1/3,1/3,1/3]H§最大

    之所以叫散度,而不是距离,距离有交换性。
    在这里插入图片描述
    在这里插入图片描述

    交叉熵损失vs多类支撑向量机损失

    计算过程比较:
    在这里插入图片描述

    计算结果:
    一个类别概率高的时候,压低别的类别概率方向优化
    在这里插入图片描述
    损失可能变化很小,预测精度上升

    优化算法

    计算图与反向传播

    计算图帮助计算输出相对于任何w的梯度

    计算图是一种有向图,它用来表达输入、输出以及中间变量之间的计算关系,图中的每个节点对应着一种数学运算。

    正向:可以求结果
    反向:使用链式法则,可以算输出到输入梯度

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    f 对 f求导就是1

    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    总结
    任意复杂的函数,都可以用计算图的形式表示
    在整个计算图中,每个门单元都会得到一些输入,然后,进行下面两个计算:
    a)这个门的输出值
    b)其输出值关于输入值的局部梯度。

    利用链式法则,门单元应该将回传的梯度乘以它对其的输入的局部梯度,
    从而得到整个网络的输出对该门单元的每个输入值的梯度。

    计算图颗粒度
    caffe 写出一些函数,把导数求出来,写入到计算模块,提高效率
    tensorflow 所有算法拆解成计算图,计算效率比较低
    在这里插入图片描述

    计算图常用的门单元
    在这里插入图片描述
    在这里插入图片描述

    再谈激活函数

    梯度消失,梯度消失 本质是由于链式法则的乘法特性导致的。

    sigmoid激活函数,求导后最大为1/4,很多时候为0,梯度回传容易消失
    在这里插入图片描述
    梯度爆炸
    梯度爆炸也是由于链式法则的乘法特性导致的。

    导致步长太长,可以做梯度裁剪

    在这里插入图片描述
    tanh(x)
    在这里插入图片描述
    relu函数,计算简单
    在这里插入图片描述
    Leakly Relu,0没有导数(但基本不会出现0)

    在这里插入图片描述

    尽量选择ReLU函数或者Leakly ReLU涵数,相对于Sigmoid/tanh,
    ReLU函数或者Leakly ReLU函数会让梯度流更加顺畅,训练过程收敛得更快。

    动量法与自适应梯度

    梯度算法改进

    • 梯度下降算法存在问题
    • 动量法
    • 自适应梯度与RMSProp
    • ADAM
    • 总结
    梯度下降算法存在问题

    在这里插入图片描述

    动量法

    目标:改进梯度下降算法存在的问题,即减少震荡
    改进思想:利用累加历史梯度信息更新梯度

    v是累加值
    在这里插入图片描述
    在这里插入图片描述
    不为1会慢慢衰减,

    累加值 累加过程中 震荡梯度会被减弱,走的很慢但是一致的方向会被加强

    动量法还有什么效果?
    避免鞍点

    在这里插入图片描述

    自适应梯度与RMSProp

    自适应梯度法
    在这里插入图片描述
    AdaGrad

    累加过程此消彼长
    作用:参数空间更为平缓的方向,会取得更大的进步(因为平缓,所以历史梯度平方和较小,对应学习下降的幅度较小),并且能够使得陡峭的方向变得平缓,从而加快训练速度。

    缺点:由于是累积平方梯度,导致学习率过快接近0

    在这里插入图片描述
    r累加过大,调节梯度能力变弱

    RMSProp
    在这里插入图片描述

    ADAM

    在这里插入图片描述
    总结
    常用:SGD+动量(效果很好,需要调参) ,ADAM

    动量(不动再往下降)
    在这里插入图片描述

    在这里插入图片描述

    训练过程

    权值初始化

    建议:采用随机初始化
    在这里插入图片描述
    参数都一样,无法训练

    初始化不好,网络无法训练
    输出为0,衰减,无法训练
    在这里插入图片描述

    在这里插入图片描述

    实验结论:
    初始化时让权值不相等,并不能保证网络能够正常的被训练。
    有效的初始化方法:使网络各层的激活值和局部梯度的方差在传播过程中尽量保持一致,以保持网络中正向和反向数据流动。

    Xavier初始

    tanh
    在这里插入图片描述
    在这里插入图片描述
    输入与输出有相同的分布

    ReLU
    多次迭代后输出大部分集中在0
    在这里插入图片描述
    HE初始化(MSRA)

    在这里插入图片描述

    总结

    • 好的初始化方法可以防止前向传播过程中的信息消失,也可以解决反向传递过程中的梯度消失。
    • 激活函数选择双曲正切或者Sigmoid时,建议使用Xaizer初始
      化方法;
    • 激活函数选择ReLU或Leakly ReLU时,推荐使用He初始化方法。
    批归一化

    输出 批归一化,解决梯度消失,放在非线性操作前
    在这里插入图片描述

    • 正向传播,不至于无信息
    • 反向传递,梯度在最有效范围内

    在这里插入图片描述

    gama(分布的方差)和beta(分布的中心)自己学习()
    在这里插入图片描述

    问题:单张样本测试时,均值和方差怎么设置?
    回答:来自于训练中。累加训练时每个批次的均值和方差,最后进行平均,用平均后的结果作为测时的均值和方差。

    加入批归一化,让神经网络初始值不那么敏感

    欠拟合、过拟合与dropout

    过拟合:
    定义:深度学习常常遇见的现象,出现过拟合,得到的模型在训练集上的准确率很高,但在真实的场景中识别率确很低。

    过拟合——是指学习时选择的模型所包含的参数过多,以至于出现这一模型对已知数据预测的很好,但对未知数据预测得很差的现象。这种情况下模型可能只是记住了训练集数据,而不是学习到了数据特征

    欠拟合——模型描述能力太弱,以至于不能很好地学习到数据中的规律。产生欠拟合的原因通常是模型过于简单

    • 机器学习的根本问题是优化和泛化的问题。
    • 优化——是指调节模型以在训练数据上得到最佳性能;
    • 泛化——是指训练好的模型在前所未见的数据上的性能好坏。
      在这里插入图片描述

    应对过拟合
    最优方案:获取更多的训练数据
    次优方案:
    在这里插入图片描述

    分散权值
    在这里插入图片描述

    随机失活 Dropout

    在这里插入图片描述

    模型参数减少
    权重分散,起正则化

    信息不过于集中,也让每个神经元记录更多信息
    在这里插入图片描述

    多个小网络集成
    在这里插入图片描述

    训练阶段与测试阶段不一致,测试阶段需要乘以P
    在这里插入图片描述

    模型正则与调参优化

    在这里插入图片描述
    在这里插入图片描述
    超参数优化方法
    网格搜索法:
    随机搜索法:
    在这里插入图片描述

    在这里插入图片描述

    超参数搜索策略

    在这里插入图片描述

    在这里插入图片描述

  • 相关阅读:
    提取当前文件夹下多文件夹中的数据
    如何使用Spring Security控制会话
    大数据项目实战(安装Hive)
    vue单页面怎么做SEO优化
    Vue基础知识——数据绑定、数据代理
    OpenCV(八)——基本线条操作
    【重识云原生】第四章云网络4.7.2节——virtio网络半虚拟化简介
    不同版本vue安装vue-router
    前端开发中如何高效渲染大数据量
    Lora训练Windows[笔记]
  • 原文地址:https://blog.csdn.net/weixin_38235865/article/details/126195034