2024-08-08
24T2
00

目录

从线性分类器到神经网络
线性分类器 Linear Classifiers
神经网络 Neural Networks
卷积神经网络 Convolutional Neural Network
卷积操作
滤波器大小
填充
步幅
扩张
激活函数
卷积层 Convolutional Layer
局部连接性 Local Connectivity
池化层 Pooling Layer
计算公式
总结
卷积神经网络训练
数据分割
迁移学习 Transfer Learning
过拟合和欠拟合 Overfitting & Underfitting
CNN与图像分类
LeNet
AlexNet
VGG
GoogLeNet
ResNet
SENet
DenseNet
迁移学习与预训练 Transfer Leanring & Pre-training

对PPT的简单总结省流版本,不代表全部内容。

从线性分类器到神经网络

线性分类器 Linear Classifiers

  1. 输入图像:一张32x32像素,3通道(RGB)的图片,总共有3072个数字。
  2. 输入特征向量 x\mathbf{x}:将图像的所有像素值展开成一个长度为3072的一维向量。
  3. 权重矩阵 W\mathbf{W}:大小为10x3072的矩阵,包含了线性分类器的参数或权重。
  4. 偏置项 b\mathbf{b}:大小为10x1的偏置向量。
  5. 输出:通过计算 f(x,W)=Wx+bf(\mathbf{x}, \mathbf{W}) = \mathbf{W}\mathbf{x} + \mathbf{b},得到一个10x1的向量,代表每个类别的分数。

通过这个计算,分类器可以对输入的图像进行分类,输出10个数值,表示图像属于每个类别的分数。得分最高的类别即为预测的分类结果。

image.png

神经网络 Neural Networks

神经网络: - 2层网络:该网络由两层全连接层(Fully Connected Layer)组成。 - 全连接网络:每一层的每一个神经元都与下一层的每一个神经元相连。

线性分类器与两层神经网络的对比: - 之前(Before):线性分类器的线性得分函数是 f=Wxf = W\mathbf{x},其中 x \mathbf{x} 是输入向量,WW 是权重矩阵。 - 现在(Now):两层神经网络的得分函数是 f=W2max(0,W1x)f = W_2 \max(0, W_1 \mathbf{x}),其中 W1W_1W2W_2 是两层的权重矩阵,max(0,)\max(0, \cdot) 是ReLU激活函数。

  1. 数学表示

    • 输入向量 x \mathbf{x} 属于 RD\mathbb{R}^D
    • 第一层权重矩阵 W1W_1 的大小是 H×DH \times D
    • 第二层权重矩阵 W2W_2 的大小是 C×HC \times H
  2. 实践中的偏置项:在实际操作中,我们通常会在每一层添加一个可学习的偏置项。

image.png

这张图展示了从两层神经网络到三层神经网络的扩展,使得模型能够处理更复杂的特征和模式。通过增加网络的层数,可以增强模型的表达能力,更好地解决复杂的非线性问题。

image.png

卷积神经网络 Convolutional Neural Network

  • CNN 本质上是神经网络,在至少一个层中使用卷积运算代替一般的矩阵乘法。
  • 卷积层作为特征提取器,从输入数据中提取特征,比如边缘、角点或端点。

卷积神经网络通过引入卷积操作,能够更高效地处理图像数据,尤其在处理具有空间结构的输入(如图像)时表现出色。这使得它们在计算机视觉任务中广泛应用,如图像分类、目标检测和图像分割等。

  1. CNN的组成

    • CNN由具有可学习权重的神经元组成,与常规神经网络类似。
  2. CNN的架构假设输入是图像

    • 使用特定的假设来处理图像。
    • 这些假设允许我们提取局部特征,如边缘、角点等。
  3. 这些假设带来的好处

    • 允许在架构中编码某些属性,使得前向传播(forward pass)更高效。
    • 显著减少网络所需的参数数量,从而降低计算复杂度。

卷积操作

