Datawhale X 李宏毅苹果书 AI夏令营(深度学习进阶)task1(1.1+1.2)

news2024/9/24 17:20:01

深度学习的基础

常见的临界点的种类为局部最小值和鞍点

task1.1

1.局部最小值

对于任何目标函数f(x),如果在x处对应的f(x)值小于在x附近任意其他点的f(x)值,那么f(x)可能是局部最小值。如果f(x)在x处的值是整个域中目标函数的最小值,那么f(x)是全局最小值。

我们可以看一个例子:

f(x) = x · cos(πx) for − 1.0 ≤ x ≤ 2.0

%matplotlib inline
import numpy as np
import torch
from mpl_toolkits import mplot3d
from d2l import torch as d2l
def f(x):
    return x*torch.cos(np.pi*x)
def g(x):
    return f(x)+0.2*torch.cos(5*np.pi*x)
def annotate(text,xy,xytext): #@save
    d2l.plt.gca().annotate(text,xy=xy,xytext=xytext,arrowprops=dict(arrowstyle='->'))
x=torch.arange(-1.0,2.0,0.01)
d2l.plot(x,[f(x),],'x','f(x)')
annotate('local minimum',(-0.3,-0.25),(-0.77,-1.0))
annotate('global minimum',(1.1,-0.95),(0.6,0.8))

在这个例子中,我们能够很明显的区分出局部最小值和全局最小值

2.鞍点

鞍点(saddle point)是指函数的所有梯度都消失但既不是全局最小值也不是局部最小值的任何位置。

%matplotlib inline
import numpy as np
import torch
from mpl_toolkits import mplot3d
from d2l import torch as d2l
def f(x):
    return x*torch.cos(np.pi*x)
def g(x):
    return f(x)+0.2*torch.cos(5*np.pi*x)
def annotate(text,xy,xytext): #@save
    d2l.plt.gca().annotate(text,xy=xy,xytext=xytext,arrowprops=dict(arrowstyle='->'))
x=torch.arange(-2.0,2.0,0.01)
d2l.plot(x,[x**3],'x','f(x)')
annotate('saddle point',(0,-0.2),(-0.52,-5.0))

怎么判断一个临界点的种类,有什么方法呢?接下来我们一起学习一下:

网络本身很复杂,用复杂网络算出来的损失函数显然也很复杂。虽然无法完整知道整个损失函数的样子,但是如果给定某一组参数,比如 θ′,在 θ′ 附近的损失函数是有办法写出来的——虽然 L(θ) 完整的样子写不出来。θ′ 附近的 L(θ) 可近似为:

                       L(\Theta)\approx L(\Theta ')+(\Theta -\Theta ') ^{T}g+(\Theta -\Theta ') ^{T}H(\Theta -\Theta ') ^{T}

