当前位置: 首页 > news >正文

计算机视觉CS231n学习(3)

卷积神经网络 CNN
  1. history:省略

  2. 卷积层 convolution layer

    作用:提取特征

    用什么提取特征:卷积核(卷积核的尺寸是超参数;卷积核中的值在反向传播中被更新;卷积核的深度与输入特征图的深度相同(默认))

    卷积过程:就是卷积核在输入特征图上进行滑动,可以设置stride滑动步长;可以设置padding填充输入特征图,可以实现统一输入特征图和输出特征图的尺寸,提取到更多的边缘特征

    输出:输出特征图(有几个卷积核就会输出多少个特征图)(关于输出特征图的尺寸,其实很好求,没必要套公式,画画图模拟一下就可以求出来了)(公式:(输入特征图大小+padding*2 - 卷积核大小)/ stride + 1)

  3. 池化层 pooling layer

    作用:减少特征

    用什么减少特征:最大池化(一个区域内保留最大值) 均值池化(一个区域内保留均值)

    池化过程:也是需要设置stride,但是池化操作不改变输出特征图的个数,池化操作filter无参,无需反向传播更新

    输出:输出特征图(数量不变,大小改变)

  4. 全连接层 full connected layer

    作用:y = wx + b ;预测结果

    用什么预测结果:神经网络(输入-隐藏-输出)(反向传播的时候利用梯度下降方法来更新参数,以减小loss值)

    输出:softmax输出预测结果

  5. 激活层 activation layer

    可以在卷积层后,可以在全连接层后,增加非线性特性,从而使神经网络能够表示和学习复杂的非线性关系

  6. 以上layer在不同的CNN当中都有不同的个数

训练神经网络
  1. mini-batch SGD

    LOOP:

    1. 采样一batch数据
    2. 前向传播,得到loss
    3. 反向传播,计算梯度
    4. 根据梯度更新参数
    5. 直到loss值平稳几乎不再变化
  2. 激活函数 activation function

    1. sigmoid

      问题:

      1. 饱和神经元会"杀死"梯度;

      2. Sigmoid函数的输出不以零为中心;(sigmoid的输出为正数,作为下一层的输入,它通过 “输入信号的单向性” 限制了权重梯度的更新方向,导致网络学习效率低下、收敛缓慢,甚至可能陷入局部最优。)

      3. exp() 计算比较复杂

      在这里插入图片描述

    2. tanh

      问题:

      1. 饱和神经元会"杀死"梯度;

