[学习笔记]深度学习详解-Datawhale学习组

news2024/9/24 15:29:31

第三章:深度学习基础

3.1 局部极小值与鞍点

3.1.1 临界点及其种类

优化神经网络时,使用梯度下降法,遇到梯度为0的点,训练就停了下来,损失也不再下降。
这个梯度为0的点,可以称为临界点
临界点可以细分为局部极小值局部极大值鞍点
如下图,左侧是局部极小值,右侧是鞍点
鞍点的特点是,它在某些方向上是极小值,在某些方向上是极大值。形似马鞍面。
在这里插入图片描述

3.1.2 判断临界值种类的方法

根据泰勒级数近似,我们可以得到损失函数 L ( θ ) L(\theta) L(θ)在临界点 θ ′ \theta' θ附近的函数表示:
L ( θ ) ≈ L ( θ ′ ) + ( θ − θ ′ ) T g + 1 2 ( θ − θ ′ ) T H ( θ − θ ′ ) L(\boldsymbol{\theta}) \approx L\left(\boldsymbol{\theta}^{\prime}\right)+\left(\boldsymbol{\theta}-\boldsymbol{\theta}^{\prime}\right)^{\mathrm{T}} \boldsymbol{g}+\frac{1}{2}\left(\boldsymbol{\theta}-\boldsymbol{\theta}^{\prime}\right)^{\mathrm{T}} \boldsymbol{H}\left(\boldsymbol{\theta}-\boldsymbol{\theta}^{\prime}\right) L(θ)L(θ)+(θθ)Tg+21(θθ)TH(θθ)
由于临界点的梯度为0,这个式子进一步可以化简为:
L ( θ ) ≈ L ( θ ′ ) + 1 2 ( θ − θ ′ ) T H ( θ − θ ′ ) L(\boldsymbol{\theta}) \approx L\left(\boldsymbol{\theta}^{\prime}\right)+\frac{1}{2}\left(\boldsymbol{\theta}-\boldsymbol{\theta}^{\prime}\right)^{\mathrm{T}} \boldsymbol{H}\left(\boldsymbol{\theta}-\boldsymbol{\theta}^{\prime}\right) L(θ)L(θ)+21(θθ)TH(θθ)
根据高等代数的知识:

  • 当海森矩阵 H \boldsymbol{H} H的特征值全为正,即 H \boldsymbol{H} H是正定矩阵,则右侧第二项为正,此时 θ ′ \theta' θ是周围领域中对应 L ( θ ) L(\theta) L(θ)值最小的,即 θ ′ \theta' θ是局部极小值点。
  • 当海森矩阵 H \boldsymbol{H} H的特征值全为负,即 H \boldsymbol{H} H是负定矩阵,则右侧第二项为负,此时 θ ′ \theta' θ是周围领域中对应 L ( θ ) L(\theta) L(θ)值最大的,即 θ ′ \theta' θ是局部极大值点。
  • 当海森矩阵 H \boldsymbol{H} H的特征值有正有负,则右侧第二项也会有正有负,此时 θ ′ \theta' θ是鞍点。

值得注意的是,如果我们得到了 H \boldsymbol{H} H的一个负特征向量 u u u,就可以沿着 u u u的方向更新参数,例如 θ = θ ′ + u \theta=\theta'+u θ=θ+u,这样损失会变小。

算海森矩阵和海森矩阵的特征值/向量的运算量会非常大,所以一般不会这么做来逃离鞍点。

3.1.3 逃离鞍点的方法

鞍点往往比局部极小值更常见。这是因为在一个高维空间中,要让一个函数在某个点处,其每个方向上都是极小值是不容易的。往往存在一些维度方向上,这个点并非极小值。

这个结论也可以通过一些实验来得到验证,详细见书。

3.2 批量和动量

实际计算梯度时,考虑到显存。
一般会将 N N N个样本数据分为 L L L个批次。每个批次有 B B B个样本(这里假设 N = B L N=BL N=BL)。
在一次迭代(iteration)更新中,只会取一批次的 B B B个样本计算损失和梯度,并更新参数。
一个回合(epoch)更新包含 L L L次这样的迭代更新,才会将所有 N N N个样本遍历一遍。
另外,数据分批的时候还会进行shuffle。有时甚至在每个回合更新前,都会进行shuffle。

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

  • 如果 B = N , L = 1 B=N, L=1 B=N,L=1,即一次迭代更新使用全部样本,则称为批量梯度下降法(Batch Gradient Descent, BGD)
  • 如果 B = 1 , L = N B=1, L=N B=1,L=N,即一次迭代更新只使用1个样本,则称为随机梯度下降法(Stochastic Gradient Descent, SGD)
  • 如果 B B B是介于 1 1 1 N N N之间的数,则称为小批量梯度下降(Mini-batch Gradient Descent,MBGD)
在效率上

在一次迭代更新中,使用更多的样本,即使用更大的批量大小,是否会让这一次迭代花费的时间变长呢?
答案是当批量大小不大的时候,这并不会增加一次迭代花费的时间。这是因为GPU有并行计算的能力。
从下面的图可以看出。当 B = 1000 B=1000 B=1000以前时,一次迭代花费的时间并没有增加太多。
在这里插入图片描述

