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

server/2025/2/2 4:52:02/

机器学习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/server/164253.html

相关文章

springboot 2.7.6 security mysql redis jwt配置例子

数据库结构用的是若依的数据库基本结构,ruoyi.vip。 总体参考了文章:https://blog.csdn.net/qq_45847507/article/details/126681110 本文章只包含不同的地方,相同的不再赘述。 1、创建spring工程,jdk1.8,maven。 pom.xml中依赖部…

Elasticsearch Queries

Elasticsearch Compound Queries Elasticsearch 的 Compound Queries 是一种强大的工具,用于组合多个查询子句,以实现更复杂的搜索逻辑。这些查询子句可以是叶查询(Leaf Queries)或复合查询(Compound Queries&#xf…

深入了解 npm 和 pnpm:前端包管理工具的选择与比较

在现代前端开发中,包管理工具已经成为了必不可少的组成部分。它们帮助我们管理项目的依赖、自动化任务、以及在团队协作时确保一致的开发环境。最常见的前端包管理工具有 npm 和 pnpm,它们各自具有独特的特点和优势。今天,我们就来一起深入了…

【elasticsearch】reindex 断点续传

在进行大规模 reindex 时,由于数据量庞大或者网络/硬件故障,可能会发生中断。为了确保数据的完整性并支持中断后的续传,Elasticsearch 提供了一些方法来实现 断点续传。尽管 reindex 操作本身没有直接的“断点续传”选项,但可以通…

回归算法、聚类算法、决策树、随机森林、神经网络

这也太全了!回归算法、聚类算法、决策树、随机森林、神经网络、贝叶斯算法、支持向量机等十大机器学习算法一口气学完!_哔哩哔哩_bilibili 【线性回归、代价函数、损失函数】动画讲解_哔哩哔哩_bilibili 14分钟详解所有机器学习算法:…

React应用深度优化与调试实战指南

一、渲染性能优化进阶 1.1 精细化渲染控制 typescript 复制 // components/HeavyComponent.tsx import React, { memo, useMemo } from react;interface Item {id: string;complexData: {// 复杂嵌套结构}; }const HeavyComponent memo(({ items }: { items: Item[] }) &g…

【架构面试】二、消息队列和MySQL和Redis

MQ MQ消息中间件 问题引出与MQ作用 常见面试问题:面试官常针对项目中使用MQ技术的候选人提问,如如何确保消息不丢失,该问题可考察候选人技术能力。MQ应用场景及作用:以京东系统下单扣减京豆为例,MQ用于交易服和京豆服…

「全网最细 + 实战源码案例」设计模式——桥接模式

核心思想 桥接模式(Bridge Pattern)是一种结构型设计模式,将抽象部分与其实现部分分离,使它们可以独立变化。降低代码耦合度,避免类爆炸,提高代码的可扩展性。 结构 1. Implementation(实现类…