机器学习6-全连接神经网络2

news/2025/2/1 19:40:28/

机器学习6-全连接神经网络2-梯度算法改进

  • 梯度下降算法存在的问题
  • 动量法与自适应梯度
    • 动量法
      • 一、动量法的核心思想
      • 二、动量法的数学表示
      • 三、动量法的作用
      • 四、动量法的应用
      • 五、示例
    • 自适应梯度与RMSProp
  • 权值初始化
    • 随机权值初始化
    • Xavier初始化
    • HE初始化(MSRA) ![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/4cba29d502f74dd2b256927cd3c12697.png)
    • 总结
  • 批归一化
      • 一、原理
      • 二、应用
      • 三、优缺点
    • 批归一化算法
      • 批归一化算法解释

在这里插入图片描述

梯度下降算法存在的问题

在这里插入图片描述
仅增大步长并不能加快算法收敛速度
梯度下降算法是一种常用的优化算法,用于求解函数的最小值或最大值,尤其在机器学习和深度学习中应用广泛。然而,该算法也存在一些问题,以下是对这些问题的详细归纳:

  1. 局部最优解
    问题描述:梯度下降算法可能会陷入局部最优解,而无法找到全局最优解。这是因为梯度下降算法只能保证找到当前位置的下降方向,而无法保证是否能够到达全局最优解。
    影响:在非凸函数中,由于存在多个局部最优解,梯度下降算法很容易陷入其中某一个,导致无法找到全局最优解。
  2. 学习率选择
    问题描述:梯度下降算法中的学习率决定了每次迭代中参数更新的步长。如果学习率选择不合适,可能会导致算法收敛过慢或者无法收敛。
    影响:学习率过大可能导致算法在最优解附近震荡,甚至无法收敛;学习率过小则会导致算法收敛速度过慢,需要更多的迭代次数才能达到收敛。
  3. 特征缩放
    问题描述:当特征之间的尺度差异较大时,梯度下降算法可能会收敛缓慢。这是因为梯度下降算法在更新参数时是基于梯度的大小来确定步长的,如果特征之间的尺度差异较大,梯度的大小也会有很大差异,导致参数更新不均匀。
    影响:特征缩放问题会使得梯度下降算法的收敛路径变得曲折,增加收敛时间和计算成本。
  4. 高维问题
    问题描述:在高维问题中,梯度下降算法需要计算大量的梯度,计算量较大,收敛速度较慢。此外,高维问题中容易出现维度灾难,即样本稀疏性增加,导致模型过拟合。
    影响:高维问题中的梯度下降算法面临巨大的计算挑战,同时可能由于样本稀疏性导致模型性能下降。
  5. 算法变种的选择与适用性
    问题描述:虽然梯度下降算法有多种变种,如随机梯度下降(SGD)、小批量梯度下降等,但每种变种都有其适用的场景和限制。
    影响:选择不合适的算法变种可能导致算法性能不佳,甚至无法收敛。例如,SGD虽然可以加快计算速度,但可能由于每次更新只使用一个样本而导致算法在优化路径上震荡。
    针对以上问题,可以采取一些改进措施来提高梯度下降算法的性能。例如,对于局部最优解问题,可以尝试使用动量法、自适应学习率方法或二阶优化方法来跳出局部最优解;对于学习率选择问题,可以采用逐渐减小学习率、自适应学习率调整或网格搜索等方法来找到合适的学习率;对于特征缩放问题,可以进行特征标准化或归一化处理来缩小特征之间的尺度差异;对于高维问题,可以尝试使用降维技术或稀疏优化方法来减少计算量和提高模型性能。

梯度下降算法虽然是一种有效的优化算法,但在实际应用中需要注意其存在的问题并采取相应的改进措施来提高算法的性能和稳定性。

动量法与自适应梯度

动量法

在这里插入图片描述
动量法(Momentum)是一种优化算法,旨在加速梯度下降法的收敛,尤其是在存在高曲率、嘈杂梯度或小但一致梯度的情况下。