卷积操作的几个关键参数:

  1. Filter size(滤波器大小)

    • 指卷积核的尺寸,例如3x3、5x5等。滤波器的大小决定了每次卷积操作所处理的局部区域的大小。
  2. Padding(填充)

    • 指在输入图像周围添加的像素数,以控制卷积输出的空间维度。常见的填充方式有“valid”(无填充)和“same”(填充后输出尺寸与输入相同)。
  3. Stride(步幅)

    • 指每次卷积操作移动的像素数。较大的步幅会减少输出的空间维度,较小的步幅会增加计算量但保留更多的细节。
  4. Dilation(扩张)

    • 指卷积核在应用时的扩展程度,通过在卷积核元素之间插入空洞来扩展其感受野,从而能够捕捉到更大的上下文信息。
  5. Activation function(激活函数)

    • 在卷积操作后应用的非线性函数,例如ReLU、Sigmoid或Tanh。激活函数引入非线性,使得模型能够学习复杂的模式和特征。

滤波器大小

  1. 滤波器大小

    • 滤波器大小可以是5x5、3x3等。
  2. 较大滤波器大小

    • 在许多情况下应避免使用较大的滤波器(不是总是!)。
    • 原因是学习算法需要学习滤波器的值(权重),较大的滤波器需要学习更多的参数,可能导致计算复杂度增加。
  3. 奇数大小的滤波器

    • 奇数大小的滤波器使用得比偶数大小的更多(不是总是!)。
    • 这是因为奇数大小的滤波器具有一个很好的几何特性,即所有输入像素都围绕输出像素对称分布,这有助于卷积操作的对齐和处理。

填充

  1. 卷积操作中的尺寸变化

    • 应用一个3x3的滤波器到一个4x4的图像时,得到的输出图像尺寸是2x2。这表明图像尺寸在卷积过程中减小了。
  2. 保持图像尺寸不变的填充方法

    • 如果我们希望保持图像尺寸不变,可以使用填充。
    • 在应用滤波器之前,我们在输入图像的每个方向上用0进行填充。
    • 如果填充大小是1x1,我们在每个方向上添加1个零。
    • 如果填充大小是2x2,我们在每个方向上添加2个零,依此类推。

通过适当的填充,可以在卷积操作后保持图像的空间尺寸不变,这在深层神经网络中非常有用,特别是在需要保留输入图像的空间信息时。

image.png

步幅

  1. 步幅的定义

    • 步幅指我们每次移动滤波器时,向右或向下移动的像素数。
  2. 步幅为1

    • 当步幅为1时,每次移动滤波器一个像素。
  3. 步幅为2

    • 当步幅为2时,每次移动滤波器两个像素。

通过调整步幅,可以控制卷积操作的输出尺寸。较大的步幅会减少输出的空间维度,适用于降维和减少计算量,而较小的步幅则有助于保留更多的细节信息。

扩张

  1. 卷积操作中的基础

    • 当我们应用一个3x3的滤波器时,输出受到3x3图像子集内像素的影响。
  2. 扩张的定义

    • 扩张是指通过在卷积核元素之间插入空洞来扩展感受野(即影响滤波器输出的图像部分),以便获得更大的感受野。
  3. 扩张的作用

    • 如果将扩张设为2,那么滤波器会跳过像素。例如,原本影响输出的是连续的3x3子集的像素,设置扩张后,变为5x5子集中的每隔一个像素影响输出。

image.png

激活函数

  1. 激活函数的应用

    • 在滤波器应用于整个图像后,将激活函数应用于输出,以引入非线性特性。
  2. 首选的激活函数

    • 在CNN中,首选的激活函数是ReLU(Rectified Linear Unit)。
  3. ReLU激活函数的作用

    • ReLU函数将输出中的正值保持不变,将负值替换为0。
    • 示例中,应用ReLU函数前的滤波器输出包含正值和负值,应用ReLU函数后,负值被替换为0。

通过使用ReLU激活函数,可以引入非线性,使神经网络能够学习和表示更复杂的模式。这种非线性变换对于深度学习模型的表现和训练效率至关重要。

