Datawhale X 李宏毅苹果书 AI夏令营《深度学习详解》- 3.3~3.6


Datawhale X 李宏毅苹果书 AI夏令营《深度学习详解》

Datawhale 学习手册:https://linklearner.com/activity/16/15/43

学习链接:https://github.com/datawhalechina/leedl-tutorial
PDF下载:
地址:https://github.com/datawhalechina/leedl-tutorial/releases
链接: https://pan.baidu.com/s/1ZKuXfkXHoyyvPR1-CP-Ffw 提取码: 2t6m
学习视频:


3.3 自适应学习率

概述与背景知识

在深度学习中,随着网络参数的更新,损失通常会逐渐减小,但有时会卡在一个临界点,这时梯度可能很小,但损失不再进一步降低。这可能是由于梯度在某些区域来回震荡,导致损失无法进一步下降。

主要概念

  • 自适应学习率: 为了解决上述问题,引入了一种机制,为每个参数分配不同的学习率,使优化过程更加高效。

详细内容

  • 在传统的梯度下降中,所有参数使用相同的学习率进行更新,这可能导致某些参数更新过于缓慢或过快。
  • 自适应学习率允许为每个参数定制化学习率,即根据梯度的大小自动调整学习率。

重点知识

  • 为了克服梯度下降的局限性,需要更好地利用梯度信息,为每个参数定制化学习率。
  • 如果梯度值较小,则学习率可以适当增大;如果梯度值较大,则学习率应该减小。

实例

  • 对于一个具有两个参数 (w) 和 (b) 的模型,如果损失函数的等高线呈椭圆形分布,那么在长轴方向上梯度会很小,而在短轴方向上梯度会很大。
  • 使用固定学习率会导致参数在长轴方向上的更新过于缓慢,而在短轴方向上的更新又可能过快。

内容总结

  • 通过引入自适应学习率,可以更好地处理不同参数更新的需求,从而提高训练效率。

延伸学习

  • 探索不同的自适应学习率算法,例如AdaGrad、RMSProp和Adam等。
  • 了解这些算法如何影响模型训练的收敛速度和最终性能。

参考资料


3.3.1 AdaGrad

概述与背景知识

AdaGrad是一种自适应学习率方法,能够根据梯度大小自动调整学习率。

主要概念

  • AdaGrad: 一种自适应学习率算法,能够根据历史梯度信息自动调整学习率。

详细内容

  • AdaGrad算法的目的是当梯度较大时减小学习率,当梯度较小时增大学习率。
  • 更新规则为:
    θ i t + 1 ← θ i t − η σ t i g i t \theta_i^{t+1} \leftarrow \theta_i^t - \frac{\eta}{\sqrt{\sigma_t^i}} g_i^t θit+1θitσti ηgit
  • 其中 (\sigma_t^i = \sqrt{\frac{1}{t+1} \sum_{k=0}^t (g_ik)2}), 是梯度的均方根。

重点知识

  • 每个参数都有自己的学习率 (\frac{\eta}{\sqrt{\sigma_t^i}}), 这取决于该参数的历史梯度。
  • 当参数的梯度历史较小 ((\sigma_t^i) 较小) 时, 学习率较大; 反之亦然。

实例

  • 在凸误差表面上, AdaGrad能有效地帮助参数逃离局部最小值, 但可能会在训练后期导致学习率过小。

内容总结

  • AdaGrad通过自适应地调整学习率解决了传统梯度下降的一些局限性, 但长期累积的学习率减小可能会导致收敛速度变慢。

延伸学习

  • 探索AdaGrad在实际应用中的表现以及它与其他自适应学习率算法的对比。

参考资料


3.3.2 RMSProp

概述与背景知识

RMSProp是一种改进的自适应学习率算法, 能够更好地控制学习率的动态调整。

主要概念

  • RMSProp: 一种基于AdaGrad的改进算法, 通过指数加权平均来控制梯度的均方根。

详细内容

  • RMSProp算法的第一步与AdaGrad相似, 但之后采用指数加权平均来计算梯度的均方根。
  • 更新规则为:
    σ t i = α σ t − 1 i + ( 1 − α ) ( g i t ) 2 \sigma_t^i = \alpha \sigma_{t-1}^i + (1-\alpha) (g_i^t)^2 σti=ασt1i+(1α)(git)2
  • 参数更新公式为:
    θ i t + 1 ← θ i t − η σ t i g i t \theta_i^{t+1} \leftarrow \theta_i^t - \frac{\eta}{\sqrt{\sigma_t^i}} g_i^t θit+1θitσti ηgit

