深度学习——权重初始化、评估指标、梯度消失和梯度爆炸

news2024/11/24 13:25:10

文章目录

  • 🌺深度学习面试八股汇总🌺
  • 权重初始化
      • 零初始化 (Zero Initialization)
      • 随机初始化 (Random Initialization)
      • Xavier 初始化(Glorot 初始化)
      • He 初始化
      • 正交初始化(Orthogonal Initialization)
      • 预训练模型初始化
    • 权重初始化方法总结
    • 总结
  • 评估指标
    • 1. 分类问题
      • 混淆矩阵
      • 二分类问题的评估指标
      • 多分类问题的评估指标
        • 宏平均 (Macro Average)
        • 微平均 (Micro Average)
    • 2. 回归问题
    • 总结
  • 梯度消失和梯度爆炸
    • 梯度消失 (Vanishing Gradient)
      • 描述
      • 产生原因
      • 影响
      • 解决方法
    • 梯度爆炸 (Exploding Gradient)
      • 描述
      • 产生原因
      • 影响
      • 解决方法
    • 总结
    • Transformer中的优化方案

🌺深度学习面试八股汇总🌺

权重初始化

权重初始化是影响模型训练速度和性能的重要因素。合理的权重初始化可以帮助加快收敛,减少不稳定性。以下是几种常见的权重初始化方法及其解释:

零初始化 (Zero Initialization)

  • 描述:将所有权重初始化为零
  • 优点:简单易实现。
  • 缺点:所有神经元的输出相同,导致每个神经元在反向传播时更新相同的权重,无法有效学习。此方法通常不适用于深度学习

随机初始化 (Random Initialization)

在这里插入图片描述

  • 描述:将权重随机初始化为小的随机值(通常在一个小范围内)。
  • 优点:避免了神经元输出相同的问题,允许不同神经元学习不同的特征。
  • 缺点:选择不当的范围可能导致梯度消失或梯度爆炸问题。

Xavier 初始化(Glorot 初始化)

  • 描述:适用于Sigmoid或Tanh激活函数。权重根据输入和输出的数量进行初始化,通常使用正态分布或均匀分布。

    • 计算公式:在这里插入图片描述
  • 优点通过考虑输入和输出的规模,减少了层与层之间的激活值的方差,有助于更稳定的训练。

在这里插入图片描述

He 初始化

  • 描述:专门为ReLU激活函数设计的初始化方法,权重根据输入的数量进行初始化。
    • 计算公式:在这里插入图片描述
  • 优点减少了在ReLU激活函数中由于零输入造成的 “死亡神经元”问题 ,适用于深度神经网络。

在这里插入图片描述

正交初始化(Orthogonal Initialization)

描述
生成的权重矩阵 W 是正交矩阵,即满足 W T W = I W^T W = I WTW=I(单位矩阵)。正交矩阵具有特性:它的特征值的模为 1,这意味着在正交矩阵上的操作不会导致梯度的膨胀或收缩,因此适合深层网络或循环神经网络(RNN),有助于稳定梯度传播。

初始化过程

  • 首先生成一个随机矩阵,然后对该矩阵进行正交计算。
  • 对于维数不相等的矩阵,进行截断,使矩阵能够符合输入和输出的维度。
    正交计算获得正交矩阵方法:
  1. 奇异值分解(SVD),将其分解为 3 个矩阵,其中包含一个正交矩阵。用该正交矩阵初始化权重。

在这里插入图片描述
U 和 V 都是正交矩阵,通常选择 U 矩阵作为正交矩阵来初始化权重。

    • QR 分解:对矩阵 W 进行 QR 分解,将其分解为一个正交矩阵 Q 和上三角矩阵 R。

在这里插入图片描述

优点

  • 梯度稳定性:它的特征值的模为 1,权重矩阵的特征值稳定,防止了梯度消失或梯度爆炸的情况,确保在前向传播和反向传播中信息能够更平稳地传递。,特别适用于深层网络和 RNN 等时间序列模型。

缺点

  • 计算复杂度较高:生成正交矩阵需要使用奇异值分解(SVD)【PCA用到】,这在高维度情况下计算开销较大,尤其在大规模神经网络中会导致初始化阶段的计算较慢。
  • 适用范围有限:主要用于循环神经网络(RNN)等需要保持梯度稳定的结构,对于其他模型(如卷积神经网络 CNN),正交初始化的优势不明显。