在这里插入图片描述

  1. ReLU

    问题:

    1. Sigmoid函数的输出不以零为中心;
    2. x<0时的梯度:0
    3. x=0时的梯度:0(通过实验验证)

    在这里插入图片描述

  2. leaky ReLU

    在这里插入图片描述

  3. Maxout

    问题:

    1. 参数/神经元的数量翻倍

    在这里插入图片描述

  4. ELU

    问题:

    1. exp() 计算比较复杂

    在这里插入图片描述

  5. 数据预处理 data preprocessing

    1. Z-score 标准化
    X -= np.mean(X,axis=0) #均值
    X /= np.std(X,axis=0) #方差
    
    1. 数据的PCA(主成分分析)和白化处理
  6. 权重初始化 Weight Initialization

    正确的初始化方法是当前研究的热点领域…

  7. 批归一化 Batch Normalization

    1. 计算计算每个维度的实验均值和方差

    2. 归一化

      在这里插入图片描述

    3. BN层经常在全连接层或者卷积层后插入,在非线性层前插入

  8. 监督学习过程 Babysitting the Learning Process

    1. 预处理数据

    2. 选择结构

      确认损失值是否合理

      确保能对训练数据中非常小的部分进行过拟合

      从小规模正则化开始寻找能使损失下降的学习率

      损失不下降:学习率太小;损失爆炸:学习率太高

  9. 超参数优化 Hyperparameter Optimization

    1. 交叉验证策略:cross-validation strategy

      随机小批量的应用随机采样的超参数,第一阶段:仅进行少量训练周期以初步确定有效参数范围;
      第二阶段:延长训练时长,进行更精细的参数搜索 …(按需重复该过程)

    2. 观察loss、acc

  10. 反向传播参数更新优化

    1. SGD

      while True:weights_grad = evaluate_gradient(loss_fun,data,weights)weights -= step_size * weights_grad
      

      problem:

      沿浅维度进展极其缓慢,沿陡峭方向颤抖

      如果损失函数存在局部最小或者鞍点怎么办?零梯度,梯度下降陷入停滞

      我们的梯度是来自mini-batches所以有很多噪声

    2. SGD + Momentum

      vx = 0
      while True:dx = compute_gradient(x)vx = rho * vx + dxx -= learning_rate * vx
      

      建立“速度(velocity)”作为梯度的移动平均值

      rho代表“摩擦系数”;典型取值为rho=0.9或0.99

    3. Nesterov Momentum

      while True:dx = compute_gradient(x)old_v = vv = rho*v - learning_rate*dxx += -rho*old_v + (1+rho)*v
      
    4. AdaGrad

      grad_squared = 0
      while True:dx = compute_gradient(x)grad_squared += dx*dxx -= learning_rate*dx/(np.sqrt(grad_squared)+1e-7)
      

      基于各维度历史平方和的梯度逐元素缩放

    5. RMSProp

      grad_squared = 0
      while True:dx = compute_gradient(x)grad_squared = decay_rate * grad_squared + (1-decay_rate)*dx*dxx -= learning_rate*dx/(np.sqrt(grad_squared)+1e-7)
      
    6. Adam (almost)

      first_moment = 0
      second_moment = 0
      while True:dx = compute_gradient(x)first_moment = beta1 * first_moment + (1-beta1)*dxsecond_moment = beta2 * second_moment + (1-beta2)*dx*dxx -= learning_rate*first_moment/(np.sqrt(second_moment)+1e-7)
      
    7. Adam (full form)

      first_moment = 0
      second_moment = 0
      for t in range(num_iterations):dx = compute_gradient(x)first_moment = beta1 * first_moment + (1-beta1)*dxsecond_moment = beta2 * second_moment + (1-beta2)*dx*dxfirst_unbias = first_moment / (1-beta1**t)second_unbias = second_moment / (1-beta2**t)x -= learning_rate*first_unbias/(np.sqrt(second_unbias)+1e-7)
      

      采用β1=0.9、β2=0.999和学习率=1e-3或5e-4的Adam优化器 是许多模型的理想初始选择

    8. Adam一般是首选

    9. 以上所有的各种参数更新方法都有超参数学习率

      可以采取学习率随时间衰减策略:

      1. 每隔几个训练周期将学习率减半

      2. 指数衰减

        在这里插入图片描述

      3. 1/t衰减

        在这里插入图片描述

    10. 一阶优化(上述采取的算法都是)First-Order Optimization

      采用梯度形式线性近似,最小化近似值的步骤

    11. 二阶优化

      利用梯度和海森矩阵构建二次逼近,步进至逼近函数的极小值点

      没有超参数 没有学习率

      不是很适合深度学习

      在这里插入图片描述

      在这里插入图片描述

    12. L-BFGS

      如果有能力进行全批次更新,那么可以尝试L-BFGS,通常在完整批次、确定性模式下表现优异 即若存在单一确定性函数f(x)时 L-BFGS优化算法往往能发挥出色效果

  11. 正则化 Regularization

    1. 加入损失函数

      loss = loss + 入R(W)

    2. dropout

      在前向传播过程中,随机将部分神经元置零,丢弃概率是一个超参数,通常设为0.5

      更常见的情况:“反向随机失活” inverted dropout

    3. 一个常见的模式

      训练:添加一些随机性

      测试:消除随机性(有时是近似)

    4. Batch Normalization

    5. 数据增强 Data Augmentation

      水平翻转 horizontal flips

      随机裁剪和缩放 random crops and scales

      色彩抖动 color jitter

    6. dropConnect

    7. max pooling

    8. stochastic depth 随机深度:跳过某些层

  12. 迁移学习 transfer learning

    1. train on ImageNet

    2. small dataset(改变最后全连接分类的层结构,训练,更新参数,前面的网络结构不变-冻结)

    3. bigger dataset(改变最后全连接层,训练,更新参数,前面的网络结构不变-冻结)

      fine tune 微调

http://www.lryc.cn/news/610578.html

相关文章:

  • Vulnhuntr:用于识别远程可利用漏洞的开源工具
  • 《C++初阶之STL》【模板参数 + 模板特化 + 分离编译】
  • PCIe Base Specification解析(七)
  • 私有云盘新体验:FileRise在cpolar的加持下如何让数据管理更自由?
  • 24. 前端-js框架-Vue
  • Redis内存耗尽时的应对策略
  • K8S的NetworkPolicy使用教程
  • 升级 Elasticsearch 到新的 AWS Java SDK
  • iouring系统调用及示例
  • 学习游戏制作记录(将各种属性应用于战斗以及实体的死亡)8.5
  • 从循环嵌套到拓扑编排:LangGraph如何重构Agent工作流
  • 面向对象的七大设计原则
  • 【2025WACV-目标检测方向】
  • 目标检测、分割的数据增强策略
  • 智慧社区物业管理平台登录流程全解析:从验证码到JWT认证
  • 分布式网关技术 + BGP EVPN,解锁真正的无缝漫游
  • Java 异步编程工具类 CompletableFuture 详细介绍
  • CodeRush AI 助手进驻 Visual Studio:AiGen/AiFind 亮相(四)
  • 自然语言翻译--seq2seq
  • JavaWeb(苍穹外卖)--学习笔记17(Websocket)
  • 【题解】P3172 [CQOI2015] 选数(倍数莫反做法)
  • Spring-rabbit使用实战六
  • 智慧会所:科技赋能,开启休闲新体验
  • 计算机算术5-整形除法
  • 代码训练营DAY53 第十一章:图论part04
  • bpf系统调用及示例
  • K8S 性能瓶颈排查
  • CVE-2017-8291源码分析与漏洞复现(PIL远程命令执行漏洞)
  • 软件测试中,pytest 框架如何运行上传失败的测试用例?
  • docker国内镜像源列表