卷积层 Convolutional Layer

  1. 卷积层的输出

    • 卷积层的输出可以解释为包含排列在3D体积中的神经元。
  2. 卷积层的参数

    • 卷积层的参数由一组可学习的滤波器组成。每个滤波器在空间上(沿宽度和高度)很小,但沿输入体积的深度延伸。
  3. 前向传播中的卷积操作

    • 在前向传播过程中,每个滤波器沿输入体积的宽度和高度滑动(卷积),生成该滤波器的二维激活图。
  4. 网络的学习过程

    • 网络通过反向传播(backpropagation)学习滤波器,当它们在输入的某个空间位置看到某些特定类型的特征时激活(通过激活函数)。

这种设计使得卷积神经网络能够有效地捕捉输入图像中的局部特征,如边缘、纹理等,从而在图像分类、目标检测等任务中表现出色。

局部连接性 Local Connectivity

  1. 高维图像数据的挑战

    • 当处理高维图像或数据时,使用全连接网络是不切实际的。
  2. 局部连接性的概念

    • 每个神经元只连接到输入体积的一个局部区域,而不是整个输入。
    • 这种局部连接性使得计算更加高效,并且可以捕捉到图像中的局部特征。
  3. 感受野(Receptive Field)

    • 神经元的这种连接范围称为感受野。
    • 感受野的空间范围决定了神经元能够“看到”的输入区域的大小。
  4. 深度轴上的连接性

    • 沿深度轴的连接范围总是等于输入体积的深度。
  5. 空间上的局部连接

    • 这些连接在空间上是局部的(沿宽度和高度),但在输入体积的深度方向上是全连接的。

这种局部连接性的设计,使得卷积神经网络能够有效地提取图像中的局部特征,如边缘、纹理等,从而在计算效率和模型性能上取得良好的平衡。

池化层 Pooling Layer

池化层的作用

  • 池化层使得表示变得更小、更易管理。
  • 它独立地操作每个激活图(activation map)。

池化层通常使用最大池化(Max Pooling)或平均池化(Average Pooling)来减少特征图的空间尺寸,同时保留重要的特征。这有助于降低计算复杂度和防止过拟合,同时使得模型在检测特征时具有一定的平移不变性。

这张图片展示了最大池化(Max Pooling)的操作过程:

  1. 输入特征图

    • 一个大小为4x4的单通道特征图。
  2. 最大池化操作

    • 使用2x2的池化滤波器和步幅为2进行最大池化。
    • 最大池化会在每个2x2区域内选取最大值作为输出。
  3. 输出特征图

    • 池化后的输出特征图大小为2x2。
    • 每个值代表对应2x2区域内的最大值。

具体过程如下:

  • 左上角2x2区域(1, 1, 5, 6)的最大值是6。
  • 右上角2x2区域(2, 4, 7, 8)的最大值是8。
  • 左下角2x2区域(3, 2, 1, 2)的最大值是3。
  • 右下角2x2区域(1, 0, 3, 4)的最大值是4。

池化层通过这种方式实现了特征图的降采样,减少了特征图的尺寸,同时保留了重要的特征信息。

image.png

计算公式

  1. 输入大小

    • 假设输入的大小为 W1×H1×CW_1 \times H_1 \times C,其中 W1W_1 是宽度,H1H_1 是高度,CC 是通道数。
  2. 卷积层需要的超参数

    • 空间范围 FF:指滤波器的大小。
    • 步幅 SS:指滤波器每次移动的像素数。
  3. 输出大小计算

    • 输出的宽度 W2W_2 和高度H2 H_2 可以通过以下公式计算:
      • W2=(W1F)S+1W_2 = \frac{(W_1 - F)}{S} + 1
      • H2=(H1F)S+1H_2 = \frac{(H_1 - F)}{S} + 1
  4. 参数数量

    • 池化层没有需要学习的参数,因此参数数量为0。