B B B继续增加时,一次迭代花费的时间会增加。这可能是因为GPU已经满负荷运行了。因此数据的处理并不是完全的并行。

但是在一个回合更行中,更大的批量大小意味着遍历所有样本需要更少的迭代次数,这会导致更少的回合时间。
在这里插入图片描述

在性能上

大的 B B B意味着更新稳定,而小的 B B B则意味着梯度方向会有噪声。
但噪声一定程度上有利于算法逃离局部最小值点。
因为不同批次的损失函数有差异。某个点可能对某些批次的损失函数而言是局部最小值点,但对另外一些点而言并不是局部最小值点,这导致梯度下降算法能进一步寻找更小的损失
所以小的 B B B在训练集上会有更好的表现。
在这里插入图片描述
一些实验和论文表明小的 B B B在测试集上也有更好的表现。
一个可能的解释是误差表面有不同的局部极小值点,有些平坦,有些尖锐。平坦的局部极小值点附近,泛化性较好,即在训练集和测试集上的表现差不多(前提是测试集和训练集的分布差不多)。但是尖锐的局部极小值点附近,一点点的偏离都会使损失变大很多,这表现为泛化性差,即使测试集和训练集的分布差不多,在测试集上仍会有较大的损失

最后总结一下:

  • 在一次迭代更新中,如果批量大小 B B B不大时,大 B B B对应的梯度下降算法耗时和小 B B B对应耗时基本相同。
  • 但在一个回合的更新中,大 B B B对应的梯度下降算法耗时比小 B B B少很多。
  • 训练中, B B B小意味着噪声更多, B B B大意味着更稳定。
  • B B B小,在训练集和测试集上的表现都会更好。

3.2.2 动量法

动量法是另外一个可以对抗鞍点或局部最小值点的方法。它的核心是每次参数更新,不仅仅考虑梯度负方向,还考虑前一次参数更新方向。即第 i i i次参数更新向量 m i m_i mi
m i = λ m i − 1 − η g i − 1 m_i=\lambda m_{i-1}-\eta g_{i-1} mi=λmi1ηgi1
在这里插入图片描述
可以看到,这种方法更新的方法,不仅仅考虑了现在的梯度,还考虑了考虑过去所有梯度的总和。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在挫折感中遇见更好的自己

你是如何克服编程学习中的挫折感的? 编程学习之路上,挫折感就像一道道难以逾越的高墙,让许多人望而却步。然而,真正的编程高手都曾在这条路上跌倒过、迷茫过,却最终找到了突破的方法。你是如何在Bug的迷宫中找到出口的…

ssrf+redisssrf+fastcgi