适用场景

  • 主要用于 循环神经网络(RNN)长短时记忆网络(LSTM)门控循环单元(GRU),这些网络需要在时间维度上进行长时间的梯度传播,因此正交初始化能够帮助缓解梯度消失或梯度爆炸的问题。
  • 也可用于深层网络模型,如 深度前馈神经网络(DNN),特别是在训练过程不稳定的情况下,正交初始化可以帮助保持信号传播稳定。

预训练模型初始化

  • 描述:使用在大规模数据集上预训练的模型的权重进行初始化,然后再进行微调。
  • 优点:可以显著提高模型在小数据集上的表现加快收敛速度

权重初始化方法总结

初始化方法描述优点缺点适用场景
零初始化将所有权重初始化为 0简单易实现。导致所有神经元输出相同,无法有效学习特征,反向传播时无法更新不同的权重。不适用于深度学习模型
随机初始化权重随机初始化为小的随机值避免神经元输出相同,允许不同神经元学习不同的特征。不适当的范围可能导致梯度消失梯度爆炸问题。适用于大多数模型的简单初始化
Xavier 初始化基于输入输出规模初始化权重,适合 Sigmoid/Tanh 激活函数。平衡输入输出,减少激活值的方差变化,促进稳定训练。对 ReLU 等非线性激活函数效果不理想。适用于 Sigmoid 或 Tanh 激活函数的网络
He 初始化ReLU 设计,考虑激活函数的非线性特性,权重按输入规模初始化。减少 ReLU 激活中“死亡神经元”问题,适合深层网络。主要针对 ReLU,其他激活函数可能效果不佳。适用于 ReLU 或 Leaky ReLU 激活函数的网络
正交初始化保证权重矩阵正交,特征值稳定,常用于循环神经网络(RNN)。保持梯度稳定,防止梯度消失或爆炸,适合处理长序列。需要奇异值分解(SVD),计算开销较大。适用于 RNN、LSTM、GRU 等长序列处理的模型
预训练模型初始化使用预训练模型的权重进行初始化,适用于迁移学习在小数据集上表现优秀,快速收敛,加速训练。需要预训练权重,并且可能不适用于所有数据集或任务。适用于迁移学习和微调任务,如图像分类、NLP 等

总结

  • 零初始化:简单但不能用于深度学习
  • 随机初始化:常见的简单方法,但需合理选择范围以防梯度问题。
  • Xavier 初始化:适合 Sigmoid 和 Tanh 激活函数,能平衡输入输出的方差。
  • He 初始化:适合 ReLU 激活函数,解决 ReLU 的“死亡神经元”问题。
  • 正交初始化:对**循环神经网络(RNN)**有效,确保梯度稳定,适合长序列处理。
  • 预训练初始化迁移学习的常用方法,适合在大数据集预训练的权重上进行微调。

评估指标

评估指标是用于量化模型性能的重要工具,帮助我们理解模型在处理数据时的准确性和有效性。以下是对常用评估指标的解释:

1. 分类问题

对于分类问题,评估指标主要用于衡量模型对不同类别的预测准确性混淆矩阵(Confusion Matrix)是评估分类模型表现的常用工具

混淆矩阵

预测正类 (Predicted Positive)预测负类 (Predicted Negative)
真实正类 (Actual Positive)TP (True Positive)FN (False Negative)
真实负类 (Actual Negative)FP (False Positive)TN (True Negative)
  • TP(True Positive,真正例):模型正确地将实际为正类的样本预测为正类。
  • FP(False Positive,假正例):模型错误地将实际为负类的样本预测为正类(也称为 Type I 错误)。
  • TN(True Negative,真负例):模型正确地将实际为负类的样本预测为负类。
  • FN(False Negative,假负例):模型错误地将实际为正类的样本预测为负类(也称为 Type II 错误)。

二分类问题的评估指标

在这里插入图片描述

多分类问题的评估指标

  • 准确率
    • 同二分类
宏平均 (Macro Average)
  • 计算方式:对每个类别的指标进行单独计算,然后取平均值
  • 适用场景:适合类别分布均衡的情况,因为它不会受每个类别样本数量的影响,而是对每个类别的贡献一视同仁
    在这里插入图片描述
微平均 (Micro Average)
  • 计算方式:先累积每个类别的 TP、FP、TN、FN,然后计算评估指标。
  • 适用场景:类别分布不均衡的情况,因为它更倾向于以样本为中心,将所有类别的样本总数作为计算基础,因此更能反映数据集中主要类别的表现。