池化层通过这些超参数和公式,实现特征图的降采样,同时保留重要的特征信息,减少计算量,防止过拟合。

总结

  1. ConvNets的结构

    • 卷积神经网络堆叠了卷积层(CONV)、池化层(POOL)和全连接层(FC)。
  2. 发展趋势

    • 趋向于使用更小的滤波器和更深的架构。
    • 趋向于去除池化层和全连接层,仅使用卷积层。
  3. 历史架构: 传统架构通常如下所示:

    (CONV-RELU)NPOOL?M(FC-RELU)KSOFTMAX(\text{CONV-RELU})^N-\text{POOL?}^M-(\text{FC-RELU})^K-\text{SOFTMAX}

    其中: NN 通常在 5 左右。MM 较大。0K20 \le K \le 2

卷积神经网络训练

损失函数(Loss Function)

  • 损失函数用于计算模型预测的准确性。
  • 最常用的损失函数是分类交叉熵损失函数(categorical cross-entropy loss function),其公式为:
    H(y,y^)=iyilog1y^i=iyilogy^iH(y, \hat{y}) = \sum_i y_i \log \frac{1}{\hat{y}_i} = - \sum_i y_i \log \hat{y}_i
    其中,yiy_i 是实际值,y^i\hat{y}_i 是预测值。

训练目标

  • 训练的目标是最小化这个损失

损失的作用

  • 损失函数指导反向传播过程,以训练CNN模型。

优化算法

  • 常用的基于梯度下降的方法,例如随机梯度下降(Stochastic Gradient Descent, SGD)和Adam优化器(Adam optimizer),用于优化过程。

通过最小化损失函数,CNN模型可以调整其权重,从而提高预测的准确性。在训练过程中,梯度下降和优化算法帮助模型逐步收敛到最优状态。

数据分割

数据划分

  • 整个数据集(Whole data)被划分为三个部分:
    • 训练数据(Training data)
    • 验证数据(Validation data)
    • 测试数据(Test data)

训练过程(Training process)

  • 训练模型(Training a model)
    • 使用训练数据来训练模型。
  • 监控模型性能(Monitoring model performance)
    • 使用验证数据监控模型的性能,以便调整模型参数和架构。
  • 超参数调整(Hyperparameter tune)
    • 通过验证数据调整超参数,以找到最佳参数组合。
  • 模型选择(Model selection)
    • 根据验证数据的性能选择最优模型。

最终评估(Evaluation of final model performance)

  • 使用测试数据评估最终模型的性能,确保模型在未见过的数据上表现良好。

这种方法学通过数据的合理划分和系统的训练过程,确保模型能够在训练数据、验证数据和测试数据上表现出色,从而提高模型的泛化能力和实际应用效果。

迁移学习 Transfer Learning

迁移学习的目标

  • 迁移学习旨在利用从资源丰富的领域/任务中学习到的知识,帮助学习数据不足的任务。
  • 有时也被称为领域适应(domain adaptation)。

资源丰富的领域和低资源任务

  • 资源丰富的领域称为源(source)。
  • 低资源的任务称为目标(target)。

迁移学习的效果

  • 如果从源任务中学习到的模型特征是通用的(即,领域无关的),迁移学习效果最佳。

通过迁移学习,可以有效地将已有的知识和模型应用到新的、相关但不同的任务中,从而提高学习效率,减少对大量训练数据的需求。

过拟合和欠拟合 Overfitting & Underfitting

监控损失

  • 在训练迭代期间监控训练集和验证集的损失。

欠拟合

  • 如果模型在训练集和验证集上都表现不佳,则说明模型欠拟合。
  • 欠拟合通常是由于模型过于简单,无法捕捉数据中的复杂模式。

过拟合

  • 如果模型在训练集上表现良好,但在验证集上表现不佳,则说明模型过拟合。
  • 过拟合通常是由于模型过于复杂,能够很好地记住训练数据,但无法很好地泛化到新的数据。

防止模型过拟合的几种常用方法:

