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

深度学习遇到的问题

在这里插入图片描述

文章目录

  • 梯度爆炸,梯度消失
  • 鞍点问题
  • 局部最小问题
  • 解决策略
    • 初始化参数策略
    • 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.dtcms.com/a/271420.html

相关文章:

  • 一[3.7] YOLO系列基础(2)- “Bottleneck模块详解”
  • JavaScript对象的深度拷贝
  • 17.Spring Boot的Bean详解(新手版)
  • 十、Rocky Linux 9.x 在线安装Nginx 1.28.0
  • 豆包编写Java程序小试
  • 电子元器件基础知识总结
  • 基于SpringBoot+Vue的疫情问卷调查与返校信息管理系统】前后端分离
  • 城市地质大数据平台:透视地下空间,赋能智慧未来
  • git断点续传,中断后继续下载
  • 【计算机三级网络】——IP校园网大题(第二道):路由代码填空
  • 如何选择时序数据库:关键因素与实用指南
  • 20250709: WSL+Pycharm 搭建 Python 开发环境
  • 数据结构--堆的实现
  • 【黑马点评】(四)分布式锁
  • 深入理解 Spring AOP 代理机制:JDK 动态代理与 CGLIB 的对比与选择
  • c++学习-类中类成员变量的创建和释放顺序2-资源new出来的对象未被手动delete
  • 19-C#静态方法与静态类
  • HashMap的get与put流程源码深度解析
  • EPS 转 SVG/PNG 转换器集合
  • 托卡马克装置的发电过程解析
  • C++面试冲刺笔记1:虚函数的基本工作原理
  • thinkphp使用redis抢单实例
  • 深入理解MyBatis的MapperBuilderAssistant:如何解析Mapper XML文件?
  • 自然语言处理中probe探测是什么意思。
  • 基于docker进行渗透测试环境的快速搭建(在ubantu中docker设置代理)
  • EF提高性能(查询禁用追踪)(关闭延迟加载)
  • Java+AI精准广告革命:实时推送系统实战指南
  • 人工智能学习81-Yolo预测类
  • JavaEE-初阶-多线程初阶
  • JSP基础