2. 回归问题

回归问题评估指标用于衡量模型预测值与实际值之间的差异
在这里插入图片描述

决定系数详细解释
在这里插入图片描述
在这里插入图片描述

总结

选择合适的评估指标是评估模型性能的关键步骤。分类问题的指标关注于类别预测的准确性,而回归问题的指标则关注于预测值与实际值的差异。根据具体任务和需求选择合适的指标,可以更好地评估和优化模型性能。


梯度消失和梯度爆炸

在深度学习中,梯度消失和梯度爆炸是训练深度神经网络时常见的问题,尤其是在涉及多个隐藏层的情况下。这两个问题直接影响模型的学习能力和训练效果。以下是对这两种现象的详细解释:

梯度消失 (Vanishing Gradient)

描述

梯度消失是指在反向传播过程中,梯度值逐渐减小接近于零。(在反向传播时,靠近输出层的梯度会较大,但随着层数的增加,梯度在传递过程中会不断乘以小于1的数,最终导致靠近输入层的梯度趋近于零,影响网络的训练效果。)这导致在深层网络中,前面的层几乎不更新权重,模型难以学习。

产生原因

  • 激活函数:使用Sigmoid或Tanh等激活函数时,当输入值非常大或非常小时,这些函数的导数会接近于零。因为这些激活函数的输出在极端值时平坦,导致梯度几乎消失
  • 层数增加:随着层数的增加,梯度通过多个层传递,每层的梯度可能都变得非常小,从而导致前面的层几乎没有更新。

影响

  • 训练速度变慢:网络难以学习到有效的特征,导致收敛速度变慢。
  • 模型性能下降:网络在面对复杂任务时表现不佳,无法达到预期效果。

解决方法

  • 使用ReLU激活函数:使用 ReLU(Rectified Linear Unit)等非饱和激活函数,避免梯度趋近 0。ReLU 的梯度在正区间为常数 1,能够有效缓解梯度消失。
  • 权重初始化方法:使用 Xavier 初始化、He 初始化等方法,使得权重初始值较好地分布在合理范围内,避免过大或过小的权重值引起梯度消失。
  • 残差网络(ResNet):通过引入残差连接(skip connections),使得梯度可以直接从后面层传递到前面层,从而缓解梯度消失问题。
  • 归一化技术:使用批归一化(Batch Normalization)来保证每层的输入数据分布稳定,从而减小梯度消失的风险。

梯度爆炸 (Exploding Gradient)

描述

梯度爆炸是指在反向传播过程中,随着网络层数的增加梯度值不断增大,最终导致权重更新过大,模型无法收敛。链式法则的累积效应,如果某些层的激活函数导数大于1,梯度在传递过程中会不断乘以大于1的数,那么这些梯度在层与层之间的传递过程中会被不断放大。

产生原因

  • 权重初始化不当:如果权重初始化得过大,可能导致梯度在反向传播时迅速增大。
  • 激活函数:某些激活函数(ReLU )的导数可能在某些条件下变得非常大,尤其是在深层网络中,连续的乘法可能导致梯度指数级增长。
  • 梯度累积效应/网络深度增加:反向传播中,每层的梯度通过链式法则相乘,如果每层的梯度大于 1,乘积效应会导致梯度迅速变大,尤其是深层网络。

影响

  • 训练不稳定:模型的损失函数可能发散,导致无法有效训练。
  • 权重溢出:过大的权重更新可能导致数值溢出,产生NaN(非数)值,导致训练中断。

解决方法

  • 梯度裁剪(Gradient Clipping):在更新权重之前,对梯度进行裁剪,限制其最大值,从而避免梯度爆炸。
  • 合理的权重初始化:使用适当的初始化方法,如Xavier或He初始化,防止初始化阶段的梯度过大。
  • 选择合适的激活函数:避免使用会导致激活值过大的激活函数,如Sigmoid和Tanh,尤其是在深层网络中。
  • 正则化:通过正则化(如 L2 正则化),可以对权重进行约束,防止其增长过大,从而避免梯度爆炸。
  • 优化算法改进:一些优化算法如 Adam、RMSProp 能够根据梯度历史信息自适应调整学习率,这有助于缓解梯度爆炸。

总结

梯度消失和梯度爆炸是深度学习训练中的重要问题,影响模型的收敛性和性能。理解这两个现象及其产生原因,有助于采取相应的解决方案,提高深度学习模型的训练效果和稳定性。通过使用合适的激活函数、改进网络结构和优化训练过程,可以有效缓解这些问题。

