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

深度学习遇到的问题

在这里插入图片描述

文章目录

  • 梯度爆炸,梯度消失
  • 鞍点问题
  • 局部最小问题
  • 解决策略
    • 初始化参数策略
    • Mini梯度下降法
      • 如何选择合适的
    • 梯度下降算法的优化
    • 学习率衰减

梯度爆炸,梯度消失

在梯度函数上出现的以指数级递增或递减的情况分别被称为梯度爆炸,梯度消失
这个写的很清楚
梯度消失和梯度爆炸

鞍点问题

在这里插入图片描述

在鞍点附近,基于梯度的优化算法(几乎目前所有的实际使用的优化算法都是基于梯度的)会遇到较为严重的问题:
鞍点处的梯度为零,鞍点通常被相同误差值的平面所包围(这个平面又叫Plateaus,Plateaus是梯度接近于零的平缓区域,会降低神经网络学习速度),在高维的情形,这个鞍点附近的平坦区域范围可能非常大,这使得SGD算法很难脱离区域,即可能会长时间卡在该点附近(因为梯度在所有维度上接近于零)。

在SGD中可能第n个样本使其脱离鞍点,但由于鞍点附近的平坦区域范围可能非常大,导致损失函数值梯度非常小,从而使后续样本的训练使其在鞍点附近波动

局部最小问题

在这里插入图片描述

因为训练样本多,所以总有很多样本可以使其摆脱局部最小

解决策略

初始化参数策略

  • 初始化参数,权重随机,使其不相等

  • 在tanh中,权重尽量小使其数值在原点附近,梯度大,变化更明显
    在这里插入图片描述

Mini梯度下降法

  • Batch(批量):Batch 是指将整个训练数据集作为一个大批量进行训练。在每次迭代时,模型使用整个训练数据集的样本进行前向传播、计算损失和反向传播,然后根据这些样本的梯度更新模型的参数。相比于 mini-batch,使用 batch 的训练过程可能会占用更多的内存和计算资源,因为需要同时处理整个数据集。

  • Mini-batch(小批量):Mini-batch 是指从训练数据集中选择的较小的数据子集。在训练模型时,通常将整个训练数据集划分为多个 mini-batch。每个 mini-batch 包含一定数量的训练样本,通常是2的幂次方,例如 32、64 或 128。模型使用每个 mini-batch 的样本来进行前向传播、计算损失和反向传播,然后根据这些样本的梯度更新模型的参数。使用 mini-batch 的主要目的是减少计算开销和内存占用,冲分利用计算资源,提高训练的效率。

  • 随机梯度下降(Stochastic Gradient Descent, SGD)
    batch_size=1,由于失去了GPU并行计算,所以计算慢

epoch含义

  • Batch, Mini-batch,随机梯度下降对比
特性Batch GDMini-Batch GDSGD
梯度计算全数据集小批量样本单样本
更新频率每epoch一次每batch一次每样本一次
内存需求极高中等极低
收敛速度最快(初期)
梯度噪声中等极高
收敛稳定性稳定适中震荡
硬件利用率高(GPU并行)

现代深度学习实践:95%+场景使用Mini-Batch(批次大小32-512),仅在极小数据集或理论研究中使用Batch方法。

  • 损失函数值变化
    在这里插入图片描述
    随机梯度下降的噪声比mini-batch更大(波动更多)

在这里插入图片描述

因此,选择一个合适的大小进行 Mini-batch 梯度下降,可以实现快速学习,也应用了向量化带来的好处,且成本函数的下降处于前两者之间。

如何选择合适的

  • 如果训练样本的大小比较小,如m≤2000时,选择batch梯度下降法;

  • 如果训练样本的大小比较大,选择Mini-Batch梯度下降法。为了和计算机的信息存储方式相适应,代码在mini-batch大小为2的幂次时运行要快一些。典型的大小为26,27,28,29,mini-batch的大小要符合CPU/GPU内存。

  • Mini-Batch通常是更合适的

梯度下降算法的优化

学习率衰减

http://www.xdnf.cn/news/14898.html

相关文章:

  • C++如何进行性能优化?
  • qt绘制饼状图并实现点击即放大点击部分
  • 前端接收流式数据demo,并用markdown解析数据,包括EventSource和fetch两种方式
  • 前端交互自定义封装类:“双回调自定义信息弹窗”
  • 香港维尔利健康科技集团AI健康云平台通过国际信息安全认证,打造全球健康数据合规新标杆
  • Transformer-BiGRU、Transformer、CNN-BiGRU、BiGRU、CNN五模型回归预测对比,Matlab代码实现
  • Ollama+OpenWebUI 0.42+0.3.35 最新版一键安装教程,解决手动更新失败问题
  • 传输层协议TCP、UDP
  • [NOIP][C++]洛谷P1376 [USACO05MAR] Yogurt factory 机器工厂
  • 实战Linux进程状态观察:R、S、D、T、Z状态详解与实验模拟
  • 智能推荐社交分享小程序(websocket即时通讯、协同过滤算法、时间衰减因子模型、热度得分算法)
  • 自动驾驶感知系统
  • 爬虫-request处理POST
  • 当DMA想“越狱”:IOMMU怎么硬核拦截?
  • c语言学习_函数递归
  • 深度学习-多分类
  • Linux网络:UDP socket创建流程与简单通信
  • AWS OpenSearch Dev Tools使用
  • FastAPI Docker环境管理脚本使用指南
  • 人体坐姿检测系统开发实战(YOLOv8+PyTorch+可视化)
  • 微服务集成snail-job分布式定时任务系统实践
  • 向量与向量组的线性相关性 线性代数
  • Spring Boot + Easy Excel 自定义复杂样式导入导出
  • [ESP32]VSCODE+ESP-IDF环境搭建及blink例程尝试(win10 win11均配置成功)
  • 香港站群服务器价格怎么样?
  • 容器技术入门之Docker环境部署
  • ffmpeg 中config 文件一些理解
  • Netstat高级分析工具:Windows与Linux双系统兼容的精准筛查利器
  • 一天一道Sql题(day03)
  • 如何用Python编程计算权重?