神经网络应用

1. 引言

1.1 深度学习基础与应用概览

本章的学习目标是将前一章中获得的神经网络基础知识(如多层感知机的正反向计算过程,以及基础优化方法)应用到实际场景中。通过分析经典深度学习算法,学习如何将基础神经网络应用于实际场景,并逐步优化以实现工业级应用,最终目标是使机器能更好地理解和服务人类。

1.2 输入类型与任务匹配

人类获取的信息可以分为两大主要类型,深度学习模型根据这些类型及其对应的任务,采用不同的神经网络结构:

  • 图像信息
    • 任务:理解图像内容(例如,识别图像中的物体、场景等)。
    • 方法:主要通过卷积神经网络 (CNN) 来处理这类任务。
  • 序列信息
    • 任务:理解语音、文字或视频内容(这些数据具有时间或逻辑上的序列依赖性)。
    • 方法:主要通过循环神经网络 (RNN) 来处理这类任务。

1.3 归纳偏置 (Inductive Bias)

1.3.1 定义与哲学渊源

  • 定义归纳偏置 (Inductive Bias) 是指模型结构本身所蕴含的限制、假设和偏向。它决定了模型在面对未知数据时,倾向于做出哪种类型的预测,或者说,它对学习任务设定了一种“先验”的约束。
  • 哲学渊源
    • 洛克 (John Locke) 的《人类理解论》中的经验主义:洛克认为人的心灵初始状态像一块“白板”,精神内容完全来源于经验。这可以类比于一个模型,如果没有归纳偏置,它将完全依赖从数据中学习到的模式。
    • 康德 (Immanuel Kant) 的《纯粹理性批判》中的综合先验判断:康德认为存在不来源于感官经验、而是来源于心智的先天结构的知识(如时空、逻辑、数学等)。他提出,我们通过结合先天知识经验来认识世界。这可以类比于归纳偏置,即模型内置的结构(先天知识)使其能够更好地处理某些类型的数据(经验),从而更有效地学习。康德认为,正是因为我们先天具备了认识三维时空、逻辑和数学的大脑结构,我们才能更好地认识世界。

1.3.2 神经网络模型与归纳偏置

正如康德所言,大脑的先天结构决定了其认识世界的方式,不同的神经网络模型结构也具有不同的归纳偏置。这意味着:

  • 每种模型结构都对输入数据和学习任务做出了特定的假设
  • 这些假设使得模型在处理特定类型的数据或解决特定类型的问题时效率更高、性能更好。
  • 例如,卷积神经网络 (CNN) 具有局部连接权重共享的归纳偏置,这使其天然适合处理具有空间局部性和平移不变性的图像数据。而循环神经网络 (RNN)循环结构使其适合处理具有时间依赖性的序列数据。因此,选择合适的神经网络模型结构对于解决特定任务至关重要,因为它能够利用与任务匹配的归纳偏置来更有效地学习。

2. 适合图像处理的卷积神经网络

2.1 卷积神经网络概述

2.1.1 发展历史

  • 对卷积神经网络 (CNN) 的研究可以追溯到日本学者福岛邦彦1979 和 1980 年提出的 Neocognition 模型。这个模型参照了生物的视觉皮层 (visual cortex) 设计,是现代CNN的早期雏形。
  • AlexNetILSVRC2012 (ImageNet Large Scale Visual Recognition Challenge 2012) 图像分类竞赛中取得巨大成功。它显著提高了图像分类的准确率,并标志着卷积神经网络在图像分类领域获得快速发展,成为主流方法。

2.1.2 全连接网络的挑战

  • 问题背景: 对于计算机视觉任务,例如识别图像中的物体,传统的多层感知机 (MLP) 或全连接网络 (Fully Connected Network, FCN) 会面临巨大的参数量挑战。
  • 示例分析 (原始资料第7页和第8页图示的文字描述):
    • 小图像示例 (32x32x3):
      • 输入图像大小:32x32 像素,通道数 RGB 为 3。
      • 输入数据量:32×32×3=307232 \times 32 \times 3 = 3072 个特征。
      • 如果第一层隐层神经元有 100 个,那么连接输入层和第一层隐层的权重数量将是 3072×100=3072003072 \times 100 = 307200。这已经是相当大的参数量。
    • 大图像示例 (1024x1024x3):
      • 实际场景中,图像尺寸往往更大,例如 1024×10241024 \times 1024 像素,通道数 3。
      • 如果第一层隐层神经元有 1000 个 (这还是一个相对较小的数字),那么仅仅是第一层的权重数量将达到 1024×1024×3×10003×1091024 \times 1024 \times 3 \times 1000 \approx 3 \times 10^9 (即 30 亿) 的量级。
  • 挑战总结:
    • 参数量过大: 如此庞大的权重数量会导致模型训练困难,计算资源消耗巨大。
    • 过拟合 (Overfitting): 过多的参数使得模型容易过度学习训练数据中的噪声和特定模式,导致在新数据上泛化能力差。
  • 解决方案: 卷积神经网络通过其特有的 局部连接权重共享 机制,可以有效减少权重数量,从而解决全连接网络在处理高维图像数据时面临的挑战,并为构建更深的网络结构提供了可能。

2.2 卷积层 (Convolutional Layer)

2.2.1 核心特征

卷积层是CNN的核心组成部分,其引入的两个重要特征极大地优化了图像处理:

  • 局部连接 (Local Connectivity):
    • 传统全连接: 每个神经元都与前一层的所有神经元连接。
    • 卷积层: 卷积层中的每个神经元(即输出特征图上的一个点)只与其输入特征图(或原始图像)的局部区域相连接。这个局部区域的大小由滤波器 (filter/kernel) 的尺寸决定。
    • 优势: 这种设计模仿了生物视觉系统对局部特征的感知,例如边缘、纹理等,并且大大减少了连接数量。
  • 权重共享 (Weight Sharing):
    • 传统全连接: 不同的连接使用不同的权重。
    • 卷积层: 一个滤波器(即一组权重)在输入特征图上滑动,对所有局部区域执行相同的卷积操作。这意味着同一组权重被输入特征图的所有局部区域共享
    • 优势: 这种共享机制使得模型能够检测到图像中任何位置的相同特征(例如,无论一只猫的眼睛出现在图像的左上角还是右下角,都可以被同一个滤波器检测到)。同时,它进一步减少了模型的总参数量,有效避免过拟合,并使得构建更深层次的网络成为可能。

2.2.2 卷积运算

  • 本质: 卷积运算在神经网络中实际是计算输入矩阵与滤波器矩阵之间的内积 (相关系数),用于提取特征。
2.2.2.1 数学定义
  • 在数学上,一维离散卷积的定义为: y[n]=i=x[i]h[ni]=x[n]h[n]y[n] = \sum_{i=-\infty}^{\infty} x[i]h[n-i] = x[n] * h[n] 其中,x[n]x[n] 是输入信号,h[n]h[n] 是卷积核 (滤波器),y[n]y[n] 是输出信号。
  • 在卷积神经网络中,这个概念被推广到二维图像,通常是输入数据与一个小的矩阵 (滤波器) 进行元素乘积求和的操作,然后滑动到下一个区域。
2.2.2.2 多输入单输出
  • 过程描述 (原始资料第13页图示的文字描述):
    • 假设输入是一个 6×6×36 \times 6 \times 3 的特征图 (例如,RGB 图像,6x6 像素,3 个颜色通道)。
    • 使用一个 3×3×33 \times 3 \times 3 的滤波器 (这里,滤波器的深度必须与输入特征图的通道数相匹配)。
    • 这个滤波器在输入特征图的每个通道上分别进行卷积操作,然后将三个通道的卷积结果相加,得到一个单一的输出特征图(例如 4×44 \times 4)。
    • 关键点: 尽管输入有多个通道,但一个滤波器最终只生成一个输出通道。这意味着,如果我们需要多个输出特征图 (检测多种特征),就需要使用多个不同的滤波器。
    • 【若需查看原始图片详情,请参考原文中的“多输入特征图单输出特征图卷积运算示意图”】
2.2.2.3 边缘检测示例
  • 核心思想: 不同的滤波器 (卷积核) 可以用来检测图像中的不同特征,例如垂直边缘、水平边缘、对角线边缘等。这是因为滤波器中的权重可以被训练成特定的模式,当与图像中的对应模式进行内积运算时,会产生较高的激活值。
  • 示例一:垂直边缘检测 (原始资料第16页图示的文字描述):
    • 滤波器示例:
      1  0  -1
      1  0  -1
      1  0  -1
      这个滤波器左右两侧是正负对称的,中间为零。
    • 输入图像示例: 图像左侧是高亮度区域 (例如 10),右侧是低亮度区域 (例如 0),中间是过渡区域。
    • 卷积结果: 当这个滤波器滑动到垂直边缘 (亮度从高到低变化) 时,其输出值会显著增大,从而“检测”到垂直边缘。例如,当滤波器跨越一个亮到暗的垂直边界时,它会将左侧亮区乘以正值,右侧暗区乘以负值,求和后产生较大的绝对值。
  • 示例二:对角线边缘检测 (原始资料第16页图示的文字描述):
    • 滤波器示例:
      1  1  0
      1  0  -1
      0  -1 -1
      这个滤波器呈现对角线的正负值分布。
    • 卷积结果: 类似地,当这个滤波器滑动到图像中的对角线边缘时,会产生较高的响应,实现对角线边缘的检测。
  • 【若需查看原始图片详情,请参考原文中的“垂直边缘检测与对角线边缘检测示例图”】

