🚥神经网络与深度学习笔记_Day5
2026-2-7
| 2026-6-19
字数 4435阅读时长 12 分钟
type
Post
status
Published
date
Feb 7, 2026
slug
NN-DL-Learning5
summary
神经网络与深度学习笔记_Day5,包含 梯度下降优化方法、学习率衰减策略、正则化 与 ANN案例
tags
Python
机器学习
PyTorch
category
机器学习
icon
password
@ZZHow(ZZHow1024)
参考课程:
黑马程序员AI大模型《神经网络与深度学习》全套视频课程,涵盖Pytorch深度学习框架、BP神经网络、CNN图像分类算法及RNN文本生成算法

01_梯度相关知识点回顾

  • 见 Day4

02_指数移动加权平均简介

  • 梯度下降的优化方法
    • 梯度下降优化算法中,可能会碰到以下情况:
        1. 碰到平缓区域,梯度值较小,参数优化变慢。
        1. 碰到 “鞍点” ,梯度为 0,参数无法优化。
        1. 碰到局部最小值,参数不是最优。
    • 对于这些问题,出现了一些对梯度下降算法的优化方法,例如:Momentum、AdaGrad、RMSprop、Adam 等。
    • 梯度下降优化算法问题
      梯度下降优化算法问题
  • 指梯度下降的优化方法-指数加权平均
    • 指数移动加权平均则是参考各数值,并且各数值的权重都不同,距离越远的数字对平均数计算的贡献就越小(权重较小),距离越近则对平均数的计算贡献就越大(权重越大)。
    • 比如:明天气温怎么样,和昨天气温有很大关系,而和一个月前的气温关系就小一些。
    • 计算公式可以用下面的式子来表示:
      • 表示指数加权平均值。
      • 表示 时刻的值。
      • 调节权重系数,该值越大平均数越平缓。
    • 对比 为 0.5 和 0.9 时的结果,从中可以看出:
      • 指数加权平均绘制出的气温变化曲线更加平缓。
      • 的值越大,则绘制出的折线越加平缓,波动越小。( 越小, 时刻的 越不依赖 的值)。
      • 值一般默认都是 0.9。

03_梯度下降优化方法_动量法

  • 梯度计算公式:
  • 参数更新公式:
    • 是当前时刻指数加权平均梯度值。
    • 是历史指数加权平均梯度值。
    • 是当前时刻的梯度值。
    • 是调节权重系数,通常取 0.9 或 0.99。
    • 是学习率。
    • 是当前时刻模型权重参数。
  • 假设:权重 为 0.9,例如:
    • 第一次梯度值:
    • 第二次梯度值:
    • 第三次梯度值:
    • 第四次梯度值:
        1. 表示初始梯度。
        1. 表示当前轮数计算出的梯度值。
        1. 表示历史梯度移动加权平均值。
  • 梯度下降公式中梯度的计算,就不再是当前时刻t的梯度值,而是历史梯度值的指数移动加权平均值。
    • 公式修改为:
      • :当前时刻模型权重参数。
      • :当前时刻指数加权平均梯度值。
      • :学习率。
  • Monmentum 优化方法在一定程度上克服 “平缓”、”鞍点” 的问题
    • 当处于鞍点位置时,由于当前的梯度为 0,参数无法更新。但是 Momentum 动量梯度下降算法已经在先前积累了一些梯度值,很有可能使得跨过鞍点。
    • 由于 mini-batch 普通的梯度下降算法,每次选取少数的样本梯度确定前进方向,可能会出现震荡,使得训练时间变长。Momentum 使用移动加权平均,平滑了梯度的变化,使得前进方向更加平缓,有利于加快训练过程。

04_梯度下降优化方法_AdaGrad

  • AdaGrad 通过对不同的参数分量使用不同的学习率,AdaGrad 的学习率总体会逐渐减小
    • 其计算步骤如下:
        1. 初始化学习率 、初始化参数 、小常数
        1. 初始化梯度累计变量
        1. 从训练集中采样 个样本的小批量,计算梯度
        1. 累积平方梯度: 表示各个分量相乘
        1. 学习率 的计算公式如下:
        1. 权重参数更新公式如下:
        1. 重复 3-7 步骤
    • AdaGrad 缺点是可能会使得学习率过早、过量的降低,导致模型训练后期学习率太小,较难找到最优解