Transformer中的优化方案

在 Transformer 模型中,梯度消失和梯度爆炸问题的解决方案涵盖了模型的多个层面,确保模型能够在深度学习训练中保持稳定的梯度传播。以下是主要的技术方法及其作用:

  1. 残差连接:通过为每层引入直接连接,确保梯度能够有效传播,缓解深层网络中的梯度消失问题。

  2. 层归一化:在每层的输入上进行归一化处理,避免输入分布波动过大,同时解决梯度消失和梯度爆炸问题。

  3. 缩放点积注意力:通过对点积结果进行缩放,防止点积值过大,避免在 softmax 计算时引发梯度爆炸

  4. 权重初始化:通过 Xavier 或 He 初始化等策略,确保初始梯度处于合理范围,避免梯度在训练初期消失或爆炸。

  5. 学习率调度器:采用 warmup 和 decay 策略,通过动态调整学习率,防止初期梯度过小导致梯度消失,后期避免梯度过大引发梯度爆炸。

  6. 梯度裁剪:在梯度过大时,限制梯度的范数,确保训练过程中不会出现梯度爆炸。

  7. 正则化技术:通过 L2 正则化限制权重增长和 Dropout 防止过拟合,间接防止梯度爆炸。

这些技术共同作用,使得 Transformer 能够在大规模训练和深层结构中有效应对梯度消失和梯度爆炸问题,从而确保其在自然语言处理、机器翻译等任务中的出色表现。


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

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

相关文章

Proteus中数码管动态扫描显示不全(已解决)

文章目录 前言解决方法后记 前言 我是直接把以前写的 51 数码管程序复制过来的,当时看的郭天祥的视频,先送段选,消隐后送位选,最后来个 1ms 的延时。 代码在 Proteus 中数码管静态是可以的,动态显示出了问题——显示…

简单说一下Pinia 和 Vuex的区别

Pinia 和 Vuex 是 Vue.js 生态系统中两种状态管理库,它们都用于管理复杂应用的状态。尽管它们的目标相似,但在设计和使用上有许多不同之处。以下是 Pinia 和 Vuex 的主要区别: 1. 设计理念 Vuex 集中式存储:Vuex 采用单一的集中…

个人博客静态样式部署