2.2.3 边界扩充 (Padding) 与卷积步长 (Stride)

这两个参数是卷积层中控制输出特征图尺寸和信息保留的关键。

  • 边界扩充 (Padding):
    • 定义: 在进行卷积操作之前,在输入图像或特征图的边界周围添加额外的像素。这些像素通常填充为 0 或边缘像素的重复值。
    • 目的:
      • 防止特征图持续减小: 随着多层卷积,特征图的尺寸会逐渐缩小。Padding 可以保持特征图的尺寸不变或减缓其缩小速度,从而允许构建更深的网络。
      • 强化边缘信息: 图像边缘的像素点在没有Padding的情况下,只参与少数几次卷积计算。通过Padding,边缘像素也能被充分利用,避免边缘信息丢失,因为边缘信息往往对图像识别很重要。
  • 卷积步长 (Stride):
    • 定义: 滤波器在输入特征图上滑动时,每次移动的像素点个数。
    • 影响:
      • 控制输出尺寸: 步长越大,滤波器跳过的区域越多,输出特征图的尺寸就越小。
      • 下采样: 当步长大于 1 时,实际上执行了一种形式的下采样 (down-sampling),减少了计算量,但可能损失一些细节。
  • 输出特征图尺寸计算公式: 给定输入尺寸 Wi×HiW_i \times H_i,滤波器尺寸 K×KK \times K,Padding pp,步长 ss。 输出特征图的尺寸 Wo×HoW_o \times H_o 为: Wo=Wi+2pKs+1W_o = \frac{W_i + 2p - K}{s} + 1 Ho=Hi+2pKs+1H_o = \frac{H_i + 2p - K}{s} + 1
    • 示例 (原始资料第17页图示的文字描述):
      • 输入 5×55 \times 5,滤波器 3×33 \times 3,Padding p=1p=1,步长 s=2s=2
      • Wo=(5+2×13)/2+1=(5+23)/2+1=4/2+1=2+1=3W_o = (5 + 2 \times 1 - 3)/2 + 1 = (5+2-3)/2 + 1 = 4/2 + 1 = 2+1=3
      • Ho=(5+2×13)/2+1=3H_o = (5 + 2 \times 1 - 3)/2 + 1 = 3
      • 因此,输出特征图尺寸为 3×33 \times 3
    • 【若需查看原始图片详情,请参考原文中的“卷积步长与Padding示例图”】

2.2.4 多输入多输出

  • 过程描述 (原始资料第18页图示的文字描述):
    • 如果输入是 Wi×Hi×CiW_i \times H_i \times C_i (高、宽、输入通道数)。
    • 我们使用多个滤波器。每个滤波器 (例如 K×K×CiK \times K \times C_i) 作用于输入特征图,生成一个输出通道 (如前所述)。
    • 如果我们有 CoC_o 个不同的滤波器,那么它们会分别生成 CoC_o 个输出通道。
    • 最终的输出特征图尺寸将是 Wo×Ho×CoW_o \times H_o \times C_o (高、宽、输出通道数)。
    • 关键点: 不同的滤波器可以检测不同的特征。例如,一个滤波器可能检测垂直边缘,另一个检测水平边缘,第三个检测特定颜色模式。
    • 【若需查看原始图片详情,请参考原文中的“多输入特征图多输出特征图卷积运算示意图”】

2.2.5 参数总结

  • 输入: Wi×Hi×CiW_i \times H_i \times C_i (宽度、高度、输入通道数)
  • 输出: Wo×Ho×CoW_o \times H_o \times C_o (宽度、高度、输出通道数)
    • Wo=Wi+2pKs+1W_o = \frac{W_i + 2p - K}{s} + 1
    • Ho=Hi+2pKs+1H_o = \frac{H_i + 2p - K}{s} + 1
  • 滤波器 (Filter/Kernel):
    • 可训练参数。每个滤波器的大小通常为 K×K×CiK \times K \times C_i
    • 卷积层中共有 CoC_o 个这样的滤波器,它们共同生成输出的 CoC_o 个通道。
    • 因此,一个卷积层中滤波器的总参数量为 Co×K×K×CiC_o \times K \times K \times C_i
  • 偏置 (Bias):
    • 可训练参数。每个输出通道通常对应一个偏置项。
    • 总偏置参数量为 1×1×Co1 \times 1 \times C_o (每个输出通道一个偏置)。
    • 作用: 偏置项允许分类器偏离激活函数原点,增加模型的灵活性,使其能够更好地拟合数据。
  • 激活函数 (Activation Function):
    • 卷积操作后通常会接着一个非线性激活函数 (如 ReLU),为网络引入非线性能力,使其能够学习更复杂的模式。
  • 超参数:
    • 步长 (stride): 滤波器滑动的步长。
    • 填充 (pad): 边界填充的大小。
    • 滤波器尺寸 (K): 滤波器的高度和宽度。
    • 输出通道数 (Co): 卷积层生成的特征图通道数,也代表了滤波器/特征的数量。

2.3 池化层 (Pooling Layer)

2.3.1 作用与类型

  • 作用: 池化层的主要功能是主动减小特征图的尺寸,从而:
    • 减少参数的数量和计算量: 降低网络的复杂度。
    • 控制过拟合 (Overfitting): 通过减少特征维度,使模型对输入的变化更具鲁棒性。
    • 提取主要特征: 保留最重要的信息。
  • 特点: 池化层不引入额外的参数,因为它执行的是固定的统计操作 (如取最大值、平均值)。
  • 主要类型:
    • 最大池化 (Max Pooling): 从池化区域中选择最大的元素作为输出。
    • 平均池化 (Average Pooling): 计算池化区域中所有元素的平均值作为输出。
    • L2 池化 (L2 Pooling): 计算池化区域中元素平方和的平方根作为输出。

2.3.2 Max Pooling 特点

  • 过程描述 (原始资料第20页图示的文字描述):
    • 假设有一个 6×66 \times 6 的输入特征图。
    • 使用一个 2×22 \times 2 的滤波器 (这里称为池化窗口)。
    • 设置 Padding p=0p=0,步长 s=2s=2
    • Max Pooling 在每个 2×22 \times 2 的窗口内,选择最大的数值作为输出。
    • 例如,在输入特征图的左上角 2×22 \times 2 区域 [2, 3; 7, 4] 中,最大值是 7,所以输出为 7。
    • 输出特征图尺寸将变为 3×33 \times 3
  • 优势: Max Pooling 能够保留特征的最大值,这意味着它主要关注每个区域中响应最强的特征。这有助于提高提取特征的鲁棒性,使其对特征在输入中的微小位置变化不那么敏感 (即平移不变性)。
  • 【若需查看原始图片详情,请参考原文中的“Max Pooling 示例图”】

2.4 全连接层 (Fully Connected Layer)

2.4.1 作用

  • 在卷积神经网络中,卷积层和池化层主要充当特征提取器,它们从原始输入中学习并提取出抽象的、高层次的特征表示。
  • 全连接层 (FC) 则作为网络的分类器。它将前一层 (通常是最后一个池化层或卷积层) 提取到的高维特征图展平 (flatten) 成一维特征向量
  • 这个一维特征向量包含了图像中所有重要的特征信息,然后被全连接层进一步处理,最终映射到各个类别的概率

2.4.2 Softmax 激活函数

  • 位置: Softmax 函数通常作为网络的最后一层,尤其是在执行多类别分类任务时。
  • 作用: 它将全连接层输出的原始分数 (logits) 转换成一个概率分布。这个概率分布的所有元素都在 0 到 1 之间,并且它们的和为 1。
  • 特点:
    • 归一化: 将任意实数值归一化为概率值。
    • 凸显最大值: Softmax 函数的指数特性会凸显其中最大的值,同时抑制远低于最大值的其他分量。这意味着,模型对某个类别的置信度越高,该类别的输出概率就越接近 1,而其他类别的概率则趋近于 0。
  • 公式: 对于输入向量 z=[z1,z2,,zn]z = [z_1, z_2, \dots, z_n],Softmax 函数的输出 f(z)jf(z)_j (即第 jj 个类别的概率) 为: f(z)j=ezji=0nezif(z)_j = \frac{e^{z_j}}{\sum_{i=0}^{n} e^{z_i}} 其中 nn 是类别的总数。

2.5 卷积神经网络总体结构

2.5.1 层排列规律

  • 典型的卷积神经网络由以下几种层构成:
    • 卷积层 (Conv Layer): 负责特征提取。
    • 激活函数 (ReLU): 通常紧跟在卷积层之后,引入非线性。
    • 池化层 (Pool Layer): 负责下采样和特征聚合。
    • 全连接层 (FC Layer): 负责分类。
    • Softmax 层: 通常是网络的最后一层,输出分类概率。
  • 常见排列方式 (原始资料第22页图示的文字描述):
    • 一个常见的模式是重复组合 Conv + ReLU,然后接一个 Pool 层。
    • 在特征提取部分完成后,通常会接一个或多个 FC + ReLU 层。
    • 最后是一个 FC 层,然后是 Softmax 层,输出最终的分类结果。
    • 示例: 如果设置重复次数 N=3, M=1, P=2 (N次 Conv+ReLU,M次Pool,P次FC+ReLU),那么网络结构可能为: Input → (Conv + ReLU) x3 → Pool → (FC + ReLU) x2 → FC → Softmax (Output)
  • 【若需查看原始图片详情,请参考原文中的“卷积神经网络层排列规律示意图”】

