Datawhale X 李宏毅苹果书 AI夏令营 深度学习01

news/2024/11/14 12:50:36/文章来源:https://www.cnblogs.com/zynevergiveup12/p/18381112

神经网络的优化,通常我们使用梯度下降的方法对获取最优的参数,已达到优化神经网络的目的。另外,我们也可以对学习率进行调整,通过使用自适应学习率和学习率调度,最后,批量归一化改变误差表面,达到优化的目的。

同样,也会存在优化失败的时候,在收敛在局部极限值或者鞍点的时候,会导致优化失败。

局部最小值和鞍点

做参数优化的时候,我们总是希望,随着参数不断更新,训练的损失不断下降,最后收敛到我们可以接受的期望的值。但是经常会出现,随着参数的更新,训练损失不再下降,而这时的损失还达不到我们的期望,这个时候,很可能就遇到的局部最小值点,或者鞍点。

如图:

局部最小值与鞍点的异同

我们知道在做深度学习的时候,梯度下降收敛到局部最小值,此时梯度为零。但是并不是所有梯度为零的点都是局部最小值点,比如鞍点

如图:

我们把梯度为零的点称为临界点。为什么要区分局部最小值点和鞍点呢?

  • 当梯度为零时:在局部最小值点,我们不管往哪个方向走,梯度都会上升,但是鞍点不会,鞍点在局部最小值和最大值之间,在鞍点处,我们可以想办法让损失更低。

逃离鞍点

所以,只要我们遇到的是鞍点,那么我总能找到一个方向去更新参数,然后获得比鞍点更小的损失。

在一维空间的误差表面上,有一个局部最小值,但是在二维空间上,它可能就只是一个鞍点,也就是说当前空间中我们遇到的局部最小值点,在更高维空间中,可能是鞍点,我们就能找到是损失下降的更新参数的方向。

我们在训练一个神经网络的时候,会有很多参数,多大百万千万级,所以误差表面有非常高的维度,非常的复杂。(参数的数量代表了误差表面的维度)。所以我遇到的点很大的可能都是鞍点,而不是局部最小值点。

我们常常会遇到两种情况:损失仍然很高,却遇到了临界点而不再下降;或者损失降得很低,才遇到临界点。

批量和动量

用来学习训练的数据集通常数据量非常大,如果以全部数据为对象求损失函数的值,计算会花费很长的时间,算几千万数据的损失函数的和,是不现实的。因此我们会从全部数据中选取出一部分,作为全部数据的““近似””,这部分数据被称为一个批量(batch),数据被分成很多个批量,遍历所有批量的过程被称为一个回合(epoch)。并且在分成批量的时候将数据打乱(shuffle)。

如图:

批量大小对梯度下降的影响

批量大小(Batch Size)

  1. 收敛速度
  • 较小的批量大小通常可以提供更频繁的权重更新,这有助于模型更快地收敛,因为每次更新都是基于最新的数据信息。
  1. 内存使用
  • 较小的批量大小意味着每次只处理少量数据,这减少了对内存的需求,使得可以在内存有限的系统上训练更大的模型。
  1. 计算效率
  • 较大的批量大小可以提高计算效率,因为现代硬件(如GPU)可以并行处理大量数据。较小的批量可能无法充分利用这些硬件的并行处理能力。
  1. 泛化能力
  • 使用较小批量大小的训练过程可能更不稳定,但有时可以导致更好的泛化能力,因为它允许模型从更多的数据扰动中学习。
  1. 训练稳定性
  • 较大的批量大小可以提供更平滑的梯度估计,从而减少训练过程中的噪声和振荡,使得训练过程更稳定。
  1. 局部最小值和鞍点
  • 较大的批量大小可能使模型更容易陷入局部最小值或鞍点,因为它们提供了更准确的梯度估计,但这也可能导致模型错过更优的全局最小值。
  1. 训练成本
  • 较小的批量大小可能需要更多的迭代次数来达到相同的损失水平,这可能会增加训练成本,尤其是在需要大量计算资源的情况下。
  1. 超参数调整
  • 批量大小的选择可能影响其他超参数(如学习率)的调整。例如,较大的批量大小可能需要较小的学习率来防止权重更新过大。
  1. 数据多样性
  • 在使用小批量训练时,每次更新都可能基于不同的数据样本,这有助于模型学习到数据的多样性。
  1. 过拟合风险
  • 使用较大的批量大小可能会增加过拟合的风险,因为模型可能会过度适应训练数据中的特定模式。