重点知识

  • RMSProp通过引入超参数 (\alpha) 来平衡新旧梯度信息的重要性。
  • 与AdaGrad相比, RMSProp能更好地适应动态变化的梯度环境。

实例

  • 在误差表面上, 当梯度由陡峭变为平坦时, RMSProp能够更快地调整学习率以适应变化。

内容总结

  • RMSProp通过动态调整学习率解决了AdaGrad的一些局限性, 特别是在梯度变化较大的情况下。

延伸学习

  • 深入了解RMSProp的原理以及它如何应用于实际的深度学习任务中。

参考资料


3.3.3 Adam

概述与背景知识

Adam是一种结合了动量和自适应学习率的优化算法。

主要概念

  • Adam: 一种综合了RMSProp和动量方法的优化算法。

详细内容

  • Adam算法结合了动量和自适应学习率的优点。
  • 动量用于加速收敛, 自适应学习率则用于解决梯度大小问题。
  • Adam在PyTorch等框架中已实现, 通常使用默认参数即可获得良好效果。

重点知识

  • Adam算法使用动量作为参数更新方向, 并能自适应调整学习率。
  • 其中动量 (momentum) 有助于加速收敛, 并有助于解决梯度方向问题。

实例

  • Adam算法能够在不同的训练阶段提供良好的性能, 尤其是在复杂模型中。

内容总结

  • Adam算法综合了RMSProp和动量的优点, 是一种非常流行的优化算法。

延伸学习

  • 深入研究Adam算法的工作原理以及它如何被广泛应用于各种深度学习任务中。

参考资料


3.4 学习率调度

概述与背景知识

在训练过程中, 固定的学习率可能会导致训练早期收敛过慢或训练后期过拟合等问题。

主要概念

  • 学习率调度: 一种调整学习率的策略, 使学习率随训练进度动态变化。

详细内容

  • 学习率调度通过改变学习率来适应训练的不同阶段。
  • 例如, 学习率衰减 (decay) 是一种常见的策略, 它会随着训练的进行逐步减少学习率。

重点知识

  • 学习率衰减可以避免训练后期学习率过大导致的振荡现象。
  • 预热策略可以让学习率从小开始逐渐增加, 以稳定训练过程。

实例

  • 在使用AdaGrad时, 可能会出现学习率过小而导致训练停滞的现象。通过学习率衰减可以缓解这个问题。
  • 残差网络、BERT和Transformer等模型训练中都会使用预热策略。

内容总结

  • 学习率调度是一种重要的技术, 可以帮助优化器更好地适应训练过程。

延伸学习

  • 探索不同的学习率调度策略及其对训练效果的影响。

参考资料


3.5 优化总结

概述与背景知识

本节总结了优化器的发展历程以及现代优化器的主要特点。

主要概念

  • 优化器: 用于更新模型参数以最小化损失函数的算法。

详细内容

  • 从最初的梯度下降到自适应学习率算法, 优化器不断发展。
  • 最终版本的优化器包含了动量、自适应学习率和学习率调度等特性。

重点知识

  • 动量有助于加速收敛, 并能帮助优化器跳过鞍点。
  • 自适应学习率使得每个参数都能获得适合自身特性的学习率。
  • 学习率调度可以改善训练过程中的学习率调整策略。

实例

  • Adam优化器是一种非常流行的优化器, 它结合了动量和自适应学习率的优点。

内容总结

  • 现代优化器通过结合多种技术, 能够有效提升训练效率并改善最终模型的性能。

延伸学习

  • 探索最新的优化器发展, 并尝试理解它们是如何进一步改进优化过程的。

参考资料


3.6 分类

3.6.1 分类与回归的关系

概述与背景知识

在机器学习中,分类和回归是最基本的两类问题。分类问题的目标是预测数据所属的类别,而回归问题则是预测一个连续的数值。

主要概念

  • 回归: 预测一个连续值的目标变量。
  • 分类: 预测离散值的目标变量,即数据所属的类别。

详细内容

  • 回归: 输入一个特征向量 (\mathbf{x}),输出一个预测值 (\hat{y}),并希望 (\hat{y}) 尽可能接近真实值 (y)。
  • 分类: 输入一个特征向量 (\mathbf{x}),输出一个预测值 (\hat{y}),并希望 (\hat{y}) 与正确的类别尽可能接近。通常情况下,(\hat{y}) 是一个标量,可以将其转换为类别的编号或使用独热编码表示类别。

重点知识

  • 类别编号: 使用数字表示类别可能会引入类别间关系的误解。
  • 独热编码: 使用独热编码表示类别可以避免引入类别间的相对距离关系。