2.5.2 经典网络示例 (VGG16)

  • VGG16 结构概览 (原始资料第23页图示的文字描述):
    • VGG16 是一个经典的深度卷积神经网络,以其简洁和深度而闻名。
    • 输入: 224x224 像素的 RGB 图像。
    • 特征提取部分 (由多个卷积层和池化层组成):
      • Conv1 (2层): 两个 3×33 \times 3 卷积层,输出 64 个通道。
      • Maxpool1: 最大池化层,尺寸减半 (112x112)。
      • Conv2 (2层): 两个 3×33 \times 3 卷积层,输出 128 个通道。
      • Maxpool2: 最大池化层,尺寸减半 (56x56)。
      • Conv3 (3层): 三个 3×33 \times 3 卷积层,输出 256 个通道。
      • Maxpool3: 最大池化层,尺寸减半 (28x28)。
      • Conv4 (3层): 三个 3×33 \times 3 卷积层,输出 512 个通道。
      • Maxpool4: 最大池化层,尺寸减半 (14x14)。
      • Conv5 (3层): 三个 3×33 \times 3 卷积层,输出 512 个通道。
      • Maxpool5: 最大池化层,尺寸减半 (7x7)。
    • 分类部分 (由全连接层组成):
      • FC1: 4096 个神经元的全连接层。
      • FC2: 4096 个神经元的全连接层。
      • FC3: 1000 个神经元的全连接层 (对应 ImageNet 的 1000 个类别)。
      • Softmax: 最后一层,输出 1000 个类别的概率。
  • VGG 的设计哲学: VGG 网络大量使用了小尺寸 (3×33 \times 3) 的卷积核,通过堆叠多个这样的卷积层来增加网络的深度,从而学习到更复杂的特征,同时保持较小的感受野。
  • 【若需查看原始图片详情,请参考原文中的“VGG16网络结构图”】

2.5.3 神经网络可视化 (浅层与深层特征)

  • 概念: 神经网络可视化技术可以帮助我们理解网络内部各层学习到的特征。
  • 观察结果:
    • 浅层 (例如 VGG16 的 Conv1): 倾向于学习到局部、通用、低级的特征,例如边缘 (水平、垂直、对角线)、颜色斑块、纹理等。这些特征在不同的图像中是通用的。
    • 深层 (例如 VGG16 的 Conv5 或更深层): 学习到的是整体、抽象、高级的特征,这些特征更接近于人类可以理解的语义概念。例如,它们可能检测到眼睛、鼻子、车轮、建筑物的特定部分等。这些特征通常是任务特定的,并且与最终的分类目标密切相关。
  • 意义: 这种由浅入深的特征学习过程是卷积神经网络强大的原因之一。
  • 【若需查看原始图片详情,请参考原文中的“神经网络可视化示意图”】

2.6 应用于图像分类的卷积神经网络

  • 图像分类是深度学习最早取得突破性进展的应用之一,以下是一些经典的卷积神经网络模型,它们在图像分类任务上表现出色,并推动了该领域的发展:
    • AlexNet: 开创性的工作,证明了深度CNN在大型数据集上的有效性。
    • VGG: 以其深而统一的结构 (大量堆叠 3×33 \times 3 卷积核) 闻名,提供了深入理解网络深度的基础。
    • Inception 系列 (如 GoogLeNet): 引入了 Inception 模块,通过多尺度卷积核并行处理,有效地捕捉不同尺度的特征,同时控制了参数量。
    • ResNet (Residual Network): 引入了残差连接 (residual connection),解决了深度网络训练中的梯度消失和退化问题,使得网络可以训练得非常深。

2.7 应用于目标检测的卷积神经网络

目标检测是计算机视觉的核心任务之一,它不仅要识别图像中的物体类别,还要准确地标定出它们的位置。

2.7.1 任务对比 (分类 vs. 定位+分类)

特征图像分类 (Image Classification)目标检测 (Object Detection)
输入单一大型物体图像 (single and big object)包含多个小型物体的图像 (multi and small object)
任务理解图像内容 (识别图像的整体类别)理解图像内容 + 定位图像中的物体 (识别物体类别并给出边界框)
输出类别标签 (label)类别标签 & 边界框 (label & bounding box)
评价指标准确率 (precision, top-1/top-5 accuracy)IoU (交并比), mAP (Mean Average Precision)
核心问题图像中有什么?图像中有什么?在哪里?有多少个?

2.7.2 评测指标

2.7.2.1 IoU (交并比)
  • 定义: IoU (Intersection over Union) 是用于衡量定位准确度的指标。它计算预测边界框 (predicted bounding box)真实边界框 (ground truth bounding box) 之间交集面积并集面积的比值。
  • 计算公式: IoU=Area of OverlapArea of UnionIoU = \frac{\text{Area of Overlap}}{\text{Area of Union}}
  • 判断标准: 通常,当 IoU 大于或等于 0.5 时,我们认为预测的边界框是成功的定位 (true detection)。不同的数据集和任务可能会有不同的 IoU 阈值要求,例如 COCO 数据集通常使用 0.5 到 0.95 之间多个 IoU 阈值的平均值来评估。
  • 图示说明 (原始资料第27页图示的文字描述): IoU 的计算涉及到两个矩形框,一个表示模型的预测,另一个表示真实的标注。交集是两个框重叠的部分,并集是两个框覆盖的总面积。
  • 【若需查看原始图片详情,请参考原文中的“IoU示意图”】
2.7.2.2 mAP (Mean Average Precision 平均精度均值)
  • 定义: mAP 是计算机视觉领域用于衡量模型在测试集上检测精度优劣程度的关键指标。它综合考虑了检测结果的召回率 (recall)精度 (precision)
  • 特点: mAP 值越高表示检测结果越好,因为它反映了模型在不同置信度阈值下的综合性能。
2.7.2.2.1 召回率与精度
  • 召回率 / 查全率 (Recall):
    • 定义: 在所有真实的正样本中,模型成功检测到的正样本的比例。
    • 公式: Recall=TPTP+FNRecall = \frac{TP}{TP + FN}
      • TP (True Positives): 被模型正确识别为正样本的真实正样本。
      • FN (False Negatives): 未被模型识别为正样本的真实正样本 (漏检)。
    • 直观理解: 模型“找出了多少个”它应该找出来的东西。
  • 精度 / 查准率 (Precision):
    • 定义: 在所有模型预测为正样本的样本中,真实为正样本的比例。
    • 公式: Precision=TPTP+FPPrecision = \frac{TP}{TP + FP}
      • FP (False Positives): 被模型错误识别为正样本的真实负样本 (误报)。
    • 直观理解: 模型“找出来的东西有多少是正确的”。
  • 召回率与精度的权衡: 召回率和精度之间通常存在此消彼长的关系。
    • 提高召回率: 通过降低置信度阈值,模型会检测出更多的样本,包括更多的真实正样本,从而提高召回率。但这通常也会导致更多的误报,从而降低精度。
    • 提高精度: 通过提高置信度阈值,模型只会保留最确信的预测结果,减少误报,从而提高精度。但这可能导致漏检一些真实正样本,从而降低召回率。
2.7.2.2.2 mAP 计算原理与示例
  • 计算步骤:
    1. 对每个类别 (class) 分别计算平均精度 (Average Precision, AP)
    2. 将所有类别的 AP 值求平均,得到 mAP。
  • AP 计算原理 (VOC2012 标准,原始资料第30页和第31页图示的文字描述):
    • 准备数据: 假设对某个类别 A 进行检测。我们有 100 张测试图像,其中共有 25 个真实标注为 A 的物体。模型检测出了 20 个分类为 A 的候选框,每个候选框都有一个置信度分数 (confidence score) 和一个标记 (label,表示该预测是否正确,通常通过 IoU 阈值判断)。
    • 排序: 首先,将所有预测框按照置信度分数从高到低排序
    • 计算 Precision 和 Recall 曲线: 逐个遍历排序后的预测框。每增加一个预测框,就重新计算当前的 TP、FP、FN,并更新 Precision 和 Recall 值。
      • 例如,在原始资料的示例中:
        • 当置信度阈值设置为 0.5 时,有 4 个预测框被认为是正样本 (score > 0.5)。其中 3 个是 True Positive (TP),1 个是 False Positive (FP)。那么此时 Precision = 3/4,Recall = 3/25 (总共有 25 个真实正样本)。
        • 当置信度阈值设置为 0.2 时,有 12 个预测框被认为是正样本 (score > 0.2)。其中 5 个是 TP。那么此时 Precision = 5/12,Recall = 5/25。
    • PR 曲线: 绘制 Precision-Recall 曲线,横轴为 Recall,纵轴为 Precision。
    • AP 计算 (VOC2012): 对于 PR 曲线上的每个 Recall 值 (从 0 到 1),取其对应的最大 Precision 值 (即在该 Recall 值及更高的 Recall 值中,Precision 的最大值),然后对这些最大 Precision 值进行插值求平均。
      • 更直观的看法: AP 相当于 PR 曲线下面的面积。这个面积越大,表示模型在该类别上的检测性能越好。
  • 【若需查看原始图片详情,请参考原文中的“mAP计算示例表格和PR曲线图”】