一、动量法的核心思想

动量法通过引入动量概念,使得参数更新不仅依赖于当前的梯度,还考虑了之前梯度的累计效果。这样可以加速收敛并减少参数更新时的震荡。具体来说,动量法引入了一个动量项(通常表示为v或vt),该动量项记录了之前几步的梯度更新情况,并根据这些信息调整当前的参数更新方向和幅度。

二、动量法的数学表示

在动量法中,通常使用以下公式来更新参数和动量项:

  1. 更新动量项:vt=βvt−1−α∇θJ(θ),其中vt表示第t次迭代的动量,β为动量系数(通常取值在0.9到0.99之间),α为学习率,∇θJ(θ)表示目标函数J(θ)关于参数θ的梯度。
  2. 更新参数:θ=θ+vt,其中θ表示需要更新的参数。

注意,上述公式中的符号可能因不同的文献或框架而有所差异,但核心思想是一致的。

三、动量法的作用

  1. 加速收敛:通过引入动量项,动量法可以使参数在更新过程中保持一定的惯性,从而加速收敛。
  2. 减少震荡:动量项可以平滑参数更新的轨迹,减少在更新过程中出现的震荡。
    在这里插入图片描述

四、动量法的应用

动量法广泛应用于各种机器学习和深度学习模型中,特别是在训练神经网络时。通过使用动量法,可以更有效地优化模型的参数,提高模型的性能和稳定性。

在PyTorch等深度学习框架中,可以通过设置优化器的动量系数来使用动量法。例如,在使用SGD(随机梯度下降)优化器时,可以通过设置momentum参数来启用动量法。

五、示例

假设有一个简单的线性回归模型,其目标函数为J(θ)=(h(θ)−y)2,其中h(θ)=θ0+θ1x为模型的预测值,y为真实值。我们可以使用动量法来优化这个模型的参数θ0和θ1。
在每次迭代中,我们首先计算目标函数关于参数的梯度,然后更新动量项和参数。通过多次迭代,我们可以逐渐找到使目标函数最小的参数值。
动量法是一种有效的优化算法,通过引入动量项来加速梯度下降法的收敛并减少震荡。它在机器学习和深度学习领域具有广泛的应用前景。

自适应梯度与RMSProp

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

权值初始化

在这里插入图片描述
全零初始化:网络中不同的神经元有相同的输出,进行同样的参数更新; 因此,这些神经元学到的参数都一样,等价于一个神经元。

建议:采用随机初始化,避免全零初始化!

随机权值初始化

在这里插入图片描述

  • 参数无法传递都后续层

在这里插入图片描述

  • 梯度无法反向传递回前一层

实验结论: 初始化时让权值不相等,并不能保证网络能够正常的有效的初始化方法:使网络各层的激活值和局部梯度的方差在传播过程中尽量保持一致;以保持网络中正向和反向数据流动。

Xavier初始化

在这里插入图片描述

在这里插入图片描述
也就是将权重1,平均给每个输入即N个输入时,每个输入的权值就是w=1/N
在这里插入图片描述

HE初始化(MSRA) 在这里插入图片描述

总结

  • 好的初始化方法可以防止前向传播过程中的信息消失,也可以解决反向传递过程中的梯度消失。
  • 激活函数选择双曲正切或者Sigmoid时,建议使用Xaizer初始化方法;
  • 激活函数选择ReLU或Leakly ReLU时,推荐使用He初始化方法。

批归一化

在这里插入图片描述

机器学习中的批归一化(Batch Normalization,简称BN)是一种重要的技术,尤其在深度学习中应用广泛。以下是对批归一化的原理、应用以及优缺点的详细分析:

一、原理