动量法

引用《深度学习详解》

动量法(momentum method)是另外一个可以对抗鞍点或局部最小值的方法。如图3.14
所示,假设误差表面就是真正的斜坡,参数是一个球,把球从斜坡上滚下来,如果使用梯度
下降,球走到局部最小值或鞍点就停住了。但是在物理的世界里,一个球如果从高处滚下来,
就算滚到鞍点或鞍点,因为惯性的关系它还是会继续往前走。如果球的动量足够大,其甚至翻
过小坡继续往前走。因此在物理的世界里面,一个球从高处滚下来的时候,它并不一定会被
鞍点或局部最小值卡住,如果将其应用到梯度下降中,这就是动量。

如图:

动量法(Momentum Method)是一种在梯度下降优化算法中使用的技巧,旨在加速梯度下降的收敛速度,特别是在处理具有大量参数的深度学习模型时。动量法的核心思想是利用过去梯度的信息来调整当前的梯度更新,从而减少训练过程中的振荡,并帮助模型更快地收敛到最小损失值。

动量法的关键点:

  1. 动量项(Velocity)
    动量法引入了一个动量项,它是一个累积的梯度平均值,可以看作是参数更新的“惯性”。

  2. 动量系数(Momentum Coefficient)
    动量系数(通常表示为γ或β)是一个介于0和1之间的超参数,它决定了动量项在更新中所占的权重。较高的动量系数意味着过去的梯度信息在更新中占更大的比重。

  3. 更新规则
    动量法的参数更新规则如下:

\[v_{t+1} = \gamma v_t + \eta \cdot \nabla J(\theta_t) \]

\[\theta_{t+1} = \theta_t - v_{t+1} \]

其中,\(v\) 是动量项,\(\eta\)是学习率,\(\nabla J(\theta_t)\) 是当前参数的梯度,\(\theta\) 是模型参数。

  1. 减少振荡
    动量法通过平滑梯度的方向,减少了在梯度下降过程中的振荡,特别是在梯度方向频繁变化的情况下。

  2. 加速收敛
    当梯度的方向在连续的迭代中保持一致时,动量项会逐渐增加,从而加速参数的更新,使模型更快地收敛。

  3. 避免局部最小值和鞍点
    动量法有助于模型跳出局部最小值和鞍点,因为它允许模型在梯度方向上获得更大的更新步长。

  4. 超参数调整
    动量法中的动量系数需要仔细调整,以确保动量项不会过大或过小,影响模型的收敛性。

  5. Nesterov加速梯度(NAG)
    Nesterov加速梯度是动量法的一个变体,它在计算动量项时考虑了参数的下一次更新,从而进一步加速收敛。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/787581.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

京东搜索重排:基于互信息的用户偏好导向模型

SIGIR 24: A Preference-oriented Diversity Model Based on Mutual-information in Re-ranking for E-commerce Search 链接:https://dl.acm.org/doi/abs/10.1145/3626772.3661359 摘要:重排是一种通过考虑商品之间的相互关系来重新排列商品顺序以更有效地满足用户需求的过…

探索AC自动机:多关键词搜索的原理与应用案例

引言 目前,大多数自由文本搜索技术采用类似于Lucene的策略,通过解析搜索文本为各个组成部分来定位关键词。这种方法在处理少量关键词时表现良好。但当搜索的关键词数量达到10万个或更多时,这种方法的效率会显著下降,尤其是在需要与词典进行详尽对比的场景中。本文将介绍的A…

VL21 根据状态转移表实现时序电路