2.7.3 基于CNN的目标检测算法分类

目前,基于深度学习的目标检测算法大致可以分为两大类:

2.7.3.1 两阶段 (Two-stage) 算法
  • 核心思想: 这类算法首先生成候选区域 (Region Proposals),然后再对这些候选区域进行分类和边界框回归。
  • 过程:
    1. 阶段一: 通过一个独立的子网络 (例如 RPN, Region Proposal Network) 快速地在图像中生成一系列可能包含物体的候选框。
    2. 阶段二: 对这些候选框进行特征提取 (通常通过 RoI Pooling/Align 等操作),然后送入分类器判断物体类别,并进一步进行边界框的精细调整 (回归)。
  • 代表算法: R-CNN 系列 (R-CNN, SPP-Net, Fast R-CNN, Faster R-CNN, Mask R-CNN, Cascade R-CNN 等)。
  • 特点: 通常具有较高的检测精度,但速度相对较慢。
2.7.3.2 一阶段 (One-stage) 算法
  • 核心思想: 这类算法直接在输入图像上同时预测物体的类别和边界框,无需生成单独的候选区域步骤。
  • 过程: 通过单个神经网络直接从输入图像中预测所有物体的边界框和对应的类别概率。
  • 代表算法: YOLO (You Only Look Once) 系列 (YOLO, YOLOv2, YOLOv3, YOLOv4, YOLOv5, YOLOv6, YOLOv7, YOLOv8, YOLOX, YOLOR), SSD (Single Shot MultiBox Detector) 系列 (SSD, DSSD, DSOD, FSSD), RetinaNet, EfficientDet 等。
  • 特点: 通常具有更快的检测速度,但精度可能略低于两阶段算法 (近年来差距正在缩小)。
2.7.3.3 发展图谱
  • 详细分类 (原始资料第34页图示的文字描述):
    • Two-stage (两阶段):
      • R-CNN 家族: R-CNN, SPP-Net, Fast R-CNN, Faster R-CNN (更好的特征网络如 HyperNet, MS-CNN, PVANet, Light-Head R-CNN; 更精确的 RPN 如 MR-CNN, FPN, CRAFT; 更完善的 ROI 分类如 R-FCN, CoupleNet, Mask R-CNN, Cascade R-CNN)。
      • 目标后处理: OHEM (Online Hard Example Mining), Soft-NMS。
      • 其他: A-Fast-RCNN。
    • One-stage (一阶段):
      • YOLO 家族: YOLO, YOLOv2, YOLOv3, YOLOv4, YOLOv5, YOLOv6, YOLOv7, YOLOv8, YOLOX, YOLOR。
      • SSD 家族: SSD, R-SSD, DSSD, DSOD, FSSD。
      • 其他: OverFeat, RetinaNet, EfficientDet。
  • 【若需查看原始图片详情,请参考原文中的“目标检测算法发展图谱”】

2.8 应用于图像生成的卷积神经网络

2.8.1 生成模型与判别模型

在深度学习中,模型可以大致分为两类:

  • 判别模型 (Discriminative Model):
    • 任务: 主要用于图像识别、分类、分割等任务。
    • 学习目标: 学习输入数据 x 到输出标签 y 的映射关系 P(yx)P(y|x),即判别输入数据属于哪个类别
    • 示例: 输入一张猫的图片,判别模型会输出“猫”这个标签,或者猫的概率为 0.9,狗的概率为 0.1。它只回答“是猫还是不是猫”,不关心猫本身是如何生成的。
    • 直观理解: “Cat √ / Dog ×” (是猫,不是狗)。
  • 生成模型 (Generative Model):
    • 任务: 主要用于图像生成、数据合成、数据分布学习等任务。
    • 学习目标: 学习数据本身的模式或特征,甚至是整个数据分布 P(x)P(x) 或联合分布 P(x,y)P(x,y)。一旦学习到数据的分布,就可以从这个分布中生成新的样本
    • 示例: 通过学习大量猫的图片,生成模型可以生成一张全新的、逼真的猫的图片。
    • 直观理解: 一类图像本质上是一组概率分布。生成模型的目标是找到一个模型分布 PθP_\theta 来近似真实数据分布 PdataP_{data}。一旦找到 PθP_\theta,就可以从中采样生成新数据。
  • 【若需查看原始图片详情,请参考原文中的“生成模型学习数据分布示意图”】

2.8.2 生成对抗网络 (GAN)

2.8.2.1 概述与核心思想
  • 提出者: Ian Goodfellow2014 年 提出了生成式对抗网络 (Generative Adversarial Networks, GAN)。
  • 重要性: 被 Yann LeCun (深度学习三巨头之一) 誉为“20年来机器学习领域最酷的想法”。
  • 解决问题: 从训练样本中学习出新的、逼真的样本。为无监督学习和预测学习提供了强大的算法框架。
  • 核心思想: 借鉴了博弈论的思想,通过让两个神经网络 (生成器和判别器) 相互对抗学习,从而达到共同进步的目的。这与苏格拉底的反诘法有异曲同工之妙。
2.8.2.2 模型组成 (生成器与判别器)

GAN 由两个核心部分组成,它们相互竞争:

  • 生成器 G (Generator) - “伪装者/造假者”:
    • 输入: 随机噪声 z (通常是高斯噪声)。
    • 任务: 找出观测数据内部的统计规律,并尝试生成能够以假乱真的样本 (G(z))
    • 目标: 尽可能愚弄判别器,使判别网络输出接近 0.5 (即判别器难以区分真假样本)。
  • 判别器 D (Discriminator) - “警察/鉴别者”:
    • 输入: 真实样本 x 或生成器生成的假样本 G(z)
    • 任务: 判断输入数据是来自真实样本集 (real data) 还是生成样本集 (fake data)
    • 目标:
      • 如果输入是真样本 x,输出接近 1 (表示“真”)。
      • 如果输入是生成样本 G(z),输出接近 0 (表示“假”)。
  • 关系: 生成器和判别器构成一个动态的零和博弈:生成器努力生成更好的假样本,判别器努力区分真假,两者在对抗中不断提升性能,直到生成器能够生成与真实数据难以区分的样本,此时判别器将无法做出准确判断(输出 0.5)。
  • 【若需查看原始图片详情,请参考原文中的“生成对抗网络结构示意图”】
2.8.2.3 训练过程

GAN 的训练是一个交替迭代的优化过程:

  1. 训练判别器 D:
    • 目标: 使判别器能够准确地区分真实样本和生成样本。
    • 输入: 一批真实样本 x (标签为 1) 和一批生成样本 G(z) (标签为 0)。
    • 优化: 更新判别网络的权重参数,使其在输入真实样本时输出接近 1,在输入生成样本时输出接近 0。
  2. 训练生成器 G:
    • 目标: 使生成器能够生成足以欺骗判别器的假样本。
    • 输入: 随机噪声 z,通过生成器生成假样本 G(z)
    • 优化: 更新生成网络的权重参数,使其生成的假样本 G(z) 被判别器判断为接近 1 (即判别器认为它是真的)。这意味着生成器要最小化 1D(G(z))1 - D(G(z))
  • 交替迭代: 这两个步骤交替进行,形成一个极小极大博弈 (Minimax Game)零和博弈。理想情况下,最终达到纳什均衡,此时生成器能生成完美的假样本,判别器对任何输入都输出 0.5。
  • 图示说明 (原始资料第39页图示的文字描述): 展示了判别网络和生成网络在训练过程中参数更新的方向和目标。
  • 【若需查看原始图片详情,请参考原文中的“GAN训练过程示意图”】
2.8.2.4 条件GAN (Conditional GAN, cGAN)
  • 问题: 原始 GAN 的生成器输入是纯随机噪声,这意味着它生成的样本模式是不可控的。我们无法指定生成器生成特定类别或具有特定属性的图像。
  • 解决方案: 条件 GAN (cGAN) 通过在生成器和判别器的输入中增加额外的条件信息 (category condition) 来解决这个问题。
  • 实现:
    • 生成器: 输入随机噪声 z 和条件信息 c (例如,一个类别的 one-hot 编码向量)。生成器学习生成符合条件 c 的样本 G(z, c)。
    • 判别器: 输入样本 (真实样本或生成样本) 和条件信息 c。判别器学习判断输入的样本和条件信息是否匹配 (例如,判断输入图像是否真的是一只狗,并且与条件“狗”相符)。
  • 效果: cGAN 能够实现对生成过程的控制,例如生成指定数字的图像、生成具有特定属性的人脸等。
  • 【若需查看原始图片详情,请参考原文中的“条件GAN输入输出示例图”】