05_梯度下降优化方法_RMSProp

  • RMSProp 优化算法是对 AdaGrad 的优化。最主要的不同是其使用指数加权平均梯度替换历史梯度的平方和。
  • 其计算过程如下:
      1. 初始化学习率 、初始化权重参数 、小常数
      1. 初始化梯度累计变量
      1. 从训练集中采样 个样本的小批量,计算梯度
      1. 使用指数加权平均累计历史梯度, 表示各个分量相乘,公式如下:
      1. 学习率 的计算公式如下:
      1. 权重参数更新公式如下:
      1. 重复 3-7 步骤

08_梯度下降优化方法_Adam

  • Momentum 使用指数加权平均计算当前的梯度值。
  • AdaGrad、RMSProp 使用自适应的学习率。
  • Adam 优化算法(Adaptive Moment Estimation,自适应矩估计)将 Momentum 和 RMSProp 算法结合在一起。
    • 修正梯度:使⽤梯度的指数加权平均。
    • 修正学习率:使⽤梯度平⽅的指数加权平均。
  • 原理:Adam 是结合了 MomentumRMSProp 优化算法的优点的自适应学习率算法。它计算了梯度的一阶矩(平均值)和二阶矩(梯度的方差)的自适应估计,从而动态调整学习率。
  • 梯度计算公式:
    • ,
  • 权重参数更新公式:
  • 其中, 是梯度的一阶矩估计, 是梯度的二阶矩估计, 是偏差校正后的估计。

09_梯度下降优化方法_总结

  • 梯度下降算法优化的目的:梯度下降优化算法中,可能会碰到平缓区域,“鞍点”等问题。
  • 梯度下降算法的优化有哪些:动量法,AdaGrad,RMSProp,Adam。
  • 如何选择梯度下降优化方法
    • 简单任务和较小的模型:SGD,动量法
    • 复杂任务或者有大量数据:Adam
    • 需要处理稀疏数据或者文本数据:AdaGrad,RMSProp

10_学习率优化_背景介绍

  • 为什么要进行学习率优化:在训练神经网络时,一般情况下学习率都会随着训练而变化。这主要是由于,在神经网络训练的后期,如果学习率过高,会造成loss的振荡,但是如果学习率减小的过慢,又会造成收敛变慢的情况。
  • 结论:
    • 采用较小的学习率,梯度下降的速度慢
    • 采用较大的学习率,梯度下降太快越过了最小值点,导致震荡,甚至不收敛(梯度爆炸)。
  • 各学习率的收敛情况
    • 各学习率的收敛情况
      各学习率的收敛情况