其中,第一项 L(θ)′ 告诉我们,当 θ 跟 θ′ 很近的时候,L(θ) 应该跟 L(θ′) 还蛮靠近的;第二项 θ(\Theta -\Theta ')^{T}g 中,g 代表梯度,它是一个向量,可以弥补 L(θ′) 跟 L(θ) 之间的差距。有时候梯度 g 会写成 ∇L(θ′)。gi 是向量 g 的第 i 个元素,就是 L 关于 θ 的第 i 个元素的微分,即

g_{i}=\frac{\partial L(\Theta ')}{\partial \Theta _{i}}

但是看 g 还是没有办法完整地描述 L(θ),还要的第三项 \frac{1}{2}(\Theta -\Theta ')^{T}H(\Theta -\Theta ')^{T}。第三项跟海森矩阵(Hessian matrix)H 有关。H 里面放的是 L 的二次微分,它第 i 行,第 j 列的值 HiHij 就是把 θ 的第 i 个元素对 L(θ′)作微分,再把 θ 的第 j 个元素对 \frac{\partial L(\Theta ^{'}))}{\partial \Theta _{i}}作微分后的结果,即

                                                    H_{ij}=\frac{\partial^2 }{\partial \Theta _{i}\partial \Theta _{j}}L(\Theta ^{'})

在临界点,梯度 g 为零,因此 \frac{1}{2}(\Theta -\Theta ^{'})^{T}H(\Theta -\Theta ^{'}) 为零。所以在临界点的附近,损失函数可被近似为L(θ) ≈ L(\Theta ^{'})+\frac{1}{2}(\Theta -\Theta ^{'})^{T}H((\Theta -\Theta ^{'})

为了符号简洁,我们用向量 v 来表示 θ − θ′,(\Theta -\Theta ^{'})^{T}H(\Theta -\Theta ^{'})可改写为 v^{T}Hv,有如下三种情况。

(1)如果对所有 v,v^{T}Hv > 0. 这意味着对任意 θ,L(θ) > L(θ′). 只要 θ 在 θ′ 附近,L(θ) 都大于 L(θ′). 这代表 L(θ′) 是附近的一个最低点,所以它是局部极小值。

(2)如果对所有 v,v^{T}Hv < 0. 这意味着对任意 θ,L(θ) < L(θ′),θ′ 是附近最高的一个点,L(θ′) 是局部极大值。

(3)如果对于 v,v^{T}Hv有时候大于零,有时候小于零。这意味着在 θ′ 附近,有时候L(θ) > L(θ′),有时候 L(θ) < L(θ′). 因此在 θ′ 附近,L(θ′) 既不是局部极大值,也不是局部极小值,而是鞍点。

但是我们根据\frac{1}{2}(\Theta -\Theta ^{'})^{T}H(\Theta -\Theta ^{'})来判断临界点的种类,需要带入所有的θ,比较复杂,所以我们使用v^{T}Hv的正负来判断会更简单。算出一个海森矩阵后,不需要把它跟所有的 v 都乘乘看,只要看 H的特征值。若 H 的所有特征值都是正的,H 为正定矩阵,则 v^{T}Hv > 0,临界点是局部极小值。若 H 的所有特征值都是负的,H 为负定矩阵,则 v^{T}Hv < 0,临界点是局部极大值。若 H 的特征值有正有负,临界点是鞍点。

接下来我使用李宏毅老师的ppt来用例子再解释一下:

在深度学习中,判断临界点的种类可以通过以下几种方法进行详细解释:

1. 梯度方法:梯度是指函数在某一点的变化率,对于一个临界点来说,梯度为零。因此,可以通过计算网络参数的梯度来判断是否达到了临界点。如果梯度接近于零,表明参数已经收敛到一个临界点。

2. Hessian矩阵方法:Hessian矩阵是二阶导数矩阵,它可以提供有关函数在某一点的曲率信息。对于一个临界点来说,Hessian矩阵的特征值为零。因此,可以通过计算网络参数的Hessian矩阵来判断是否达到了临界点。如果主特征值接近于零,表明参数已经收敛到一个临界点。

3. 自适应学习率方法:自适应学习率是指根据网络参数的变化情况自动调整学习率的方法。在训练过程中,如果自适应学习率几乎不再变化,说明参数已经收敛到一个临界点。

4. 梯度探索方法:梯度探索是指在训练过程中,通过调整网络参数的初始值、学习率等超参数,反复训练网络,观察网络达到的各个临界点的性能变化。如果在某个临界点的性能变化较小,说明参数已经收敛到该临界点。

这些方法可以帮助判断网络参数是否达到了临界点,但需要注意的是,临界点并不一定是局部最小值,也可能是鞍点或局部最大值。因此,判断网络参数是否收敛到一个理想的临界点还需要结合其他信息和经验。

task1.2 批量和动量

在现实生活中,我们计算梯度时并不是对所有数据的损失 L 计算梯度,而是把所有的数据分成一个一个的批量。

根据下面这个图,每一个B都是一个小批量即带有 B 笔数据。每次在更新参数的时候,会去取出 B 笔数据用来计算出损失和梯度更新参数。遍历所有批量的过程称为一个次epoch。每一次epoch遍历完进行第二次时,会进行shuffle打乱批量顺序,使得每次遍历的批量顺序都不一样。

大批量:其实就是整个数据,不分开。使用全批量更新参数叫批量梯度下降BGD,这种方法需要把所有数据训练完才可以计算损失和梯度,然后才进行更新。

小批量:随机梯度下降SGD,每次取出一笔数据,如果有20个数据,那么参数更新20次。每笔数据训练完就可以计算损失和梯度。

1.批量法

那么两种批量方法哪一种更好呢?

可能大家会想每一次BGD都需要遍历所有的数据,而SGD一次只需要遍历一小部分,小批量的这个花费时间更小。但是当我们使用GPU并行计算时,可能并不会使BGD的时间比SGD的长

有人已经在MNIST数据集中,试验了这两种方法得到了结果曲线

在上图中可以看到,在批量大小为1000时,计算时间很短。由于GPU也有并行计算的极限,所以在数据很大时,会花费很长的时间。

接下来,再看一看在不同数据集上两个批量梯度下降法的执行结果

在图上可以看出来,批量大小越大,验证集准确率越差。但这不是过拟合,因为批量大小越大,训练准确率也是越低。因为用的是同一个模型,所以这不是模型偏见的问题。 但大的批量大小往往在训练的时候,结果比较差。这个是优化的问题,大的批量大小优化可能会有问题,小的批量大小优化的结果反而是比较好的。

因为在批量梯度下降更新参数时,沿着一个损失函数来更新参数,走到一个局部最小值或鞍点显然就停下来了。梯度是零,如果不看海森矩阵,梯度下降就无法再更新参数了 。但小批量梯度下降法(mini-batch gradient descent)每次是挑一个批量计算损失,所以每一次更新参数的时候所使用的损失函数是有差异的。选到第一个批量的时候,用 L1 计算梯度;选到第二个批量的时候,用 L2 计算梯度。假设用 L1 算梯度的时候,梯度是零,就会卡住。但 L2 的函数跟 L1 又不一样,L2 不一定会卡住,可以换下个批量的损失 L2 计算梯度,模型还是可以训练,还是有办法让损失变小,所以这种有噪声的更新方式反而对训练其实是有帮助的。

2.动量法

动量法其实根据它的名字就可以看出来,动量类似于物理学中的动量,当一个小球从一个坡上滚下来时,它可能不会因为走到了鞍点或者局部最小值就会停下,由于惯性的原因会继续运动。

一般的梯度下降(vanilla gradient descent)如下图所示。初始参数为 θ0,计算一下梯度,计算完梯度后,往梯度的反方向去更新参数 θ1 = θ0 − ηg0。有了新的参数 θ1 后,再计算一次梯度,再往梯度的反方向,再更新一次参数,到了新的位置以后再计算一次梯度,再往梯度的反方向去更新参数。

使用动量后,每次更新参数的时候,会根据梯度的反方向和前一步移动的方向共同决定参数的更新方向。

那么动量有什么好处呢? 它不会只根据梯度决定向哪个方向更新,结合前一步的方向共同判断,可以使得在局部最小值和鞍点处止步的小球越过所谓的山丘,继续前行。

这就是所谓的动量法。

说句人生感慨的话,我们的人生也是一样,不要一遇到困难或坎坷就被困在原地,要想想我们曾经的辉煌,走到现在着实不易,既然辉煌过那么就有下一次的来临,永远都不要轻易放弃!希望小伙伴们都有精彩的人生。

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

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

相关文章

爬虫中使用第三方打码平台(识别验证码)

引入 在爬虫程序中,常常会遇到验证码校验的关卡,人工识别不仅慢而且很费精力,使用打码平台就成了高效,省时且便利的选择。 本次案例对于高清资源库1080zyk.com进行爬虫采集&#xff0c;使用超级鹰验证码识别(chaojiying.com)和python的requests库具体实现&#xff0c;类似的第…

CSS的动画效果

动画效果 语法&#xff1a; 创建动画&#xff1a;keyframes 调用动画&#xff1a;animation animation参数值 参数值效果animation-name规定 keyframes 动画的名称。animation-duration规定动画完成一个周期所花费的秒或毫秒。默认是 0animation-timing-function规定动画的速…

ZBrush入门使用介绍——11、边缘环

大家好&#xff0c;我是阿赵。   继续介绍ZBrush的用法。这次看看边缘环的使用方法。我个人的感觉&#xff0c;边缘环有点类似于3DsMax之类软件的挤出功能&#xff0c;可以沿着环形的面&#xff0c;添加凹凸效果。   边缘环工具入口在几何体编辑里面&#xff1a; 一、 边…

AI大语言模型之分布式训练概述

一、前言 随着语言模型参数量和所需训练数据量的急速增长&#xff0c;单个机器上有限的资源已无法满足大语言模型训练的要求。需要设计分布式训练&#xff08;Distributed Training&#xff09;系统来解决海量的计算和内存资源需求问题。 在分布式训练系统环境下需要将一个模…

关于java中Excel的导入导出

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、配置pom依赖二、搭建utils工具类1.Excel表头设置表2.Excel导入导出工具类3.Excel导出配置4.Excel导入配置 三、添加user表和工具类使用方法1.user表设置2.工…

uni-app开发日志:新增页和修改页因字段太多用分段器实现分段分类

schema2code默认只能实现较为简单的分组&#xff0c;当填写项目较多的时候&#xff0c;肯定是用选项卡明确分段比较合适&#xff0c;这时候schema2code自生成的就没法实现了&#xff0c;摒着最最少的代码修改来尝试设置生成前的schema和生成后的vue页面。 一、schema设计 先把…

【Hot100】LeetCode—46. 全排列

目录 1- 思路回溯 2- 实现⭐46. 全排列——题解思路 3- ACM 实现 题目连接&#xff1a;46. 全排列 1- 思路 回溯 由于是排列问题&#xff0c;需要讲究元素顺序。元素相同顺序不同是不同的排列&#xff0c;而组合问题不强调元素顺序。组合中的 startIndex 是用来保证&#xff…

如何用Java SpringBoot+Vue打造法律援助平台?毕业设计全攻略

✍✍计算机毕业编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java、…

【区间dp】 CF607B Zuma 题解

题面翻译 Genos \texttt{Genos} Genos 最近在他的手机上下载了祖玛游戏。在祖玛游戏里&#xff0c;存在 n ( 1 ≤ n ≤ 500 ) n(1\leq n\leq 500) n(1≤n≤500) 个一行的宝石&#xff0c;第 i i i 个宝石的颜色是 C i C_i Ci​。这个游戏的目标是尽快的消灭一行中所有的宝石…

python 实现zellers congruence泽勒一致算法

zellers congruence泽勒一致算法介绍 Zeller’s Congruence&#xff08;泽勒一致算法&#xff09;是一种用于计算给定日期是星期几的算法。这个算法可以处理公历&#xff08;Gregorian calendar&#xff09;和儒略历&#xff08;Julian calendar&#xff09;日期。其核心公式如…

SpringBoot实战:Spring Boot项目使用SM4国密加密算法

引言 在业务系统构建与部署的环节中&#xff0c;数据库作为核心存储组件&#xff0c;其连接信息的安全至关重要。通常情况下&#xff0c;这些敏感信息&#xff0c;如数据库密码&#xff0c;会直接以明文形式存储在YAML配置文件中&#xff0c;这无疑增加了信息泄露的风险。为有效…

用EA和SysML一步步建模的操作指南(01)

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 对于许多学习SysML和MBSE的同学来说&#xff0c;比较头痛的问题之一是&#xff1a;各种各样的教程里给出的案例&#xff0c;图都是画好了的&#xff01;如何从零开始用建模工具把模型画…

【企业级】像素流管理平台 V1.0

在当今快速发展的数字世界里&#xff0c;虚幻引擎的像素流技术为用户带来了前所未未有的视觉体验和交互方式。为了进一步提升开发效率和用户体验&#xff0c;我们【企业级】像素流管理平台 V1.0应运而生。通过一系列精心设计的功能&#xff0c;这个平台不仅简化了开发流程&…

解锁流量密码!财谷通助力抖音小店优势最大化!

在数字经济蓬勃发展的今天&#xff0c;电商平台如雨后春笋般涌现&#xff0c;其中&#xff0c;抖音小店以其独特的短视频直播模式&#xff0c;成为了众多商家和消费者青睐的新宠。而提及四川财谷通信息技术有限公司在抖音平台上开设的小店&#xff0c;其可靠性更是备受瞩目。本…

初识AOP

Spring有两个核心的概念&#xff0c;一个是IOC/DI&#xff0c;一个是AOP。 AOP是在不改原有代码的前提下对其进行增强。 对于下面的内容&#xff0c;我们主要就是围绕着这一句话进行展开学习&#xff0c;主要学习两方面内容AOP核心概念,AOP作用: 1 什么是AOP? AOP(Aspect O…

【2024】10个好用的AI搜索引擎大盘点

在2024年&#xff0c;随着人工智能技术的飞速发展&#xff0c;AI搜索引擎已经成为我们日常生活中不可或缺的一部分。这些基于人工智能技术的搜索引擎不仅提供了更快速、更准确的搜索体验&#xff0c;还通过自然语言处理&#xff08;NLP&#xff09;和机器学习&#xff08;ML&am…

ECharts tooltip默认html样式,保留样式只对数据数值格式化

之前遇到过需要对数据进行百分比展示&#xff0c;echarts提供的默认样式还是挺好的所以想保留样式&#xff0c;但是设置了formatter默认样式就没了&#xff0c;所以写了formatter的html字符串模拟还原了一下默认样式&#xff0c;在此记录和分享。 适用场景&#xff1a;对数据进…

Datawhale X 李宏毅苹果书 AI夏令营 task1

3.1 局部极小值与鞍点 在深度学习的优化过程中&#xff0c;模型的损失函数可能会在某些点处停止下降&#xff0c;即使我们希望进一步降低损失。这一章节探讨了导致这一现象的原因&#xff0c;包括局部极小值、鞍点&#xff0c;以及其他临界点。理解这些概念能够帮助优化神经网…

注册资本登记新规14问

2023年12月29日修订的《公司法》第四十七条规定&#xff0c;全体股东认缴的出资额由股东按照公司章程的规定自公司注册成立之日起五年内缴足。根据这个规定&#xff0c;存量公司注册资本缴纳期限如何调整还需要进一步明确规定。 就在新公司法正式实施的同一天&#xff0c;2024…

AI新格式超越SD,更轻更快的Flux

随着《黑神话悟空》的横空出世&#xff0c;全民“天命人”大杀四方。 与此同时&#xff0c;AI绘画大模型领域也是群雄逐鹿。 Stable Diffusion作为开源AI绘画大模型鼻祖&#xff0c;推出了SD3&#xff0c;但因为加入了对身体的限制&#xff08;防止涩涩&#xff09;&#xff…