2.8.2.5 常见GAN结构与应用
  • GAN 结构演变:
    • DCGAN (Deep Convolutional GAN): 将 GAN 中的全连接神经网络扩展到卷积神经网络,使得 GAN 能够处理图像数据。
    • ResGAN: 结合残差网络 (ResNet) 思想的 GAN,常用于图像恢复等任务。
    • SRGAN: 用于超分辨率重建的 GAN,同样利用了 ResNet 结构。
    • CycleGAN: 能够实现图像风格转换,无需成对的训练数据。
    • CGAN (Conditional GAN): 如前所述,引入条件信息实现可控生成。
    • InfoGAN: 学习可解释的、解耦的表示,使得生成的图像在某些维度上可控。
    • 集成推断模型的 GAN (如 BiGAN): 尝试学习数据的逆映射,即从数据推断出潜在编码。
    • 对抗自编码器 (如 VAE-GAN): 结合变分自编码器 (VAE) 和 GAN 的优势。
  • GAN 应用示例:
    • 人脸生成: 生成逼真的人脸图像,例如不存在的人脸。
    • 风格转换: 将一张图片的风格应用到另一张图片上,或将一种图像类型转换为另一种 (如将风景照转换为梵高风格画作)。
    • 超分辨率 (Super Resolution): 将低分辨率图像提升到高分辨率。
    • 图像修复 (Inpainting): 填充图像中缺失的部分。
    • 数据增强: 生成额外的训练数据来扩充数据集。
    • 文本到图像生成: 根据文本描述生成图像 (例如 DALL-E 早期版本)。
  • 资源合集:
    • GAN zoo:https://deephunt.in/the-gan-zoo-79597dc8c347
    • GAN 代码合集:https://github.com/zhangqianhui/AdversarialNetsPapers
    • GAN 应用合集:https://github.com/nashory/gans-awesome-applications

2.8.3 扩散模型 (Diffusion Models)

2.8.3.1 概述与DDPM
  • 兴起: 扩散模型是一种相对较新的生成模型,2020 年提出的 DDPM (Denoising Diffusion Probabilistic Models) 在图像合成方面击败了 GAN,显示出强大的潜力。
  • 核心思想:
    1. 破坏训练数据: 通过连续添加高斯噪声来逐步破坏训练数据,使其最终变为纯噪声。
    2. 学习恢复: 模型学习反转噪声过程,即学习如何从噪声中逐步去除噪声,从而恢复出原始数据。
  • 测试时生成: 在生成新数据时,首先从随机采样的纯高斯噪声开始,然后通过模型学习到的去噪过程逐步将其转化为清晰的数据。
2.8.3.2 标准过程 (正向扩散与逆向扩散)

扩散模型的核心是两个相互对称的过程:

  • 正向扩散过程 (Forward Diffusion Process):
    • 目的: 帮助神经网络训练逆向过程。
    • 机制: 这是一个固定的马尔可夫链过程。从原始数据 x0x_0 开始,在每个时间步 tt,都向当前数据 xt1x_{t-1} 逐步添加少量高斯噪声,生成 xtx_t
    • 结果: 经过足够多的时间步长 T 后,xTx_T完全变成纯高斯噪声,与原始数据几乎无关。
  • 反向逆扩散过程 (Reverse Diffusion Process):
    • 目的: 这是模型需要学习的过程,用于从噪声中生成数据。
    • 机制: 这是一个可训练的马尔可夫链过程。从一张纯高斯噪声图片 xTx_T 开始,通过一个可训练的神经网络 (例如 U-net 或去噪自编码器),在每个时间步预测并去除噪声,逐步生成最终的清晰结果 x0x_0
    • 核心: 神经网络需要学习每个时间步的噪声分布,以便能够准确地“去噪”。
  • 【若需查看原始图片详情,请参考原文中的“扩散模型正向/逆向过程示意图”】
2.8.3.3 扩散过程
  • 描述: 正向扩散过程是将数据从清晰状态逐步过渡到完全噪声状态。
  • 细节: 它采用一个固定的马尔可夫链,这意味着每个时间步 xtx_t 只依赖于前一个时间步 xt1x_{t-1}。在每个时间步,都会向 xt1x_{t-1} 添加少量预定义的高斯噪声。
  • 最终状态: 最终,当时间步 tt 达到 TT 时,xTx_T 将成为一个纯粹的高斯噪声,与原始图像失去了所有可识别的联系。
2.8.3.4 逆扩散过程
  • 描述: 逆扩散过程是从纯噪声开始,逐步恢复原始数据的过程。
  • 细节:
    • 从一张标准高斯噪声图片 xTx_T 开始。
    • 通过一个可训练的网络 (如 U-net 或者去噪自编码器等),该网络被训练来预测并减去每个时间步添加的噪声
    • 这个过程也是一个马尔可夫链,可以被定义为 Pθ(xt1xt)P_\theta(x_{t-1}|x_t),其中 θ\theta 是网络的参数。
    • 通过逐步迭代这个去噪过程,最终可以从 xTx_T 生成出高质量的 x0x_0
2.8.3.5 扩散模型 vs. GANs

扩散模型与生成对抗网络 (GANs) 在生成能力和训练稳定性上存在显著差异:

  • 生成对抗网络 (GAN) 存在的问题:
    • 生成图像缺乏多样性: 判别器可能会引导生成器收敛到数据分布的一个子集,导致生成样本缺乏多样性。
    • 模式崩溃 (Mode Collapse): 这是多样性缺乏的极端表现,生成器可能只生成少数几种模式的样本,而忽略了数据分布中的其他模式。例如,在生成人脸时,可能只生成特定表情或特定肤色的人脸。
    • 对抗性带来的难以训练: GAN 的训练是一个不稳定的对抗过程,需要精心调整超参数,容易出现梯度消失、梯度爆炸或模式崩溃,导致训练难以收敛。
  • 扩散模型的优势:
    • 训练更容易: 扩散模型的训练过程没有对抗,其优化目标通常更稳定,更容易收敛。
    • 不会受到模式崩溃的影响: 由于扩散模型通过学习整个噪声分布来逐步去噪,它能够更好地覆盖整个数据分布,从而避免了模式崩溃的问题,生成样本的多样性更高。
    • 能够产生多样化图像: 相较于 GAN,扩散模型在生成图像的多样性和质量方面往往表现更出色。

3. 适合语音/文本处理的循环神经网络

3.1 循环神经网络概述

3.1.1 任务特点与能力要求

传统的神经网络(如前馈神经网络)在处理序列数据时存在局限性,因为它们假设输入是相互独立的。然而,在语音、文本等序列数据中,数据点之间往往存在时序上的相关性,即前一个数据点会影响后一个数据点。

因此,处理这类任务的网络必须具备以下能力:

  • 捕捉时序依赖:能够理解和利用序列中不同时间步之间的关联性。
  • 记忆信息:网络需要有“存储”信息的能力,以便在处理当前输入时能够回顾和利用之前时间步的信息。

3.1.2 主要应用场景

循环神经网络 (RNN) 因其处理序列数据的能力,在多种领域得到了广泛应用:

  • 机器翻译:将一种语言的句子序列翻译成另一种语言的句子序列。
  • 图片描述 (Image Captioning):根据输入的图片生成描述性文本序列。
  • 视频标注 (Video Annotation):对视频中的连续帧进行分析并生成对应的文本描述或标签序列。
  • 视觉问答 (Visual Question Answering):结合图像内容和自然语言问题,生成自然语言答案。
  • 文本生成:如聊天机器人、代码生成等。
  • 情感分析 (Sentiment Analysis):分析文本序列(如评论)以判断其情感倾向。
  • 语音识别:将语音信号序列转换为文本序列。

进一步了解RNN及其应用,可参考GitHub项目:Awesome Recurrent Neural Networks

3.2 循环神经网络结构

3.2.1 核心原理

循环神经网络通过引入带自反馈的神经元来处理任意长度的序列数据。其核心思想是,隐藏状态 h(t) 不仅与当前时刻的输入 x(t) 相关,还与上一时刻的隐藏状态 h(t-1) 相关。这种循环连接使得网络能够将信息从序列的前面部分传递到后面部分,从而实现对序列数据的记忆。

  • 时序 (Sequence):RNN能够建模序列数据,即前、后输入数据 x(t)x(t+1) 之间不是相互独立的,而是相互影响的。
  • 循环 (Recurrent):对每个输入时间步执行的操作是相同的,循环往复地重复这些操作。这意味着在不同时间步,网络会共享相同的参数 WU
  • 记忆 (Memory):隐藏层 h(t) 捕捉了所有时刻 t 之前的信息。理论上,h(t) 记忆的内容可以无限长,但实际上受限于梯度问题,其记忆能力是有限的。

数学表达式为:

h(t)=f(Wh(t1)+Ux(t)+b)h^{(t)} = f(W h^{(t-1)} + U x^{(t)} + b)

其中,ff 是非线性激活函数,常用 tanhReLU

[原始文档中的“unfold”示意图]: 原始的RNN结构(左侧)在时间维度上可以展开(右侧),形成一个多层前馈网络,每一层代表序列中的一个时间步。 【若需查看原始图片详情,请参考原文中的“循环神经网络结构”示意图】

3.2.2 多种输入-输出结构