批归一化的核心思想是在每一层神经网络的输入或输出上进行规范化处理,即对每批次数据的激活值进行标准化操作,使得其均值为0,方差为1。具体来说,批归一化的数学表述可以概括为两个主要步骤:标准化和重参数化。

  1. 标准化:对于每一个训练批次的输入数据X,首先计算其均值μ和方差σ²,然后将数据进行标准化变换,使其具有零均值和单位方差。其中,ε是一个很小的正值,用于防止分母为零。标准化公式为:

    [ X ′ = X − μ σ 2 + ϵ X'=\frac{X-\mu}{\sqrt{\sigma^2+\epsilon}} X=σ2+ϵ Xμ]

  2. 重参数化:经过标准化后的数据z,通过两个可学习的参数γ和β进行缩放和平移,恢复模型的表达能力。其中,γ是对数据尺度的控制,β则是对数据位置的调整。重参数化公式为:

    [ y = γ X ′ + β y=\gamma X'+\beta y=γX+β]

二、应用

批归一化在深度学习中的应用非常广泛,特别是在计算机视觉、语音识别、自然语言处理等领域。以下是几个具体的应用场景:

  1. 计算机视觉:在图像识别任务上,批归一化被证明对复杂深度卷积神经网络(CNN)的训练至关重要。例如,在Inception系列模型和ResNet(残差网络)架构中,批归一化层被嵌入到卷积层之间,显著加快了模型收敛速度,同时减少了训练过程中的内部协变量偏移问题,进而提升了模型在大型数据集上的表现。
  2. 语音识别:在语音识别任务中,批归一化同样发挥了重要作用,有助于提升模型的识别准确性和训练效率。
  3. 自然语言处理:虽然批归一化在计算机视觉领域取得了显著成效,但在自然语言处理任务中,由于其依赖于批量大小,可能不如其他归一化方法(如层归一化)有效。然而,批归一化仍然在某些NLP任务中被采用,并表现出一定的性能提升。

三、优缺点

优点

  1. 解决内部协变量偏移问题:批归一化通过规范化每层的输入或输出,减少了内部协变量偏移问题,从而加速了模型训练。
  2. 改善模型泛化能力:批归一化具有一定的正则化效果,可以减少过拟合现象,提高模型的泛化能力。
  3. 允许使用更大的学习率:由于批归一化稳定了模型的训练过程,因此可以使用更大的学习率来进一步提升训练速度。
  4. 降低对初始化权重的敏感性:批归一化减少了模型对初始化权重的依赖性,使得模型更容易训练。
    在这里插入图片描述
    神经网络训练过程中,梯度消失是一个常见的问题,它通常发生在网络较深时,由于反向传播算法中梯度的累积效应,靠近输入层的网络层权重更新变得非常缓慢,几乎接近于零,这就是所谓的梯度消失。梯度消失会导致模型训练效果不佳,因为浅层网络的权重无法得到有效更新。

批归一化是一种有效的技术,用于缓解梯度消失问题。它通常被插入到全连接层(FC)之后,非线性激活函数(如tanh)之前。批归一化的主要作用是标准化每层的输入,即使这些输入在训练过程中发生变化,也能保持它们的分布相对稳定。具体来说,批归一化通过计算每个批次数据的均值和方差,然后对每个元素进行减均值和除方差的操作,来标准化该批次的数据。

标准化后的数据具有零均值和单位方差,这使得非线性激活函数的输入更加集中在激活函数的敏感区域,从而增强了梯度的传递。在tanh等非线性激活函数中,输入值靠近零时梯度较大,而远离零时梯度较小。批归一化通过将输入值标准化到零附近,使得激活函数的梯度保持在较大的范围内,从而缓解了梯度消失的问题。

此外,批归一化还通过引入可学习的参数γ和β,允许网络自适应地调整数据的尺度和位置,从而恢复了模型的表达能力。这些参数在训练过程中会被学习并调整,以确保模型能够捕捉到数据的复杂特征。

综上所述,批归一化通过标准化每层的输入,增强了梯度的传递,并使得非线性激活函数的输入更加集中在敏感区域,从而有效地缓解了梯度消失问题。这有助于提高神经网络的训练效率和性能。

缺点

  1. 依赖于批量大小:批归一化的效果在一定程度上依赖于批量大小。当批量较小时,统计特性可能不够稳定,导致模型性能下降。

  2. 推理阶段需要调整:在推理阶段,由于没有足够的数据来进行精确的均值和方差估计,需要采用移动平均等方法进行近似,这可能会引入一定的误差。

  3. 不适用于所有任务:批归一化在某些任务(如生成对抗网络GANs)中可能并不适用,因为这些任务需要保持数据分布的多样性。

综上所述,批归一化在机器学习中具有显著的优势和广泛的应用前景,但同时也存在一些局限性。在实际应用中,需要根据具体任务和数据特点选择合适的归一化方法。

批归一化算法

在这里插入图片描述
根据您提供的图片理解信息图片中的文字文本,我将为您解释批归一化算法:

批归一化算法解释

输入

  • 小批量数据集合 B = { x 1 , x 2 , . . . , x m } B = \{x_1, x_2, ..., x_m\} B={x1,x2,...,xm},其中 x i x_i xi 表示第 i i i 个样本的数据。

学习参数

  • γ \gamma γ(在您的图片理解信息中未提及,但通常在批归一化算法中包含此参数,用于缩放归一化后的数据)
  • β \beta β(平移参数,用于在归一化后的数据上添加一个常数,以实现数据增强效果)

输出

  • 归一化并经过平移缩放后的数据集合 { y 1 , y 2 , . . . , y m } \{y_1, y_2, ..., y_m\} {y1,y2,...,ym}

步骤

  1. 计算小批量均值
    [ μ B ← 1 m ∑ i = 1 m x i \mu_B \leftarrow \frac{1}{m} \sum_{i=1}^{m} x_i μBm1i=1mxi]
    这一步是计算小批量数据集合 B B B 的平均值 μ B \mu_B μB

  2. 计算小批量方差
    [ σ B 2 ← 1 m ∑ i = 1 m ( x i − μ B ) 2 \sigma_B^2 \leftarrow \frac{1}{m} \sum_{i=1}^{m} (x_i - \mu_B)^2 σB2m1i=1m(xiμB)2]
    这一步是计算小批量数据集合 B B B 的方差 σ B 2 \sigma_B^2 σB2。注意,您的图片中的文字文本中此步骤的公式表示有误(应为 ( x i − μ B ) 2 (x_i - \mu_B)^2 (xiμB)2 而非 ( x - μ B ) ² (x-\mu_B)^² (xμB)²),且公式前的序号应为2。

  3. 归一化
    [ x ^ i ← x i − μ B σ B 2 + ϵ \hat{x}_i \leftarrow \frac{x_i - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}} x^iσB2+ϵ xiμB]
    这一步是将每个样本 x i x_i xi 归一化到0到1之间。注意,这里通常还会加上一个很小的常数 ϵ \epsilon ϵ(防止分母为零)来保持数值稳定性。然而,您的图片中的文字文本中此步骤的公式表示不完全准确(缺少分母中的 ⋅ \sqrt{\cdot} ϵ \epsilon ϵ),且公式前的序号应为3(但通常不会单独列出这一步的序号,而是作为归一化过程的一部分)。

  4. 平移缩放
    [ y i ← γ x ^ i + β y_i \leftarrow \gamma \hat{x}_i + \beta yiγx^i+β]
    这一步是将归一化后的数据 x ^ i \hat{x}_i x^i 进行平移缩放,以恢复数据的表达能力。其中, γ \gamma γ 是缩放参数(在您的图片理解信息中未提及,但它是批归一化算法的一部分), β \beta β 是平移参数。

综上所述,批归一化算法通过计算小批量数据的均值和方差来归一化数据,并通过平移缩放操作来恢复数据的表达能力。这种技术有助于加速训练过程、提高模型的泛化能力并减少对初始化权重的依赖。

另外,您的图片中的文字文本中提到了“CSDN @郑同学ZXC”,这可能是该图片或文本内容的来源或作者信息,与批归一化算法的解释无直接关系。

  • 问题:输出的0均值1方差的正态分布是最有利于网络分类的分布吗?

  • 答:根据对分类的贡献自行决定数据分布的均值与方差。

  • 问题:单张样本测试时,均值和方差怎么设置?

  • 回答:来自于训练中。累加训练时每个批次的均值和方差,最后进行平均,用平均后的结果作为预测时的均值和方差。


http://www.ppmy.cn/news/1568498.html

相关文章

Three.js 中实现自定义光圈 Shader 效果

目录 前言 Three.js 与自定义着色器的基础知识 效果展示代码概览 顶点着色器的作用 Uniforms 的作用 动画实现 前言 Three.js 是一个功能强大的 WebGL 库,它让开发者能够轻松地创建复杂的 3D 场景、动画和交互效果。然而,有时候内置的材质和效果无…

图漾相机——C++语言属性设置

文章目录 前言1.SDK API功能介绍1.1 Device组件下的API测试1.1.1 相机工作模式设置(TY_TRIGGER_PARAM_EX)1.1.2 TY_INT_FRAME_PER_TRIGGER1.1.3 TY_INT_PACKET_DELAY1.1.4 TY_INT_PACKET_SIZE1.1.5 TY_BOOL_GVSP_RESEND1.1.6 TY_BOOL_TRIGGER_OUT_IO1.1.…

Pyecharts之图表样式深度定制

在数据可视化的世界里,图表的样式定制对于提升数据展示效果和用户体验至关重要。Pyecharts 提供了丰富的样式定制功能,能让我们创建出独具特色的可视化作品。本篇将深入探讨如何使用 Pyecharts 为图表添加线性渐变色、径向渐变色,以及如何添加…

从传统桌面应用到现代Web前端开发:技术对比与高效迁移指南20250122

从传统桌面应用到现代Web前端开发:技术对比与高效迁移指南 在软件开发的广袤领域中,技术栈犹如奔腾不息的江河,持续迭代演进。从早期的桌面应用开发(如MFC、PyQt)到现代Web前端框架(如React、Vue&#xff…

SpringBoot开发(二)Spring Boot项目构建、Bootstrap基础知识

1. Spring Boot项目构建 1.1. 简介 基于官方网站https://start.spring.io进行项目的创建. 1.1.1. 简介 Spring Boot是基于Spring4框架开发的全新框架,设计目的是简化搭建及开发过程,并不是对Spring功能上的增强,而是提供了一种快速使用Spr…

Hive:日志,hql运行方式,Array,行列转换

日志 可以在终端通过 find / | grep hive-log4j2 命令查找Hive的日志配置文件 这些文件用于配置Hive的日志系统。它们不属于系统日志也不属于Job日志,而是用于配置Hive如何记录系统日志和Job日志, 可以通过hive-log4j2 查找日志的位置 HQL的3种运行方式 第1种就是l…

C语言指针专题二 -- 字符指针与字符串

目录 1. 字符指针与字符串的核心原理 字符串的本质 字符串的存储 字符指针的特性 字符指针的操作 2. 编程实例 3. 常见陷阱与注意事项 4. 总结 1. 字符指针与字符串的核心原理 字符串的本质 C语言中没有独立的字符串类型,字符串本质是 以\0(空…

CTF-web: phar反序列化+数据库伪造 [DASCTF2024最后一战 strange_php]

step 1 如何触发反序列化? 漏洞入口在 welcome.php case delete: // 获取删除留言的路径,优先使用 POST 请求中的路径,否则使用会话中的路径 $message $_POST[message_path] ? $_POST[message_path] : $_SESSION[message_path]; $msg $userMes…