实例

  • 数字表示类别: 假设类别1、2、3分别编号为1、2、3,预测值 (\hat{y}) 接近某个类别的编号。
  • 独热编码表示类别: 对于三个类别,独热编码分别为 ([1, 0, 0]), ([0, 1, 0]), ([0, 0, 1])。

内容总结

  • 数字表示类别可能引入类别间关系的误解。
  • 独热编码能更好地表示类别,避免引入类别间的相对距离关系。
  • 在多分类问题中,模型通常输出多个预测值,对应各个类别的概率。

延伸学习

  • 多分类问题: 了解如何处理多个类别的分类问题,例如使用逻辑回归进行多分类。
  • 独热编码的应用: 研究独热编码在不同机器学习框架中的应用。

3.6.2 带有 softmax 的分类

概述与背景知识

在分类问题中,模型最终需要输出每个类别的概率。softmax 函数可以将模型输出转换为概率分布。

主要概念

  • softmax 函数: 用于将模型输出转换为概率分布的函数。
  • 独热编码: 表示分类标签的一种方式,其中每个类别由一个维度上的 1 和其他维度上的 0 表示。

详细内容

  • softmax 公式:
    y i ′ = exp ⁡ ( y i ) ∑ j exp ⁡ ( y j ) y'_i = \frac{\exp(y_i)}{\sum_j \exp(y_j)} yi=jexp(yj)exp(yi)
    其中 (y_i) 是模型原始输出的第 (i) 个元素,(y’_i) 是经过 softmax 函数转换后的第 (i) 个元素的概率。

  • softmax 的作用:

    • 归一化输出到 ([0, 1]) 区间内。
    • 确保输出的概率之和为 1。
    • 加大输出值之间的差异性。

重点知识

  • softmax 函数的作用: 将模型输出转换为概率分布,使得每个输出值表示属于相应类别的概率。
  • 两分类问题: 对于二分类问题,通常使用 sigmoid 函数代替 softmax 函数。

实例

  • softmax 示例: 对于输入向量 ([3, 1, -3]),通过 softmax 函数转换后得到的概率分布为大约 ([0.88, 0.12, 0])。

内容总结

  • softmax 函数将模型输出转换为概率分布。
  • softmax 函数确保输出的概率之和为 1,并且增加输出值之间的差异性。
  • 二分类问题通常使用 sigmoid 函数。

延伸学习

  • softmax 函数的数学基础: 了解 softmax 函数背后的数学原理。
  • softmax 函数的替代方案: 探索其他用于概率分布转换的函数,如 softmax 的变体。

参考资料


3.6.3 分类损失

概述与背景知识

分类任务中,我们需要衡量模型预测结果与真实标签之间的差异。

主要概念

  • 均方误差: 一种常用的损失函数,用于衡量预测值与真实值之间的差距。
  • 交叉熵: 用于分类问题的损失函数,特别适用于独热编码的标签。