RNN可以根据任务需求,设计不同的输入-输出结构:

  1. 一对多 (One-to-many)
    • 输入:一个单一的输入(如图片)。
    • 输出:一个序列(如图片描述)。
    • 示例:Image Captioning (图片描述)。
  2. 多对一 (Many-to-one)
    • 输入:一个序列(如电影评论)。
    • 输出:一个单一的输出(如情感分类)。
    • 示例:Sentiment Analysis (情感分析)。
  3. 多对多 (Many-to-many, 序列长度不同)
    • 输入:一个序列(如源语言句子)。
    • 输出:一个不同长度的序列(如目标语言句子)。
    • 示例:Machine Translation (机器翻译)。
  4. 多对多 (Many-to-many, 同步)
    • 输入:一个序列(如视频帧)。
    • 输出:一个相同长度的序列,每个输出对应一个输入。
    • 示例:Video Classification (视频分类,标注每一帧)。
  5. 多对多 (Many-to-many, 延迟)
    • 输入:一个序列。
    • 输出:一个序列,但输出相对于输入有延迟(如视频标注,先看完部分视频再开始输出)。
    • 示例:Video Caption (视频字幕)。

值得注意的是,RNN对输入序列的长度没有预先定义的要求,可以处理任意长度的序列。

3.2.3 正向计算过程

RNN的正向计算是从序列的第一个时间步到最后一个时间步依次进行的。

  • 初始时刻
    • 通常将初始隐藏状态 h(0)h^{(0)} 设为一个全零向量。
  • 一般时刻 tt
    • 计算隐藏状态h(t)=f(Wh(t1)+Ux(t)+b)h^{(t)} = f(W h^{(t-1)} + U x^{(t)} + b) 其中,ff 是激活函数 (如 tanhReLU)。
    • 计算输出o(t)=Vh(t)+co^{(t)} = V h^{(t)} + c
    • 计算预测值y^(t)=softmax(o(t))\hat{y}^{(t)} = \text{softmax}(o^{(t)}) (对于分类任务,softmax 函数将输出归一化为概率分布)。

在整个时间序列上,参数 WW (连接 h(t1)h^{(t-1)}h(t)h^{(t)})、UU (连接 x(t)x^{(t)}h(t)h^{(t)})、VV (连接 h(t)h^{(t)}o(t)o^{(t)}) 和偏置 bb, cc 都是共享的。这意味着网络在处理序列的不同部分时使用相同的“转换规则”。

[原始文档中的“RNN cell”示意图]: 该图展示了RNN在单个时间步内的计算流程。输入 xtx_t 和前一时刻隐藏状态 ht1h_{t-1} 分别通过权重 UUWW 进行线性变换,然后与偏置 bb 相加,经过激活函数 ff 得到当前时刻隐藏状态 hth_thth_t 接着通过权重 VV 和偏置 cc 生成输出 oto_t,最终通过 softmax 得到预测输出 y^t\hat{y}_t【若需查看原始图片详情,请参考原文中的“RNN cell”示意图】

3.2.4 反向传播 (BPTT - Back-Propagation Through Time)

RNN的训练通常采用BPTT算法,它是标准反向传播算法在时间维度上的扩展。由于RNN在时间维度上展开成一个深层网络,BPTT就是在这个展开的网络上执行反向传播。

  • 单个时刻 tt 的损失函数L(t)=jyj(t)lny^j(t)L^{(t)} = -\sum_{j} y_j^{(t)} \ln \hat{y}_j^{(t)} (这里以交叉熵损失为例,yj(t)y_j^{(t)} 是真实标签的one-hot编码)。
  • 整个序列的总损失函数L=t=1τL(t)=t=1τjyj(t)lny^j(t)L = \sum_{t=1}^{\tau} L^{(t)} = -\sum_{t=1}^{\tau} \sum_{j} y_j^{(t)} \ln \hat{y}_j^{(t)} 其中 τ\tau 是序列的长度。

BPTT的关键在于计算损失函数 LL 对网络参数 (如 WW, UU, VV) 的梯度。例如,对参数 WW 的偏导数需要考虑 WW 对所有时刻的损失 L(t)L^{(t)} 的影响,并且每个时刻 tt 的隐藏状态 h(t)h^{(t)} 都依赖于前一时刻的隐藏状态 h(t1)h^{(t-1)},这种依赖关系会沿着时间反向传播。

计算 WW 的梯度时,需要将所有时间步的梯度贡献进行累加:

LW=t=1τL(t)W\frac{\partial L}{\partial W} = \sum_{t=1}^{\tau} \frac{\partial L^{(t)}}{\partial W}

其中,L(t)W\frac{\partial L^{(t)}}{\partial W} 需要通过链式法则沿着时间步反向展开,这导致了导数的递归展开

L(t)W=k=1tL(t)y^(t)y^(t)h(t)h(t)h(k)h(k)W\frac{\partial L^{(t)}}{\partial W} = \sum_{k=1}^{t} \frac{\partial L^{(t)}}{\partial \hat{y}^{(t)}} \frac{\partial \hat{y}^{(t)}}{\partial h^{(t)}} \frac{\partial h^{(t)}}{\partial h^{(k)}} \frac{\partial h^{(k)}}{\partial W}

由于 h(t)h^{(t)} 依赖于 h(t1)h^{(t-1)},这个链式法则中会包含多个 h(j)h(j1)\frac{\partial h^{(j)}}{\partial h^{(j-1)}} 因子。

[原始文档中的“BPTT”示意图]: 此图展示了BPTT的原理。损失 L(t)L^{(t)} 不仅受当前时刻的 y^(t)\hat{y}^{(t)} 影响,也间接地受 h(t)h^{(t)} 乃至更早的 h(t1),h(t2)h^{(t-1)}, h^{(t-2)} 的影响。因此,在计算梯度时,误差会沿着时间步反向传播,从 L(τ)L^{(\tau)} 传导到 L(1)L^{(1)},并且每个时刻的梯度都会累加到共享参数上。 【若需查看原始图片详情,请参考原文中的“反向传播BPTT”示意图】

3.2.5 梯度消失与梯度爆炸问题

3.2.5.1 问题描述与影响

由于RNN的递归结构和BPTT算法,导致在训练过程中梯度消失梯度爆炸现象比普通深度前馈网络更为明显。

  • 梯度消失 (Vanishing Gradient)
    • 在BPTT计算梯度时,由于链式法则中包含多个雅可比矩阵的乘积 (如 h(j)h(j1)\frac{\partial h^{(j)}}{\partial h^{(j-1)}}),如果这些矩阵的范数很小(例如,激活函数(如 sigmoidtanh)的导数在饱和区接近于零),梯度就会随着时间步的增加呈指数级衰减,导致远离输出层的早期时间步的梯度变得非常小,几乎为零。
    • 影响:网络难以学习长期依赖关系。例如,在一个语言模型中,预测“I grew up in Italy… I speak fluent Italian.”中的“Italian.”时,需要记住很久之前的“Italy”。如果梯度消失,网络就无法将“Italy”的信息有效地传导到后面,从而无法正确预测“Italian.”。这使得RNN在处理长序列时效果不佳。
  • 梯度爆炸 (Exploding Gradient)
    • 与梯度消失相反,如果雅可比矩阵的范数很大,梯度就会随着时间步的增加呈指数级增长,导致梯度变得非常大。
    • 影响:这会导致模型参数在训练过程中更新过大,使得网络训练不稳定,甚至出现NaN值,模型无法收敛。
3.2.5.2 改进方法
  • 解决梯度爆炸问题
    • 梯度截断 (Gradient Clipping):这是一种相对简单且有效的技术,当梯度向量的范数超过某个预设阈值时,将其按比例缩放,使其范数回到阈值以内。这可以有效防止梯度过大,稳定训练过程。
  • 解决梯度消失问题
    • 模型结构上的改进:这是更根本的解决方案,通过设计特殊的循环单元结构来缓解梯度消失问题,如长短期记忆网络 (LSTM)门控循环单元 (GRU) 算法。这些结构通过引入“门”机制来更好地控制信息的流动,从而能够有效地学习和记忆长期依赖关系。

3.3 长短期记忆模型 (LSTM)

3.3.1 核心思想与组件

为了解决传统RNN的长期依赖问题(即梯度消失),长短期记忆网络 (Long Short-Term Memory networks, LSTM) 在1997年由 Hochreiter 和 Schmidhuber 提出。

LSTM的核心在于其特殊的循环单元结构,它引入了单元状态 (Cell State)门限 (Gate) 机制,使得信息可以在单元状态中长期保存,并且可以通过门来精确控制信息的流动、添加或移除。

  • 隐藏状态 (Hidden State):与传统RNN类似,但它更多地作为当前时间步的输出,并捕获短期信息。
  • 单元状态 (Cell State):这是LSTM的关键创新。它像一条信息传送带,贯穿整个链条,能够非常容易地让信息以不变的方式向下流动。它在长时间序列中保持相关信息的能力非常强大。
  • 门限机制 (Gate Mechanism):LSTM通过三个主要的“门”来管理信息,每个门都是一个sigmoid激活函数层和一个点乘操作的组合,输出一个0到1之间的数值,表示允许多少信息通过:
    • 遗忘门 (Forget Gate):决定从单元状态中“遗忘”哪些信息。
    • 输入门 (Input Gate):决定有多少新的信息应该被添加到单元状态中。
    • 输出门 (Output Gate):决定当前单元状态的哪些部分应该被“输出”到隐藏状态。

3.3.2 结构图与门限机制

[原始文档中的“LSTM”示意图]: 该图展示了一个LSTM单元在两个连续时间步 (ttt+1t+1) 的内部结构。