11_学习率衰减策略_等间隔学习率衰减

  • API

    12_学习率衰减策略_指定间隔学习率衰减

    • API

      13_学习率衰减策略_指数间隔学习率衰减

      • API

        14_学习率衰减策略_总结

        • 学习率衰减策略对比
          • 方法
            等间隔学习率衰减 (Step Decay)
            指定间隔学习率衰减 (Exponential Decay)
            指数学习率衰减 (Exponential Moving Average Decay)
            衰减方式
            固定步长衰减
            指定步长衰减
            平滑指数衰减,历史平均考虑
            实现难度
            简单易实现
            相对简单,容易调整
            需要额外历史计算,较复杂
            适用场景
            大型数据集、较为简单的任务
            对训练平稳性要求较高的任务
            高精度训练,避免过快收敛
            优点
            直观,易于调试,适用于大批量数据
            易于调试,稳定训练过程
            平滑且考虑历史更新,收敛稳定性较强
            缺点
            学习率变化较大,可能跳过最优点
            在某些情况下可能衰减过快,导致优化提前停滞
            超参数调节较为复杂,可能需要更多的计算资源

        15_正则化_dropout(随机失活)介绍

        • 正则化
          • 在设计机器学习算法时希望在新样本上的泛化能力强。许多机器学习算法都采用相关的策略来减小测试误差,这些策略被统称为正则化
          • 神经网络强大的表示能力经常遇到过拟合,所以需要使用不同形式的正则化策略。
          • 目前在深度学习中使用较多的策略有范数惩罚DropOut特殊的网络层等。
        • Dropout 正则化
          • 在神经网络中模型参数较多,在数据量不足的情况下,很容易过拟合。Dropout(随机失活)是一个简单有效的正则化方法。
          • 在训练过程中,Dropout 的实现是让神经元以超参数p的概率停止工作或者激活被置为 0,未被置为 0 的进行缩放,缩放比例为 。训练过程可以认为是对完整的神经网络的一些子集进行训练,每次基于输入数据只更新子网络的参数。
          • 在实际应用中,Dropout 参数 p 的概率通常取值在 0.2 到 0.5 之间
            • 对于较小的模型或较复杂的任务,丢弃率可以选择 0.3 或更小。
            • 对于非常深的网络,较大的丢弃率(如 0.5 或 0.6)可能会有效防止过拟合。
            • 实际应用中,通常会在全连接层(激活函数后)之后添加 Dropout 层。
          • 在测试过程中,随机失活不起作用
            • 在测试阶段,使用所有的神经元进行预测,以获得更稳定的结果。
            • 直接使用训练好的模型进行测试,由于所有的神经元都参与计算,输出的期望值会比训练阶段高。测试阶段的期望输出是 E[x_test] = x。
            • 测试/推理模式:model.eval()
          • 缩放的必要性
            • 在训练阶段,将参与计算的神经元的输出除以 (1-p)。
            • 经过 Dropout 后的期望输出变为 E[x_dropout] = [(1-p) * x] / (1-p) = x,与测试阶段的期望输出一致。
            • 训练模型:model.train()

        16_正则化_dropout(随机失活)代码演示

        17_正则化_批量归一化(BN)介绍

        • 先对数据标准化,再对数据重构(缩放+平移)。
        • 公式:
            1. 是可学习的参数,它相当于对标准化后的值做了一个线性变换,λ 为系数,β 为偏置;
            1. 通常指为 1e-5,避免分母为 0;
            1. 表示变量的均值;
            1. 表示变量的方差;
        • 批量归一化层在计算机视觉领域使用较多。
        • 归一化的步骤:
            1. 计算均值和方差
            1. 标准化
            1. 缩放和平移
        • 批量归一化的作用:
          • 减少内部协方差偏移:通过对每层的输入进行标准化,减少了输入数据分布的变化,从而加速了训练过程,并使得网络在训练过程中更加稳定。
          • 加速训练
            • 在没有批量归一化的情况下,神经网络的训练通常会很慢,尤其是深度网络。因为在每层的训练过程中,输入数据的分布(特别是前几层)会不断变化,这会导致网络学习速度缓慢。
            • 批量归一化通过确保每层的输入数据在训练时分布稳定,有效减少了这种变化,从而加速了训练过程。
          • 起到正则化作用:批量归一化可以视作一种正则化方法,因为它引入了对训练样本的噪声(不同批次的统计信息不同,批次较小的均值和方差估计会更加不准确),使得模型不容易依赖特定的输入特征,从而起到一定的正则化效果,减少了对其他正则化技术 (如 Dropout)的需求。
          • 提升泛化能力:由于其正则化效果,批量归一化能帮助网络在测试集上取得更好的性能。

        18_正则化_批量归一化(BN)代码实现

        19_ANN案例_手机价格分类_需求介绍

        • 需求分析
          • 小明创办了一家手机公司,他不知道如何估算手机产品的价格。为了解决这个问题,他收集了多家公司的手机销售数据。该数据为二手手机的各个性能的数据,最后根据这些性能得到 4 个价格区间,作为这些二手手机售出的价格区间。
          • 我们需要帮助小明找出手机的功能(例如:RAM 等)与其售价之间的某种关系。我们可以使用机器学习的方法来解决这个问题,也可以构建一个全连接的网络。
          • 在这个问题中,我们不需要预测实际价格,而是一个价格范围,它的范围使用 0、1、2、3 来表示,所以该问题也是一个分类问题。
        • 按照四个步骤来完成这个任务:
            1. 准备训练集数据
            1. 构建要使用的模型
            1. 模型训练
            1. 模型预测评估

        20_ANN案例_手机价格分类_准备数据集

        • 导入所需的工具包
          • 构建数据集
            • 数据共有 2000 条,其中 1600 条数据作为训练集,400 条数据用作测试集。使用 sklearn 的数据集划分工作来完成。并使用 PyTorch 的 TensorDataset 来将数据集构建为 Dataset 对象,方便构造数据集加载对象。
          • 获取数据的结果
            • 输出结果为:
          • Python
          • 机器学习
          • PyTorch
          • 神经网络与深度学习笔记_Day4神经网络与深度学习笔记_Day6
            Loading...