curl支持很多协议,有FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE以及LDA ssrfredis dict被禁用了用(?urlhttp://172.19.0.3端口)来探测一下端口吧 172.19.0.3主机只开放一个80端口 看看内网还有其他服务器没 这里可以看到内网还有…

Ai+若依(代码生成 -- 树表“有层级关系的”):【03篇】

代码生成 代码生成器,根据数据库表结构自动生成前后端CRUD代码提供三种生成模板:单表、树表、主子表(一对多)现在来说说树表,主子表 树表: 例如:公司==》部门==》员工 层级关系的这种 主子表: 例如: 数据之间存在一对多,比如菜品和口味表 一个菜品可以多个口味 自动化…

图形几何算法 -- 判断两条线段是否相交

线段相交检测是计算几何中的一个基本问题,广泛应用于计算机图形学、游戏开发、物理模拟等领域。我们可以通过以下步骤和理论来判断两条线段是否相交。 概念 在二维平面上,给定两条线段 A(P1, P2) 和 B(Q1, Q2),我们需要判断这两条线段是否相…

鸿蒙内核源码分析(双向链表) | 谁是内核最重要结构体?

答案一定是: LOS_DL_LIST(双向链表)&#xff0c;它长这样. typedef struct LOS_DL_LIST {//双向链表&#xff0c;内核最重要结构体struct LOS_DL_LIST *pstPrev; /**< Current nodes pointer to the previous node *///前驱节点(左手)struct LOS_DL_LIST *pstNext; /**<…

Linux-部署YUM仓库及NFS共享服务

系列文章目录 提示&#xff1a;仅用于个人学习&#xff0c;进行查漏补缺使用。 1.Linux-网络设置 2.Linux-DHCP服务、vsftp 3.Linux-DNS域名解析服务 4.Linux-远程访问及控制 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档…

【GIS系列】多源异构原始影像解析:策略模式与规则引擎的应用

作者&#xff1a;后端小肥肠 &#x1f347; 我写过的文章中的相关代码放到了gitee&#xff0c;地址&#xff1a;xfc-fdw-cloud: 公共解决方案 &#x1f34a; 有疑问可私信或评论区联系我。 &#x1f951; 创作不易未经允许严禁转载。 1. 前言 在遥感技术和地球观测领域&#…

机器学习周报(8.19-8.25

文章目录 摘要Abstract1.PyTorch环境的配置及安装使用PyCharm配置环境安装配置jupyter 2.两个Python常用函数3.DataSet4.TensorBoard的使用绘制一幅坐标图使用tendorboard对一幅图片进行操作 5.torchvison中的transforms总结 摘要 在之前学习了一些机器学习相关理论之后&#…

【限时免费发放】2000+热门Scratch作品源码

欢迎访问小虎鲸Scratch资源站&#xff01;在Scratch编程的学习过程中&#xff0c;优质的资源和灵感是至关重要的。因此&#xff0c;我们特别准备了这份【免费下载】的Scratch作品源码合集&#xff0c;包含超过2000个精选的Scratch项目源码&#xff0c;旨在为Scratch编程爱好者和…

Nginx+keepalived实现高可用

目录 一、准备工作 1、安装软件 二、配置master主服务器 1、修改nginx主配置文件 ​编辑 2、修改keepalived主配置文件 三、配置backup备服务器 四、配置节点服务器 1、配置第一个节点服务器 1.1、设置虚拟网卡 1.2、忽略ARP请求 1.3、安装并启动nginx软件 2、配置…

【STM32】SPI接口(非连续传输)

本篇博客重点在于标准库函数的理解与使用&#xff0c;搭建一个框架便于快速开发 目录 前言 SPI简介 IO口初始化 SPI配置 时钟使能 SPI初始化 SPI使能 数据接收与发送 硬件SPI代码 MySPI.h MySPI.c 前言 【通信协议】SPI总线-CSDN博客 本篇博客学习使用STM32的…

Expo 开发ReactNative 后切换 eas 账号

修改slug app.json中的sulg字段更新为新账号应用sulg 修改projectId app.json中的extra.eas.projectId字段更新为新账号应用projectId 退出账号&#xff1a; eas logout 重新登录&#xff1a; eas login

基于WEB的学生综合测评系统的设计与实现

第1章 绪 论 1.1 系统开发背景 随着计算机技术的不断发展,在现代化社会中,信息的处理越来越依赖计算机来完成。在没有测评系统之前&#xff0c;所有的信息记录都是由人工记录维护&#xff0c;不但不方便&#xff0c;还经常出错&#xff0c;有了测评系统就可以方便的对各种信息…

.net maui安卓开发中使用明文传输(一)

背景:最近在做一个pad上的项目,目的是执行每日点检功能(就是检查设备的各项保养指标);前期用HBuilder做了一个,但是现场的触摸屏选用的是TouchPie 安卓版本是6.0版本,上次开发的软件可以在安卓7.0上完美兼容,但由于触摸屏安卓版本太低不能兼容;询问厂商才知道这款触摸…

【Datawhale AI夏令营】从零上手CV竞赛Task1

【Datawhale AI夏令营】从零上手CV竞赛Task1 前言赛事官网学习任务TASK 1 前言 这个暑假我通过微信群关注到了【Datawhale AI夏令营】&#xff0c;并且记录我的代码学习以及调试的过程。 赛事官网 赛事官网&#xff1a;https://www.marsbigdata.com/competition/details?id…

RING总线(环形总线)Intel大小核的由来

想到Intel处理器&#xff0c;无一例外大家想到的就是现在的它具有大小核的结构&#xff0c;也就是性能核和效能核。这种结构的由来是由RING总线布局结构而诞生。ring总线&#xff08;环形总线&#xff09;&#xff0c;这个名字经常出现在讨论普通消费级处理器的时候&#xff0c…

算法【Java】—— 二分查找

二分查找算法分析 二分查找算法其实也是对撞指针的另一种用法&#xff0c;左右两个指针分别指向数据的左右端点&#xff0c;然后双指针向中间移动。 朴素二分查找 上面这道题是朴素的二分查找算法&#xff0c;由于数据是有序的&#xff0c;我们可以从中间值入手 如果中间值大…

国货之光|暴雨机推出面向大模型训练的AI服务器

当前&#xff0c;“百模大战”带来了算力需求的爆发&#xff0c;尤其是以ChatGPT为代表的多模态AI大模型&#xff0c;‌其参数规模和训练数据量均达到了前所未有的规模。‌GPT-3.5、‌GPT-4等模型的参数规模突破了万亿级别&#xff0c;‌训练数据量达到了TB级别&#xff0c;‌这…

AI多模态模型架构之模态生成器:Modality Generator

〔探索AI的无限可能&#xff0c;微信关注“AIGCmagic”公众号&#xff0c;让AIGC科技点亮生活〕 本文作者&#xff1a;AIGCmagic社区 刘一手 前言 AI多模态大模型发展至今&#xff0c;每年都有非常优秀的工作产出&#xff0c;按照当前模型设计思路&#xff0c;多模态大模型的…

Ai+若依(定时任务):【01篇】

若依为定时任务功能提供方便友好的web界面,实现动态管理任务。 案例 每间隔5秒,控制台输出系统时间。 实现步骤: ①创建任务类 在服务 ==》ruoyi-quartz==》task==》MyTask package com.ruoyi.quartz.task;import org.springframework.stereotype.Component;@Component…