一个LSTM单元主要由以下几个部分组成:

  1. 遗忘门 (ftf_t)

    • 接收前一时刻的隐藏状态 ht1h_{t-1} 和当前时刻的输入 xtx_t
    • 通过一个 sigmoid 函数输出一个介于0到1之间的向量,这个向量会与前一时刻的单元状态 ct1c_{t-1} 进行逐元素相乘。值越接近0,表示遗忘越多;值越接近1,表示保留越多。
    • 其计算公式为:ft=σ(Wf[ht1,xt]+bf)f_t = \sigma(W_f \cdot [h_{t-1}, x_t] + b_f)
  2. 输入门 (iti_t) 和候选单元状态 (C~t\tilde{C}_t)

    • 输入门 (iti_t):同样接收 ht1h_{t-1}xtx_t,通过一个 sigmoid 函数决定哪些新的信息需要更新到单元状态中。
    • 候选单元状态 (C~t\tilde{C}_t):接收 ht1h_{t-1}xtx_t,通过一个 tanh 函数创建一个新的候选值向量,这些值可能会被添加到单元状态中。
    • 其计算公式为: it=σ(Wi[ht1,xt]+bi)i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i) C~t=tanh(WC[ht1,xt]+bC)\tilde{C}_t = \text{tanh}(W_C \cdot [h_{t-1}, x_t] + b_C)
  3. 更新单元状态 (CtC_t)

    • 新的单元状态 CtC_t 是由旧的单元状态 Ct1C_{t-1} 经过遗忘门处理后,与输入门和候选单元状态的乘积相加而得到的。
    • 其计算公式为:Ct=ftCt1+itC~tC_t = f_t * C_{t-1} + i_t * \tilde{C}_t
    • 这个步骤是LSTM能够长期记忆信息的核心,它允许信息在时间步之间进行选择性地传递和更新。
  4. 输出门 (oto_t) 和隐藏状态 (hth_t)

    • 输出门 (oto_t):接收 ht1h_{t-1}xtx_t,通过一个 sigmoid 函数决定单元状态的哪些部分将作为当前隐藏状态输出。
    • 隐藏状态 (hth_t):通过将单元状态 CtC_t 经过 tanh 函数激活,再与输出门 oto_t 进行逐元素相乘而得到。
    • 其计算公式为: ot=σ(Wo[ht1,xt]+bo)o_t = \sigma(W_o \cdot [h_{t-1}, x_t] + b_o) ht=ottanh(Ct)h_t = o_t * \text{tanh}(C_t)

图中的 WfW_f, WiW_i, WoW_o, WcW_c 代表了连接不同输入(ht1h_{t-1}, xtx_t)到各个门的权重矩阵,它们是LSTM模型的可训练参数。

【若需查看原始图片详情,请参考原文中的“长短期记忆模型”示意图】

4. 从深度学习到大模型

4.1 注意力机制 (Attention Mechanism)

4.1.1 序列模型的问题与局限性

在早期的序列模型,特别是基于循环神经网络 (RNN) 的 Seq2Seq 模型中,存在以下主要问题:

  • 固定长度的语义编码难以存储所有信息:编码器将输入序列编码成一个固定长度的语义向量(上下文向量)。当输入序列较长时,这个固定长度的向量很难捕获所有重要的信息,导致信息丢失,严重影响模型的性能。
  • 语义编码中每个元素权重相同:传统的上下文向量对输入序列中的每个词或元素赋予相同的权重,模型无法区分不同部分的重要性,无法有选择性地关注与当前输出最相关的信息。

4.1.2 注意力机制的本质与优势

为了解决上述问题,注意力机制被引入。

  • 本质:注意力机制的本质是分离特征的(重要性)和(内容)。它允许模型在处理序列数据时,动态地为输入序列的不同部分分配不同的权重,从而有选择性地关注最相关的信息。
  • 工作方式:与串行整合特征不同,注意力机制通过权重加和特征来工作。它不强制将所有信息压缩到一个固定向量中,而是通过计算每个输入元素与当前任务的相关性,生成一个加权和表示。
  • 优势
    • 抽取少量重要信息,忽略不重要信息:模型能够聚焦于对当前任务有用的少量关键信息,有效地过滤掉大量不重要的或冗余的信息。
    • 归纳偏置:注意力机制的归纳偏置在于其任务需要的特征是轻重有别的,即并非所有输入元素都同等重要。
    • 提升信息处理能力:它能有效提升基于 RNN(特别是 LSTM)的 Seq2Seq 模型的信息处理能力,使其能够更好地处理长序列并捕获长期依赖关系。
  • 类比:注意力机制可以类比人类视觉神经系统的注意力机制。当人类观察一个场景时,并不会对场景中的每个像素都进行同等程度的加工,而是会根据任务需求(例如寻找特定物体)有选择性地将注意力集中在场景中的某些特定区域,从而更高效地获取所需信息。

4.1.3 自注意力机制 (Self-Attention)

自注意力机制是注意力机制的一种特殊形式,其中查询(Query)、键(Key)和值(Value)都来源于同一组输入。它允许模型对输入序列内部的不同位置进行加权,从而更好地捕捉序列内部的相关性。

  • Transformer Block:自注意力机制是 Transformer Block 的核心组成部分,而 Transformer Block 又是许多现代大型模型(如 GPT-2, GPT-3, BERT, RoBERTa, BART, T5 等)的基本构建单元。
  • 文本特征表示:在自注意力机制中,文本特征的输入和输出仍然是序列长度 ×\times 词向量维度,不会发生压缩。
  • QKV 概念:对于输入序列中的每一个词或 token 的特征 XX,通过线性变换生成三个部分:
    • Q (Query):查询向量,表示模型正在“寻找”或“提问”的信息。
    • K (Key):键向量,表示每个 token “拥有”的信息。
    • V (Value):值向量,表示每个 token “提供”的信息内容。
  • 计算方法:自注意力机制的计算过程如下:
    1. 计算注意力分数:将查询向量 QQ 与所有键向量 KK 进行点积(内积)运算,得到一个注意力分数矩阵。这个分数衡量了查询与每个键的相似度。
    2. 缩放:为了防止点积结果过大导致 Softmax 梯度过小,将注意力分数除以 dk\sqrt{d_k} 进行缩放,其中 dkd_k 是键向量的维度。
    3. 归一化:对缩放后的分数应用 Softmax 函数,将其转化为概率分布,得到归一化的注意力权重。
    4. 加权和:将这些注意力权重与所有值向量 VV 进行加权求和,得到最终的输出。 其数学表达式为: Attention(Q,K,V)=Softmax(QKTdk)VAttention(Q, K, V) = Softmax\left(\frac{QK^T}{\sqrt{d_k}}\right)V
    • 矩阵维度
      • QQ (Query), KK (Key), VV (Value) 的维度通常为 [L,d][L, d],其中 LL 是序列长度, dd 是向量维度。
      • QKTQK^T 的维度为 [L,d]×[d,L]=[L,L][L, d] \times [d, L] = [L, L]。这个矩阵表示序列中每个 token 对其他所有 token 的关注度。
      • 最终输出的维度为 [L,L]×[L,d]=[L,d][L, L] \times [L, d] = [L, d]
  • 优点与代价
    • 优点:自注意力机制擅长捕捉数据内部的相关性,能够有效地建模序列中任意两个位置之间的依赖关系。
    • 代价:它会带来大量的计算和存储开销。注意力分数矩阵的维度为 [L,L][L, L],这意味着计算复杂度和内存需求会随输入序列长度 LL 的平方增加。
  • MASKED 机制:在某些场景(如生成式任务,如语言建模)中,为了防止模型在预测当前 token 时“偷看”未来的 token,会使用 MASKED 机制。这意味着在计算注意力时,每个 token 的向量计算只考虑自己和之前的 tokens,不需要每个 token 的生成都重新计算所有之前的 KV 内容,通过将未来 token 的注意力分数设置为负无穷(Softmax 后变为 0)来实现。

4.1.4 多头注意力 (Multi-Head Attention)

多头注意力是对自注意力机制的扩展,旨在让模型能从不同的“表征子空间”(representation sub-spaces)中学习到不同的信息。

  • 原理:它通过并行运行多个独立的自注意力机制(称为“头”),每个头学习不同的方面或模式。最后将这些独立的注意力结果拼接起来,再经过一个线性变换,从而捕获更丰富、多样的信息。
  • 计算过程
    1. 线性变换:对原始的 Q,K,VQ, K, V 分别进行 hh 组不同的线性变换,生成 hh 组不同的 Qi,Ki,ViQ_i, K_i, V_i
    2. 并行计算注意力:对每一组 Qi,Ki,ViQ_i, K_i, V_i 并行计算一个自注意力结果 headihead_i
    3. 拼接与线性映射:将 hhheadihead_i 结果拼接 (Concatenate) 起来,然后通过一个最终的线性变换 WOW^O 得到多头注意力的输出。 其数学表达式为: MultiHead(Q,K,V)=Concat(head1,...,headh)WOMultiHead(Q, K, V) = Concat(head_1, ..., head_h)W^O 其中,headi=Attention(QWiQ,KWiK,VWiV)head_i = Attention(QW_i^Q, KW_i^K, VW_i^V)。 这里,WiQ,WiK,WiVW_i^Q, W_i^K, W_i^V 是第 ii 个头的线性变换矩阵,WOW^O 是最终的线性变换矩阵。

