卷积神经网络基本原理
由上图可以看出,CNN模型由多个卷积层和池化层交替堆叠而成,图片被进行了不同的处理,每一层都被提取出了不同的特征,最终将每个单元的输入汇总,输出分类。
CNN 是一种神经网络:一种用于识别数据模式的算法。神经网络通常由一组神经元组成,这些神经元按层组织,每个神经元都有自己的可学习权重和偏差。让我们将 CNN 分解为其基本构建块。
- 可以将张量视为 n 维矩阵。在上图的 CNN 中,张量将是 3 维的,但输出层除外。
- 神经元可以被认为是一个函数,它接受多个输入并产生单个输出。神经元的输出在上面表示为红色→蓝色激活图。
- 层只是具有相同作(包括相同超参数)的神经元的集合。
- 内核权重和偏差虽然对每个神经元都是唯一的,但在训练阶段会进行调整,并允许分类器适应提供的问题和数据集。它们在可视化中以黄色→绿色发散色标进行编码。具体值可以在 Interactive Formula View 中查看,方法是点击神经元或将鼠标悬停在 Convolutional Elastic Explanation View 中的 kernel/bias 上。
- CNN 传达一个可微分的分数函数,该函数在输出层的可视化中表示为类分数。
CNN经典模型和数据集
1 CNN经典模型
LeNet网络 是最早的卷积神经网络之一,由Yann LeCun等人于1998年提出。它主要用于手写数字识别任务,是深度学习和CNN历史上的一个重要里程碑。
该模型的提出主要应用于手写数字的识别任务
其网络结构如下:
输入层:接收原始图像数据。
卷积层:使用多个卷积核(或滤波器)来提取图像的局部特征。LeNet通常包含两个卷积层。
池化层:在卷积层之后,使用池化操作来降低特征图的空间维度,同时保留重要的特征信息。
全连接层:卷积层和池化层提取的特征被展平并传递到一个或多个全连接层,这些层负责进行更高层次的特征整合。
输出层:最后一个全连接层的输出被传递到一个分类层,通常是一个softmax层,用于生成最终的类别概率。
LeNet 的典型结构如下:卷积层1+池化层1+卷积层2+池化层2+全连接层1+全连接层2+输出层
卷积层1:使用6个5x5的卷积核,步长为1,输出6个特征图。
池化层1:使用2x2的池化窗口,步长为2。
卷积层2:使用16个5x5的卷积核,步长为1,输出16个特征图。
池化层2:使用2x2的池化窗口,步长为2。
全连接层1:将特征图展平并连接到120个神经元。
全连接层2:将120个神经元的输出连接到84个神经元。
输出层:将84个神经元的输出连接到10个神经元,对应于数字0到9的分类。
2012年,Alex Krizhevsky等人提出的AlexNet在ImageNet竞赛中取得了突破性的成绩,推动了深度学习的发展。AlexNet是一个具有8层的深度网络,使用ReLU激活函数和局部响应归一化(Local Response Normalization, LRN)技术,引入了多GPU训练的概念。
AlexNet架构的特点如下:
深度结构:AlexNet是一个具有8层的深度网络,其中5层是卷积层,2层是全连接层,还有3层是池化层。
ReLU激活函数:在卷积层和全连接层之后使用ReLU(Rectified Linear Unit)作为激活函数,这有助于解决梯度消失问题,加速训练过程。
局部响应归一化:在池化层之后使用LRN,有助于提高模型的泛化能力。
数据增强:通过随机裁剪和水平翻转等技术对训练图像进行数据增强,以减少过拟合。
Dropout:在训练过程中使用Dropout技术,随机丢弃一些神经元的输出,以防止模型对训练数据过度拟合。
多GPU训练:AlexNet是第一个使用多个GPU进行训练的CNN模型,这大大提高了训练效率。
AlexNet的具体结构如下:卷积层1+池化层1+卷积层2+池化层2+卷积层3+卷积层4+卷积层5+池化层3+全连接层1+全连接层2+输出层
卷积层1:96个滤波器,11x11大小,步长4,后跟ReLU激活函数。
池化层1:3x3大小,步长2。
局部响应归一化1
卷积层2:256个滤波器,5x5大小,步长1,后跟ReLU激活函数。
池化层2:3x3大小,步长2。
局部响应归一化2
卷积层3:384个滤波器,3x3大小,步长1,后跟ReLU激活函数。
卷积层4:384个滤波器,3x3大小,步长1,后跟ReLU激活函数。
卷积层5:256个滤波器,3x3大小,步长1,后跟ReLU激活函数。
池化层3:3x3大小。
全连接层1:4096个神经元,后跟ReLU激活函数和Dropout。
全连接层2:4096个神经元,后跟ReLU激活函数和Dropout。
输出层:1000个神经元,使用softmax激活函数进行分类。
值得一提的是,alexNet 是端到端神经网络模型的开山之作
牛津大学的视觉几何组于2014年提出的VGGNet,以其深层结构和3x3小卷积核而闻名。VGGNet展示了通过增加网络深度和使用小卷积核可以有效地提高模型性能。在ImageNet竞赛中取得了优异的成绩,并且因其简洁的设计和强大的性能而广受欢迎。
VGGNet的主要特点包括:
深层结构:VGGNet采用了更深的网络结构,最初的版本有16层(VGG-16),还有一个更小的版本有13层(VGG-13)。深度是VGGNet能够学习更复杂特征的关键。
小卷积核:与AlexNet使用的大卷积核不同,VGGNet使用了3x3的小卷积核,并且通过堆叠多个卷积层来捕获更广泛的空间特征。
连续的卷积层:在每个卷积层之后,VGGNet通常会连续使用更多的卷积层,而不是像AlexNet那样在卷积层和池化层之间交替。
池化层:VGGNet在连续的卷积层之后使用2x2的池化层,步长为2,以减少特征图的空间尺寸。
全连接层:在卷积和池化层之后,VGGNet使用几个全连接层,最终输出层使用softmax激活函数进行分类。
网络初始化:VGGNet采用了一种特定的权重初始化方法,这有助于加速训练过程并提高模型性能。
数据增强:VGGNet同样使用了数据增强技术,包括随机裁剪和水平翻转,以提高模型的泛化能力。
卷积层1(64个3x3卷积核)+ReLU激活函数+卷积层2(64个3x3卷积核)+ReLU激活函数+2x2池化层1
+卷积层3(128个3x3卷积核)+ReLU激活函数+卷积层4(128个3x3卷积核)+ReLU激活函数+2x2池化层2
+卷积层5(256个3x3卷积核)+ReLU激活函数+卷积层6(256个3x3卷积核)+ReLU激活函数+2x2池化层3
+卷积层7(512个3x3卷积核)+ReLU激活函数+卷积层8(512个3x3卷积核)+ReLU激活函数+2x2池化层4
+卷积层9(512个3x3卷积核)+ReLU激活函数+卷积层10(512个3x3卷积核)+ReLU激活函数+2x2池化层5
+全连接层1(4096个神经元)+全连接层2(4096个神经元)+输出层(1000个神经元)+ softmax激活函数(分类)。
VGG提出了小的卷积核代替大的卷积核的概念,几乎从vgg提出起,3*3连续的小卷积核成为了主流
GoogLeNet,又称Inception网络,由Google研究人员在2014年提出。它引入了一种新的网络设计思路,即Inception模块,允许网络自动决定在不同尺度上使用哪种类型的卷积或池化操作,提高了模型的效率和性能。
Inception模块的核心思想是在同一层中并行地应用不同尺寸的卷积核,然后将结果在深度方向上合并。这样做的好处是可以捕获不同尺度的特征,而不需要手动设计网络结构来适应不同尺寸的特征。
一个典型的Inception模块包含以下部分:
1x1卷积:用于跨通道降维或升维,有助于减少计算量和控制模型大小。
3x3卷积:首先通过1x1卷积降维,然后应用3x3卷积。
5x5卷积:首先通过1x1卷积降维,然后应用5x5卷积,通常5x5卷积之前会先应用一个3x3的最大池化来减小计算区域。
3x3最大池化:直接在输入上应用3x3的最大池化,然后通过1x1卷积进行升维。
GoogLeNet的整体架构如下:
输入层:接受原始图像数据。
卷积层:一个64个滤波器的卷积层,使用7x7卷积核,步长为2,后跟ReLU激活函数。
池化层:5x5的最大池化,步长为3。
Inception模块:多个Inception模块堆叠,每个模块包含不同尺寸的卷积和池化操作。
辅助分类器:在网络中间部分添加辅助分类器,可以帮助网络学习更早的特征,并且提供额外的损失信号,有助于防止过拟合。
全连接层:在多个Inception模块之后,使用全连接层进行特征整合。
输出层:使用softmax激活函数的1000个神经元输出层,用于分类。
GoogLeNet的创新之处在于其Inception模块的设计,这种设计后来也被用于其他网络架构中,如Inception-v2、Inception-v3等。GoogLeNet展示了通过并行化不同尺寸的卷积操作,可以有效地提高网络的性能和效率。
此外,辅助分类器的引入也是GoogLeNet的一个重要特点,它有助于提高模型的泛化能力和训练稳定性。
2015年,微软研究院提出的残差网络(Residual Networks,ResNet)通过引入残差学习框架,解决了深层网络训练中的梯度消失问题。在2015年的ImageNet和COCO竞赛中取得了优异的成绩,并因其解决深层网络训练难题的能力而广受关注。
残差学习
ResNet的核心创新是残差学习框架,它通过引入跳跃连接(skip connections)或快捷连接(shortcut connections)来解决随着网络深度增加时训练难度增大的问题。这些连接允许网络中的信号绕过一层或多层直接传递,从而帮助梯度在网络中更有效地传播。
残差块
ResNet的基本单元是残差块(residual block),它包含两个卷积层,以及一个跳跃连接,该连接将块的输入直接添加到块的输出。如果输入和输出的维度不匹配,会在跳跃连接上使用1x1卷积来进行维度调整。
一个典型的残差块结构如下:
首先,输入通过卷积层1(通常有批量归一化和ReLU激活函数)。然后,通过卷积层2(同样有批量归一化和ReLU激活函数,但在卷积层2之前没有ReLU)。之后,输入通过1x1卷积(如果需要)调整维度,然后与卷积层2的输出相加。最后,通过ReLU激活函数。
ResNet的不同版本
ResNet-18:含有18层的残差网络。
ResNet-34:含有34层的残差网络。
ResNet-50:含有50层的残差网络,是最常见的ResNet版本之一。
ResNet-101:含有101层的残差网络。
ResNet-152:含有152层的残度网络。
ResNet的架构特点
批量归一化:ResNet在每个卷积层之后使用批量归一化,有助于加速训练过程并提高模型的稳定性。
ReLU激活函数:在卷积层之后使用ReLU作为激活函数。残差块:通过残差块结构,ResNet可以有效地训练非常深的网络。
全局平均池化:在残差块之后,ResNet使用全局平均池化来减少全连接层的参数数量。
全连接层和输出层:在全局平均池化之后,使用全连接层进行特征整合,最终输出层使用softmax激活函数进行分类。
ResNet的成功在于它提供了一种有效的方法来训练深层网络,使得网络可以更深而不会遇到梯度消失或梯度爆炸的问题。
此外,ResNet的架构也启发了后续许多其他网络架构的发展,如DenseNet、ResNeXt等。
2 CNN经典数据集
(1) MNIST数据集
手写数字数据集
MNIST是最受欢迎的深度学习数据集之一,这是一个手写数字数据集,包含一组60,000个示例的训练集和一个包含10,000个示例的测试集。这是一个很好的数据库,用于在实际数据中尝试学习技术和深度识别模式,同时可以在数据预处理中花费最少的时间和精力。
(2) CIFAR 10 数据集
包含6万张彩色图像,图像大小是32x32,共有10个类,每类有6000张图。其中,5万张图组成训练集合,训练集合中的每一类均等,都有5000张图剩余1万张图作为测试集合,测试集合中的每一类也均等,各有1000张图
10个类别是:airplane、automobile、bird、cat、deer、dog、frog、horse、ship和truck
(3) ImageNet数据集(数据异构,使用子集)
1400多万幅图片,涵盖2万多个类别的标注与超过百万的边界框标注,每一个类别大约有500~1000张图片
ImageNet竞赛使用的是ImageNet完整数据集的一个子类,包括1000类,其中大部分是动物。在深度学习任务中,我们经常会使用lmageNet预训练的模型
(4) FDDB人脸数据集
是被广泛用于人脸检测方法评测的一个数据集共2845张图像,包含有5171张人脸图像,大部是自然条件下拍摄的名人
(5) WIDER Face数据集
32203张图像,共有393703张人脸图像,比FDDB数据集大10倍,而且在面部的尺寸、姿势、遮挡、表情、妆容和光照上都有很大的变化,自发布后广泛应用于评估性能比传统方法更强大的卷积神经网络
TODO
①需要任务异构:找多模态的数据集,找异构数据集
②学习内容往FL上靠,大模型和FL相关的
③可以找FL项目。之后可以动手实现FL代码,运行
④在联邦学习模型上进行学习和异构
⑤图异构下有什么特点
⑥读最新的联邦学习论文
⑦框架看看示例