根据给的状态转移表知道有两个状态:第一列的为current_state,第二三列为next_state,且仅当current_state==11时候Y为1(使用()?:语法实现)。三段式状态机的流程: 第一段:时序逻辑,公式化写法 第二段:组合逻辑,这里要注意always @(*)是固定写法,不能像第一段写成时…

Vue3.5新增的baseWatch让watch函数和Vue组件彻底分手

Vue3.5新增了一个baseWatch,让watch函数和Vue组件彻底分手,他的实现和Vue组件以及生命周期没有一毛钱关系。前言 在Vue 3.5.0-beta.3版本中新增了一个base watch函数,这个函数用法和我们熟知的watch API一模一样。区别就是我们之前用的watch API是和Vue组件以及生命周期是一…

硬件设备snmp配置,snmp如何检测联通信

【1】山石网科防火墙 环境需求:设备与 prometheus 服务器之间需要放通UDP161端口,且网络能连通配置路径:系统——SNMP 1、配置SNMP代理 勾选‘启用’选项,并点击 应用 即可 2、配置SNMP主机 点击‘新建’,添加 zabbix服务器IP地址跟团体名,权限为 只读,点击 确定 完成新…

mmdetection中的dataset pipline

参考: 轻松掌握 MMDetection 整体构建流程(二) 商汤开源目标检测工具箱mmdetection代码详解(三)----------mmdetection数据的输入、处理过程 1. mmdetection中的数据加载流程 pipline中由一系列数据处理模块对数据集进行流水线般的处理要注意的是,上述pipline流程在3.x版本…

南沙信奥赛陈老师讲题:1331:【例1-2】后缀表达式的值

1331:【例1-2】后缀表达式的值 时间限制: 10 ms 内存限制: 65536 KB提交数:65784 通过数: 17299 【题目描述】从键盘读入一个后缀表达式(字符串),只含有0-9组成的运算数及加(+)、减(—)、乘(*)、除(/)四种运算符。每个运算数之间用一个空格隔开,不需要…

windows解决0x80070035找不到网络路径的问题

windows进行网络共享,无法访问,报错0x80070035,找了好几个办法都没有用.无意间尝试开启有密码保护的共享后,成功解决问题. 搜索高级共享->管理高级共享设置->密码保护的共享->勾选有密码保护的共享

使用nginx代理,简单实现一个静态网页功能(扫描二维码)

1、创建项目目录 mkdir my-image-page cd my-image-page2、准备图片和HTML文件上传图片:将 image.jpg 上传到 my-image-page 目录。创建HTML文件:在同一目录下创建一个 index.html 文件<!DOCTYPE html> <html lang="en"> <head><meta charset…

P2757 [国家集训队] 等差子序列 和 CF452F Permutation

讲解 P2757 [国家集训队] 等差子序列 和 CF452F Permutation。考虑枚举中间数,将问题转化为区间判定是否回文,使用线段树与哈希算法解决。题意: 给定一个长度为 \(n\) 的排列 \(a\),判断其中是否有长度 \(\ge 3\) 的等差数列。 \(1 \le n \le 5 \times 10^5\)。 思路: 首…

C# 获取PDF页面大小、方向、旋转角度

在处理PDF文件时,了解页面的大小、方向和旋转角度等信息对于PDF的显示、打印和布局设计至关重要。本文将介绍如何使用免费.NET 库通过C#来读取PDF页面的这些属性。C# 读取PDF页面大小(宽度、高度) C# 判断PDF页面方向 C# 检测PDF页面旋转角度免费库 Free Spire.PDF for .NET…

uni-app小程序(快手、抖音)getCurrentPages使用坑位记录

前情 uni-app是我比较喜欢的跨平台框架,它能开发小程序/H5/APP(安卓/iOS),重要的是对前端开发友好,自带的IDE让开发体验也挺棒的,公司项目就是主推uni-app。 坑位 最近在做一个需求,在达到一定条件的情况下我需要根据路由堆栈中是否有我指定的页面来做不同的跳转,如果路由…