4.2 Transformer 架构

4.2.1 Google Transformer 结构

  • 核心地位:Transformer 网络是自然语言处理 (NLP) 领域中常用且影响深远的模型之一。
  • 与 Seq2Seq 类似:其宏观结构与传统的 Seq2Seq (Encoder-Decoder) 模型类似,都包括编码器 (Encoder)解码器 (Decoder) 两个主要部分。
  • 组成单元:然而,Transformer 完全抛弃了循环和卷积结构,转而完全基于注意力机制(尤其是自注意力机制和多头注意力机制)来构建。
  • 主要应用:它最初主要用于解决机器翻译等序列到序列的任务。
  • 引用:该模型首次由 Ashish Vaswani 等人在 2017 年的论文 “Attention is All You Need” 中提出。

4.3 GPT 系列大型语言模型

4.3.1 GPT (Generative Pre-trained Transformer)

  • 结构与潜力:GPT 系列模型采用了 Transformer 解码器部分作为其主要架构。它通过单向的 Block 连接,使得模型在生成文本时只能依赖于其左侧(即之前)的上下文。这种设计展示了预训练模型在语言生成任务中的巨大潜力
  • 应用领域:GPT 模型被广泛应用于各种文本生成任务,例如文本自动完成、生成对话、文章摘要等。
  • LLM 的自回归特性
    • 目前的大型语言模型 (LLM) 主要以自回归 (autoregressive) 模型为主。
    • 工作原理:给定之前生成或输入的 token 序列 x[1:i]x[1:i],LLM 的核心任务是输出下一个 token x[i+1]x[i+1] 的概率分布。通过这种方式,模型可以递归地(一个接一个地)生成整个序列,从而完成推理过程。
    • 计算方式:通常,模型会在最后一层、对最后一个 token 的输出特征应用 Softmax 函数来计算下一个 token 的概率分布。
  • GPT 的定义:GPT 代表着在大量原始数据上得到的生成语言模型
    • 架构特点:原始的 GPT 架构是一个 12 层的 Transformer
    • 学习目标:其主要学习目标是预测下一个 token,即通过观察大量文本数据来学习语言的统计规律和模式。

4.3.2 GPT 系列发展历程

GPT 系列模型的发展是大型语言模型领域进步的缩影,其核心思想是利用大规模预训练和模型规模化。

  • 4.3.2.1 GPT-1 (2018年6月)

    • 主要贡献:首次提出了预训练 (Pre-training) 和微调 (Fine-tuning) 的统一框架,奠定了后续大模型发展的基础。
    • 架构:使用 Transformer 解码器结构
    • 数据与任务:在大规模规范化文本语料上进行预训练,之后通过微调适应具体的下游任务(如文本分类和标注性任务)。
    • 规模:参数量为 1.17 亿,预训练数据量为 5GB
  • 4.3.2.2 GPT-2 (2019年2月)

    • 主要贡献:提出**“Language Models are Unsupervised Multitask Learners”**(语言模型是无监督的多任务学习器),强调模型通过无监督预训练就能解决各种不同的 NLP 任务,无需为每个任务单独微调。
    • 核心观察:自然发生的任务演示,即所有 NLP 任务的示例都可以在自然文本中找到。
    • 数据:引入了更大规模、更高质量的 WebText 数据集(包含 800 万个网页,大小约 40GB),极大地提升了模型的泛化能力。
    • 规模:参数量大幅增加到 15 亿
    • 改进:还增加了词汇表大小上下文窗口大小
  • 4.3.2.3 GPT-3 (2020年5月)

    • 主要贡献:提出了**“Language Models are Few-Shot Learners”(语言模型是少样本学习器),表明模型无需微调,仅通过与模型的文本交互(即提供少量任务相关的演示实例,称为in-context learning 或 few-shot learning**)就能指定和完成任务。
    • 规模:参数量再次爆炸性增长至 1750 亿,是 GPT-2 的 100 多倍。
    • 数据:预训练数据量达到惊人的 45TB
    • In-context learning
      • 与梯度下降学习的区别
        • 梯度下降学习:提供特征和标签作为数据,模型通过优化算法自动学习它们之间的映射关系。
        • In-context learning:通过在输入文本中提供示例、描述问题、提供相关信息和定义答案格式来引导模型完成任务。
      • 前提:当模型是一个元学习器 (meta-learner) 时,In-context learning 才成为可能。
  • 4.3.2.4 GPT-1/2/3 对比

模型GPT-1GPT-2GPT-3
主要贡献提出预训练和微调的统一框架用无监督预训练模型做各种不同 NLP 任务无需微调,利用少量演示指定任务
发布时间2018年6月2019年2月2020年5月
参数量1.17 亿15 亿1750 亿
数据量5GB40GB45TB
  • 4.3.2.5 CodeX (2021年8月)

    • 功能:一个能够输入自然语言,输出代码的模型。
    • 训练方式:使用 GitHub 上的代码数据对 GPT-3 进行微调
    • 数据集:训练数据集为 159GB 从 GitHub 上筛选的代码数据
    • 能力:它“精通”Python、JavaScript、PHP、Swift、Shell 等多种编程语言。
  • 4.3.2.6 InstructGPT (2022年3月)

    • 主要贡献:InstructGPT 提出并使用了来自人类反馈的强化学习 (Reinforcement Learning from Human Feedback, RLHF) 对预训练大模型进行微调,显著提升了模型遵循指令的能力和安全性。
    • 三步微调流程
      1. 监督方式微调 (Supervised Fine-Tuning, SFT):收集人类标注的指令数据,以监督学习的方式微调 GPT-3 模型。
      2. 训练奖励模型 (Reward Model, RM):利用人类对模型生成结果的偏好排序数据,训练一个奖励模型。这个奖励模型能够评估模型输出的质量。
      3. 强化学习微调 (Reinforcement Learning):利用训练好的奖励模型提供 reward 信号,使用近端策略优化 (Proximal Policy Optimization, PPO) 算法对第一步微调的 GPT-3 模型进行强化学习微调。
  • 4.3.2.7 ChatGPT (2022年11月)

    • 训练语料:其训练语料包含了多种主题的数据,使其能够处理各种不同任务,包括回答问题、撰写文章、多语种翻译、生成代码等。
    • 连续对话:ChatGPT 能够主动记忆之前的对话内容,实现流畅的连续对话
    • 训练方法:与 InstructGPT 类似,ChatGPT 也使用了来自人类反馈的强化学习 (RLHF) 对预训练大模型进行微调。这提升了模型理解人类思维的准确性,并使其功能优于纯粹的 GPT-3。
    • 与 InstructGPT 的关系:ChatGPT 和 InstructGPT 在训练流程上是相同的。主要区别在于 ChatGPT 在标注数据环节新增了大量的对话形式数据,并将原来的数据也全部改为了对话形式,使其更适合对话交互。
  • 4.3.2.8 GPT-4 (2023年3月)

    • 多模态能力:GPT-4 是一款多模态模型,可以同时接收图像输入和文本输入。它在多种多模态任务上的 zero-shot (零样本) 效果达到了甚至超过了针对性训练的模型。
    • 上下文长度:上下文长度大幅提升,可达 32768 tokens,相当于一次可以处理超过 50 页的内容,极大地扩展了模型的理解和生成能力。
    • 训练与性能:GPT-4 沿用了与 ChatGPT 一致的训练方法 (RLHF)。但在文本总结和加工能力上有了明显的提升,能够根据指令给出更优质、更准确的答案。

4.4 大语言模型 (LLM) 部署过程

大型语言模型从一个未经训练的神经网络到能够智能响应用户指令的完整系统,通常需要经过以下三个阶段:

4.4.1 预训练 (Pre-Training)

  • 目标:通过大规模无监督学习,让模型在海量文本数据上学习语言的结构、知识和模式
  • 方法:通常通过语言建模任务(如预测下一个词)来训练模型,使其掌握通用的语言理解能力。
  • 结果:预训练后的模型能够生成合理的文本段落,但对特定任务或指令的理解和执行能力仍然有限,可能无法直接用于与用户交互。

4.4.2 监督微调 (Supervised Fine-Tuning, SFT)

  • 目标:通过监督学习,引导模型执行更为具体的任务,让其能够更好地理解和响应用户指令。
  • 方法:使用高质量、标注好的指令-响应对数据来调整模型参数。这些数据可以是问答、代码生成、文本摘要等各种任务的示例。
  • 作用:使模型能够更准确、更相关地执行特定任务。Instruct Tuning 和 InstructGPT 就是这种方法的典型代表。

4.4.3 偏好优化 (Preference Optimization)

  • 目标:通过强化学习,进一步调整模型的生成行为,使其输出更符合人类的期望、偏好和价值观
  • 方法:这个阶段通常涉及人类反馈强化学习 (RLHF)。模型会生成多个响应,由人类标注者进行评估和排序,然后训练一个奖励模型来学习人类偏好。最后,利用奖励模型提供的 reward 信号,通过强化学习算法(如 PPO)来优化模型的策略,使其生成更受人类偏好的输出。
  • 作用:经过偏好优化后的模型在对话、回答问题、生成内容时,其输出会更符合人类期望,减少不准确、有偏见或不合适的输出。ChatGPT 和 Claude 等模型都广泛采用了这一技术。