增加训练数据(More training data)

  • 通过获取更多的数据来训练模型,可以帮助模型更好地泛化,减少过拟合的风险。

提前停止(Early Stopping)

  • 在验证集损失不再下降时停止训练,以避免模型在训练集上过拟合。

数据增强(Data Augmentation)

  • 通过对训练数据进行各种变换(如旋转、缩放、翻转等)来生成新的训练样本,增加数据的多样性。

正则化(Regularization)

  • 通过添加惩罚项(如权重衰减(weight decay)和丢弃(dropout))来限制模型复杂度,从而减少过拟合。
    • 权重衰减(Weight Decay):在损失函数中加入权重的平方和,使得模型更倾向于较小的权重。
    • 丢弃(Dropout):在训练过程中随机丢弃一部分神经元,减少对特定节点的依赖,增强模型的鲁棒性。

批量归一化(Batch Normalization)

  • 对每一批数据进行归一化处理,加速训练过程,同时提高模型的稳定性和泛化能力。

CNN与图像分类

专为处理网格状数据设计

  • CNNs 专门设计用于处理网格状数据(如图像),因此非常适合处理图像数据。

自动学习相关特征

  • CNNs 可以从原始像素数据中自动学习相关特征,消除了手工特征工程的需要。

使用卷积层检测局部模式

  • CNNs 使用卷积层来检测局部模式,随后使用池化层(Pooling Layers)来减少空间维度和防止过拟合。

全连接层进行最终分类决策

  • CNNs 在最后使用全连接层,根据学习到的特征做出最终的分类决策。

这些特点使得卷积神经网络在图像分类任务中表现出色,通过自动提取和学习图像中的特征,大大提高了分类的准确性和效率。

LeNet

这是 Yann LeCun 在1989年为数字识别开发的第一个卷积神经网络。以下是 LeNet 的关键特点:

使用反向传播

  • 第一次使用反向传播来自动学习视觉特征。

网络结构

  • 包含两个卷积层和三个全连接层。
  • 输入大小为 32 x 32,具有6和12个特征图,使用 5 x 5 的滤波器。

步长

  • 使用步长为2来减少图像尺寸。

激活函数

  • 使用缩放的 tanh 激活函数。

权重初始化

  • 使用均匀随机权重初始化。

这些特点使得 LeNet 在当时成为一种非常有效的数字识别模型,并为后来的深度学习和卷积神经网络的发展奠定了基础。

AlexNet

这是一种著名的卷积神经网络,它在2012年的ImageNet竞赛中取得了显著的成绩。以下是 AlexNet 的一些重要启发式方法:

ReLU 非线性

  • 使用ReLU激活函数,替代传统的tanh和sigmoid激活函数,提高了训练的速度和效果。

局部响应归一化(Local Response Normalization, LRN):

  • 引入局部响应归一化来帮助模型在训练时保持数值稳定性,改善了泛化性能。

数据增强

  • 通过对训练数据进行增强(如旋转、缩放、翻转等),增加数据的多样性,从而提高模型的泛化能力。

Dropout

  • 使用Dropout方法在训练过程中随机丢弃一些神经元,防止过拟合,提高模型的鲁棒性。

这些方法在 AlexNet 的应用,使得其在处理大规模数据集和复杂图像分类任务时表现出色,同时也为后续的卷积神经网络的发展奠定了基础。

VGG

这是一种由牛津大学视觉几何组(Visual Geometry Group, VGG)开发的卷积神经网络。

开发者

  • 由 Simonyan 和 Zisserman 在牛津大学视觉几何组开发。

竞赛成绩

  • 在 ILSVRC 2014 比赛中,VGG 网络在分类任务中获得了亚军,并在定位任务中获胜。

VGG-19

  • VGG-19 是 VGG 网络的一种变体,它包含了144百万个参数。

VGG 网络以其简单而深层的结构著称,通常使用多个连续的小卷积核(例如 3x3 卷积核)和池化层来构建深度网络,从而能够有效地提取图像的多层次特征。

GoogLeNet