详细内容

  • 均方误差:
    e = ∑ i ( y i − y i ′ ) 2 e = \sum_i (y_i - y'_i)^2 e=i(yiyi)2
  • 交叉熵:
    e = − ∑ i y i ln ⁡ ( y i ′ ) e = -\sum_i y_i \ln(y'_i) e=iyiln(yi)

重点知识

  • 交叉熵的优点:
    • 交叉熵损失函数在预测值远离真值时具有较大的梯度,有助于模型学习。
    • 交叉熵损失函数在训练初期可以有效引导模型快速收敛。

实例

  • 交叉熵与均方误差对比: 当正确答案为 ([1, 0, 0]),模型输出 (y’_1, y’_2, y’_3) 时,对比交叉熵和均方误差的损失表面,可以看出交叉熵损失函数在训练初期更容易引导模型收敛。

内容总结

  • 均方误差和交叉熵都可以作为分类问题的损失函数。
  • 交叉熵损失函数在预测值远离真值时具有较大的梯度,有助于模型学习。
  • 交叉熵损失函数在训练初期可以有效引导模型快速收敛。

延伸学习

  • 其他损失函数: 探讨其他类型的损失函数及其适用场景。
  • 优化算法: 了解如何选择合适的优化算法来配合特定的损失函数。

参考资料


实践-HW3(CNN)卷积神经网络-图像分类

要完成一个深度神经网络训练模型的代码,大概需要完成下面的内容:

  1. 导入所需要的库/工具包
  2. 数据准备与预处理
  3. 定义模型
  4. 定义损失函数和优化器等其他配置
  5. 训练模型
  6. 评估模型
  7. 进行预测

训练结果

在这里插入图片描述

在这里插入图片描述

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


优化

优化卷积神经网络(CNN)模型的过程涵盖了多个方面,这些方面的改进可以显著提升模型的性能和泛化能力。常见的优化方向包括:

  1. 优化网络结构:设计更深或更宽的网络,引入残差连接等现代架构。
  2. 使用正则化技术:如L2正则化、Dropout、Batch Normalization等,以防止过拟合。
  3. 优化激活函数:选择适当的激活函数如ReLU、Leaky ReLU、Swish等,以加速训练并提升模型表现。
  4. 优化算法:采用先进的优化算法如Adam、RMSprop或学习率调度器。

代码的最后一部分提供了数据增强/图像增广的示例,并结合t-SNE算法对增强后的特征进行降维和可视化。这种可视化方法有助于分析数据分布、评估数据增强的效果,并为进一步优化模型分类精度提供直观的指导。
t-SNE(t-Distributed Stochastic Neighbor Embedding)是一种非线性降维技术,广泛应用于数据可视化。它的核心思想是通过在高维空间中保持数据点之间的局部相似性,将数据映射到低维(通常是二维或三维)空间,从而使得不同类别的数据点在低维空间中形成清晰的聚类结构。这种技术特别适用于高维特征数据的可视化,有助于直观地理解数据的内在结构。


  1. 数据增强:通过各种数据增强技术扩展训练数据,提高模型的鲁棒性。
  2. 约束初始化权重:利用He或Xavier初始化,确保训练的稳定性。
  3. 损失函数调整:选择或设计合适的损失函数,以更好地反映模型目标。
  4. 模型压缩:通过剪枝、量化或知识蒸馏来减少模型复杂度,提高推理速度。
  5. 混合精度训练:结合半精度和单精度浮点数训练,加快训练速度并减少显存占用。
  6. 硬件加速:利用GPU、TPU等硬件加速器,以显著提升训练和推理的效率。
优化网络结构

优化网络结构是提升卷积神经网络(CNN)性能的重要步骤。CNN通常由多个模块或组块结构组成,通过合理设计和优化这些结构,可以显著增强模型的学习能力和泛化性能。以下是几种优化网络结构的策略:

  1. 增加网络深度与调整卷积核大小
    增加网络的深度(即增加卷积层的数量)和调整卷积核的大小是提升模型学习能力的常见方法。更深的网络能够捕捉到更复杂和抽象的特征,而不同大小的卷积核则可以提取多尺度的信息。比如,使用3x3的小卷积核可以更精确地捕捉局部细节,而5x5或7x7的卷积核则能够获取更大范围的上下文信息。此外,通过在网络中结合不同尺寸的卷积核,还可以增强模型对多尺度特征的感知能力。
  2. 引入先进的结构如残差连接
    残差网络(ResNet)通过引入跳跃连接(skip connections),有效解决了深度网络中的梯度消失和梯度爆炸问题。这些残差连接允许信息在网络中直接跨层传递,使得极深的网络也能顺利训练。这不仅提高了网络的稳定性,还加快了收敛速度,从而进一步提升模型的整体表现。此外,残差结构在多个现代深度网络中得到了广泛应用,证明了其在处理深度网络优化挑战中的有效性。
  3. 应用现代卷积神经网络架构
    采用经过验证的现代卷积神经网络架构是提升模型性能的有效途径。比如:
  • AlexNet:作为深度学习在图像分类领域的开创性架构,AlexNet通过较大的卷积核和ReLU激活函数引领了深度学习的应用潮流。
  • VGG:VGG通过使用多层3x3卷积核构建深层网络,既简化了网络设计又提升了模型的准确性,成为多个任务的基准模型。
  • Inception:Inception网络引入了多路径结构,使得网络能够在不同的尺度上并行提取特征,有效提高了计算效率和模型的表现力。
  • ResNet:ResNet的残差结构成功解决了深度网络中常见的优化难题,使得训练非常深的网络成为可能,并在多个计算机视觉任务中表现卓越。

数据增强

图像数据增强是提升卷积神经网络(CNN)性能的重要策略之一,尤其是在数据量有限的情况下。通过对现有训练数据进行各种变换,数据增强可以有效扩展数据集规模,增强模型的鲁棒性和泛化能力。

  • 几何变换(Geometric Transformations)

    • 旋转(Rotation):随机旋转图像一定角度,有助于CNN学习旋转不变性,使得模型能够更好地处理不同角度的对象。
    • 平移(Translation):对图像进行随机水平或垂直方向的平移,帮助模型更好地应对对象位置的变化。
    • 翻转(Flipping):常见的操作是水平翻转,用于应对左右对称的对象,如人脸、动物等。
    • 缩放(Scaling):随机缩放图像可以帮助模型学习处理不同尺度的对象,增强模型的尺度不变性。
    • 剪切(Shearing):通过改变图像形状,模拟对象的倾斜或变形,这有助于模型在面对非标准形状的对象时仍能做出正确的判断。
  • 颜色变换(Color Transformations)

    • 亮度调整(Brightness Adjustment):通过随机增加或减少图像的亮度,可以模拟不同光照条件下的图像,增强模型的光照不变性。
    • 对比度调整(Contrast Adjustment):随机改变图像的对比度,帮助模型在不同对比度的场景中保持鲁棒性。
    • 饱和度调整(Saturation Adjustment):调整图像的颜色饱和度,增强模型对颜色变化的适应性。
    • 色调调整(Hue Adjustment):通过改变图像的色调,可以增强模型对不同颜色组合的鲁棒性。
  • 噪声添加(Adding Noise)

  • 高斯噪声(Gaussian Noise):在图像中添加高斯噪声,可以使模型对真实世界中的噪声数据更加稳健。

  • 椒盐噪声(Salt and Pepper Noise):通过随机在图像中加入白色和黑色像素点,模拟图像传感器噪声,提升模型的抗噪能力。

  • 裁剪和填充(Cropping and Padding)

    • 随机裁剪(Random Cropping):从图像中随机裁剪出一部分并进行训练,有助于模型聚焦于图像中的重要区域。
    • 填充(Padding):在图像周围添加像素,使得裁剪后的图像恢复到原始大小,这样可以保持数据的一致性。
  • 高级数据增强技术

    • 混合增强(MixUp):通过将两张图像的像素值进行加权平均,生成新的训练样本,从而使模型在处理类间关系时更加稳健。
    • 随机擦除(Random Erasing):随机遮挡图像中的部分区域,迫使模型在信息不完整的情况下仍能正确分类,增强模型的鲁棒性。
    • 对抗样本生成(Adversarial Augmentation):生成对抗样本,通过微小的扰动引起模型错误分类,从而使模型对这种干扰更加不敏感。

HW4(Self-Attention)自注意力机制 -声音分类

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

任务描述
对给定特征的演讲者进行分类。
主要目标:学习如何使用变压器。

基线:

简单:运行示例代码并知道如何使用变压器。
介质:知道如何调整变压器的参数。
强:构造异构体,这是各种变压器。
老板:实施自注意力池 和添加剂保证金Softmax ,以进一步提高性能。
其他链接

竞争:[链接] (https://www.kaggle.com/t/49ea0c385a974db5919ec67299ba2e6b)
幻灯片:https://docs.google.com/presentation/d/1LDAW0GGrC9B6D7dlNdYzQL6D60-iKgFr/edit?usp=sharing&ouid=104280564485377739218&rtpof=true&sd=true
数据:[链接] (https://github.com/googly-mingto/ML2023HW4/releases)


数据
数据集
总的来说,这段代码的目的是通过设置随机数种子来确保代码的可重复性,这在科学实验和机器学习任务中非常重要。

原始数据集是Voxceleb2。

Voxceleb2的许可证和完整版本。

我们从Voxceleb2中随机选择了600名演讲者。

然后将原始波形预处理成mel-spectrograms。

Args:

data_dir:数据目录的路径。

metadata_path:元数据的路径。

segment_len:用于训练的音频段的长度。

数据目录的架构 数据目录 |---- 元数据.json |---- testdata.json |---- mapping.json |---- uttr-{随机字符串}.pt

元数据中的信息

“n_mels”:mel-spectrogram的量度。
扬声器:一本字典。
键:扬声器ID。
值:“feature_path”和“mel_len”
为了提高效率,我们在跟踪步骤中将mel-spectrograms分割成部分。


模型
变压器编码器层:

注意的基础变压器编码器层就是你所需要的

参数:

d_model:输入的预期特征数量(必填)。
nhead:多头值守模型的头数(必填)。
dim_feedforward:feedforward网络模型的维度(默认=2048)。
掉出:掉出值(默认=0.1)。
激活:中间层、relu或gelu(默认=relu)的激活功能。
变压器编码器:

变压器编码器是N个变压器编码器层的堆栈
参数:
encoder_layer:TransformerEncoderLayer()类的实例(必填)。
num_layers:编码器中子编码层的数量(必填)。
规范:层归一化组件(可选)。


学习率时间表
对于变压器架构,学习速率时间表的设计与CNN不同。
以前的工作表明,学习率的预热对于使用变压器架构训练模型很有用。
热身时间表
一开始将学习率设置为0。
在热身期间,学习率从0线性增加到初始学习率。


  • 11
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值