首页部分 views/layout/layoutwave.vue <script setup> import router from /router; import { ref, onMounted, onUnmounted } from vue import /assets/img/icons/font_p81061dps7l/iconfont.cssconst canvas ref(null) const canvasFa ref(null) const fish ref(n…

综合文化信息管理系统|基于java和小程序的综合文化信息管理系统设计与实现(源码+数据库+文档)

综合文化信息管理系统 目录 基于java和小程序的打印室预约系统设计与实现 一、前言 二、系统设计 三、系统功能设计 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&…

渗透测试(socket,namp,scapy)

socket:可以用来实现不同虚拟机或者不同计算机之间的通信。 socket常用函数&#xff1a; sock.bind(host,port) //host可接受client范围&#xff0c;以及连接的端口 sock.listen()//sever开启监听连接 sock.accpet()//返回 sock&#xff0c;addr 用来接受和发送数据 addr…

leetcode刷题记录(二十六)——151. 反转字符串中的单词

&#xff08;一&#xff09;问题描述 . - 力扣&#xff08;LeetCode&#xff09;. - 备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/reverse-words-in-a-string/desc…

python中常见的8种数据结构之一数组的应用

在Python中&#xff0c;数组是一种常见的数据结构&#xff0c;用于存储一系列相同类型的元素。在实际应用中&#xff0c;数组可以用于解决各种问题。 以下是数组在Python中的一些常见应用&#xff1a; 1. 存储和访问数据&#xff1a;数组可以用于存储和访问一组数据。可以通过…

JS禁用鼠标滚动条功能且滚动条不消失教程

这个JS功能我找了好久好久才找到的&#xff0c;希望能够帮助到大家&#xff0c;网上有很多教程虽然能够实现禁用滚动条的效果&#xff0c;但是滚动条却直接消失不见了&#xff0c;那么今天我就把禁用滚动条但滚动条不消失的JS代码分享给大家。 实例代码如下&#xff1a; JS禁用…

学习虚幻C++开发日志——定时器

官方文档&#xff1a;虚幻引擎中的Gameplay定时器 | 虚幻引擎 5.5 文档 | Epic Developer Community | Epic Developer Community 定时器 安排在经过一定延迟或一段时间结束后要执行的操作。例如&#xff0c;您可能希望玩家在获取某个能力提升道具后变得无懈可击&#xff0c;…

记录Postman接口测试,配置token为全局变量,配置测试环境

软件测试资料领取&#xff1a;[内部资源] 想拿年薪40W的软件测试人员&#xff0c;这份资料必须领取~ 软件测试面试刷题工具&#xff1a;软件测试面试刷题【800道面试题答案免费刷】 为什么要进行接口测试&#xff1a; 因为不同端&#xff08;前段&#xff0c;后端&#xff0…

单臂路由技术,eNSP实验讲解

单臂路由技术&#xff0c;eNSP实验讲解 一、简要介绍1、概念2、工作原理3、优点4、缺点5、应用场景举例 二、eNSP仿真实验1、步骤一&#xff1a;2、步骤二&#xff1a;3、步骤三&#xff1a;4、步骤四&#xff1a; 三、总结。 一、简要介绍 1、概念 单臂路由&#xff08;Rout…

数据库SQL——什么是实体-联系模型(E-R模型)?

目录 什么是实体-联系模型&#xff1f; 1.实体集 2.联系集 3.映射基数 一对一&#xff08;1:1&#xff09; 一对多&#xff08;1:n&#xff09; 多对一&#xff08;n:1&#xff09; 多对多&#xff08;m:n&#xff09; 全部参与&#xff1a; 4.主码 弱实体集&#xf…

WPS Office手机去广高级版

工具介绍功能特点 WPS Office是使用人数最多的移动办公软件&#xff0c;独有手机阅读模式&#xff0c;字体清晰翻页流畅&#xff1b;完美支持文字&#xff0c;表格&#xff0c;演示&#xff0c;PDF等51种文档格式&#xff1b;新版本具有海量精美模版及高级功能 安装环境 [名称…

【微服务】Docker 容器化

一、初识Docker 1. 为什么需要 Docker 大型项目组件较多&#xff0c;运行环境也较为复杂&#xff0c;部署时会遇到一些问题&#xff1a; 依赖关系复杂&#xff0c;容易出现兼容性的问题开发、测试、生产环境有差异 Docker 如何解决依赖的兼容问题 将应用的Libs&#xff08;…

Yocto 项目下通过网络更新内核、设备树及模块

Yocto 项目下通过网络更新内核、设备树及模块 前言 在 Yocto 项目的开发过程中&#xff0c;特别是在进行 BSP&#xff08;Board Support Package&#xff09;开发时&#xff0c;经常需要调整特定软件包的版本&#xff0c;修改内核、设备树以及内核模块。然而&#xff0c;每次…

EasyExcel级联下拉

代码 package com.xc.excel.select;import com.alibaba.excel.EasyExcel; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddressList; import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.FileOutputStream; import java.i…

密码学知识点整理二:常见的加密算法

常用的加密算法包括对称加密算法、非对称加密算法和散列算法。 对称加密算法 AES&#xff1a;高级加密标准&#xff0c;是目前使用最广泛的对称加密算法之一&#xff0c;支持多种密钥长度&#xff08;128位、192位、256位&#xff09;&#xff0c;安全性高&#xff0c;加密效率…

excel功能

统计excel中每个名字出现的次数 在Excel中统计每个名字出现的次数&#xff0c;您可以使用COUNTIF函数或数据透视表。以下是两种方法的详细步骤&#xff1a; 方法一&#xff1a;使用COUNTIF函数 准备数据&#xff1a;确保您的姓名列表位于一个连续的单元格区域&#xff0c;例如…

题目练习之二叉树那些事儿

♥♥♥~~~~~~欢迎光临知星小度博客空间~~~~~~♥♥♥ ♥♥♥零星地变得优秀~也能拼凑出星河~♥♥♥ ♥♥♥我们一起努力成为更好的自己~♥♥♥ ♥♥♥如果这一篇博客对你有帮助~别忘了点赞分享哦~♥♥♥ ♥♥♥如果有什么问题可以评论区留言或者私信我哦~♥♥♥ ✨✨✨✨✨✨个人…

绘制3D图

一个 3D 函数的表面图&#xff0c;其中包含向量场。 Python 代码示例&#xff0c;使用 matplotlib 和 numpy 库来绘制类似的图。 python 复制代码 import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D# 生成网格 x np.linspace(-…