GoogLeNet(也称为 Inception V1)是由谷歌研究人员开发的一种 22 层卷积神经网络。

  • 开发背景:GoogLeNet 是一种由谷歌研究人员开发的 22 层卷积神经网络。

  • 深层网络挑战:深层网络容易出现过拟合问题,并且可能受到梯度爆炸或梯度消失问题的影响。

  • 核心理念:GoogLeNet 的核心理念是 “Inception 模块”,它采用多分支、多尺寸卷积核的设计。

  • 辅助损失:在训练过程中添加辅助损失作为额外的监督手段,以帮助缓解梯度消失问题并提高训练效果。

这种结构通过结合不同尺寸的卷积核来捕捉图像的多尺度特征,有效地提高了网络的表达能力和性能。

ResNet

ResNet(Residual Networks)是由微软研究人员(包括何恺明等人)开发的一种深层卷积神经网络。

  • 开发背景:ResNet 是由微软研究人员开发的,其核心理念是通过引入残差连接(residual connections)或跳跃连接(skip connections)来保持梯度的传递。

  • 核心理念:残差连接的核心思想是在每一个卷积层之后添加直接的跳跃连接,允许输入数据在层与层之间直接传递。

  • 优势:残差连接能够有效地防止梯度消失问题,并且可以帮助网络更容易地进行更深层次的训练,从而显著提高模型的性能。

ResNet 通过这种残差结构,使得非常深的网络也能够进行有效的训练,极大地推动了深度学习模型的应用和发展。

SENet

SENet(Squeeze-and-Excitation Network)是一种旨在增强卷积神经网络表示能力的架构。

  • 空间和通道信息融合:卷积神经网络(CNNs)融合空间和通道信息以提取特征来解决任务。

  • 通道加权机制:在 SENet 出现之前,网络在创建输出特征图时对每个通道的权重是相等的。SENet 引入了一种内容感知机制,可以自适应地加权每个通道。

  • SE Block 的作用:SE Block(Squeeze-and-Excitation Block)通过访问全局信息来增强网络的表示能力,更好地映射通道依赖性。

这种机制使得 SENet 在保持计算效率的同时,显著提高了模型的性能和精度。

DenseNet

DenseNet(Densely Connected Convolutional Networks)是一种卷积神经网络架构,其主要特点包括:

  • Dense Block vs Res Block:DenseNet 的核心在于其密集连接(dense connections),与 ResNet 的残差连接(residual connections)相比,DenseNet 通过直接连接每一层到所有后续层,形成密集块(dense block)。这种方式允许前面的层的特征图被后续的层重用,减少了梯度消失问题并提高了信息流动效率。

  • 更灵活的连接:DenseNet 的每一层都接收来自所有前面层的输入,使其能够更高效地利用之前的特征,增强了模型的表示能力。

  • 过渡层(Transition Layer):在密集块之间,DenseNet 使用过渡层来进行维度和计算的简化。过渡层通常包含卷积层和池化层,用于减少特征图的数量和尺寸,从而控制计算复杂度。

这些特点使得 DenseNet 能够更高效地使用参数,达到更好的性能,同时减少过拟合的风险。

迁移学习与预训练 Transfer Leanring & Pre-training

  • 预训练模型来自(大规模)数据集:迁移学习通常利用在大规模数据集(如ImageNet)上预训练的模型,这些模型已经学习到了一些通用的特征和模式。

  • 将已学到的知识转移到新的任务:这种技术可以将预训练模型应用于新的数据和任务。通过这种方式,我们可以更快地训练模型,且通常能获得更好的性能。

    • 新数据具有不同的分布(从合成数据到真实数据):迁移学习可以帮助模型适应新数据,即使这些数据与预训练数据的分布不同。例如,从合成数据(虚拟生成的数据)转移到真实世界的数据。

    • 新任务(从分类到分割):迁移学习也可以用于不同类型的任务。一个常见的例子是将用于图像分类的预训练模型应用于图像分割任务。

本文作者:Jeff Wu

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!