ImageNet Classification with Deep Convolutional Neural Networks

组会讲了下Alexnet网络,下面的内容是我第一次讲组会挺紧张怕讲的磕磕绊绊,写了个ppt的稿子,语句应该是通的,最后没有用上,直接扔脑后有点可惜我的时间,分享一下。

准备的时候结合了李宏毅老师的机器学习课程(bilibili),李沐老师的Alexnet讲解(bilibili),和droupout、的讲解(CSDN,链接当时我没有收藏,直接搜一下应该可以搜到)

---------------------------------------------------------------------------------------------------------------------------------

这篇文章使用了ImageNet数据集的,1千种类别共120万张,高分辨率的、带标签的的图像;深度卷积网络由60million个参数,65w个神经元,以及五个卷积层和三个全连接层组成;通过图像增强,dropout方法来减小过拟合的发生。符合机器学习以及深度学习更大的数据集,更强的模型,更好的过拟合技术的发展趋势,并且在分类任务上取得了很好的效果。

这篇文章之所以成为深度学习必读文章,是在于他的贡献影响深远。

最浅层的一点贡献是,在发表文章的当年,AlexNet是有史以来对Imagenet数据集进行分类时,错误率最小,效果最好的模型。

其次,因为深度学习的网络大小受到GPU内存、算力、训练时长的制约。而这篇提出的多GPU分布训练,在GPU算力仍然无法跟上深度学习模型发展的今天,仍有很大的参考意义。

第三四条,也是这篇文章的核心,通过将Relu函数,局部归一化、Dropout等概念引入深度学习模型,将当时已经淡出人们视线的深度学习模型再次带回主流计算机视觉领域。

最后一点是作者自己没有提到的贡献,但是事实上文章没有对输入的数据集进行特征抽取,而是直接输入原始图像,这为之后的深度学习发展减化了非常多的工作。

接下来我向大家介绍文章具体讲了什么。

文章所处理的所有图片来自于Imagenet数据集,这是一个图片被分为许多类别,并且每个类别的图片量极大且有标签的数据集。而之所以称这个网络是有史以来对Imagenet数据集进行分类效果最好的模型,是因为ImageNet Large Scale Visual Recognition Challenge这个比赛会对不同团队提交的模型用测试集图片进行测试,通过报告top-1top-5两个误差率来比较模型好坏。

在数据集的预处理上,由于ImageNet数据集本身由各种分辨率的图像组成,所以我们要先对数据集进行缩放,将短边变成256的大小,另一个长边在这一步操作中也会根据长宽比进行调整,然后从图片中心对长边进行两侧的裁剪,得到256*256的尺寸大小。

除了遍历数据集外,我们没有对图像进行任何的预先处理,我们实现了一个端到端的方式,也就是刚刚提到的说直接将原始图片输入到神经网络模型,他就能实现我们想要的功能,这是开创性的工作,因为在这之前的深度学习模型都会抽取特征、抽取SIFT特征等等,可以想象,这样简单的预处理步骤无疑对深度学习领域有着深远影响。

这里展示的是这篇文章的核心了,Alex所提出的神经网络。

这是看上去十分复杂的一个网络,实际上,他经历了五次卷积和三个全连接层,中间又有着池化、归一化、两GPU通道维度的融合等操作。为了便于大家理解,我在具体讲这个网络前先介绍几个概念。

第一个是卷积的概念。

卷积核以步长为单位在数字图像上滑动,在没有膨胀率的情况下,卷积可以简单理解为乘加运算。

从示例图中可以清楚的感受到这一运算的过程,3*3的卷积核在第一个运算位置得到结果4,随后每次滑动1格,最终输出尺寸为3*3的特征图(padding考不考虑边缘)

卷积的作用是用来提取特征图。

第二个概念是池化,常见形式有平均池化和最大值池化等。

从示例图中可以清楚的感受到两种池化的过程,平均池化是对池化核区域做取均值运算,最大池化是的滑动下对池化核区域做取最大值运算。

池化层是对输入的特征图进行压缩,还起到进一步提取特征的作用。

文章中的网络所用的池化方式为重叠池化。一般的池化层因为没有重叠,所以池化核和步长一般是相等的,如果池化核尺寸比步长大, 那么就会产生覆盖的池化操作,文章表示这样处理可以在alexnet中得到更准确的结果。

第三个概念是正则化,也叫归一化。是通过对数据进行偏移和尺度缩放调整,使其保持原有的分布特征,从而补偿网络的非线性表达损失。

文章使用了局部归一化方案,可以将这个公式的概念理解为,把一组向量中所有的数归一化到[0,1]之间,只不过这里需要替换为kernel对应的特征图上(x, y)位置的像素值,文章应用的这个归一化方案是用了可能会更好。

(但实际上由于ReLU激活函数得到的值域没有区间,所以并不需要输入归一化来防止它们达到饱和。也就是说文章应用的这个归一化方案是用了可能会更好,但不用也可以的,这同时也是ReLU在这方面的优势。)

(五个连续排列的矩形,每一个矩形表示的一个卷积核生成的feature map。所有的pixel已经经过了ReLU激活函数,现在我们都要对具体的pixel进行局部的归一化。假设需要运算的是第ikernel对应的map,那么其余相邻的四个矩形是它周围的邻居kernel层对应的map,假设矩形中间的pixel的位置为(x, y),那么我需要提取出来进行局部归一化的数据就是周围邻居kernel对应的map(x, y)位置的pixel的值。)

理解了前面几页的概念后,这个网络就好理解一些了,在第一个卷积层,即图中红色框的位置,……

3RGB三通道,通道相当于一个需要识别的模态了)

第二个卷积层……

55是上一层输出(计算包括卷积、池化、正则化,最终输出feature55

我们看到这个网络实际上是被切开分为两部分的,这是因为是在两个GPU上运行,由于图片太多,GPU算力和内存不够,所以两部分网络各自训练各自的,各有各的参数核,结构都是一样的。

但在这一层,在通道维度上做了一个融合,第三个卷积层……

第四个卷积层……

可以看到,输入的图片从一个又高又宽又扁的形状,慢慢变为了一个宽和高都很小但是很长的一个张量,这是说,图片的空间信息被压缩了,但是可以识别的模态变多了,语义信息增加了。

(图片的空间信息被压缩了,也就是从一开始的224变为了后面的1313中的一个像素能表示之后一大片像素。通道数变多也就是变长了,通道数可以理解为对于一个模式的识别,例如通道数为192那么说明可以识别图中192个模式,例如猫腿、爪子这种模式。所以说整个过程就是空间信息被压缩,但是语义信息空间慢慢增加。

第五个卷积层……

五层卷积结束后,所有神经元与后面的全连接层相连。

在五层卷积层之后,是三层全连接层,……

全连接层是卷积神经网络中重要的部分,起到分类器的作用,在这部分将特征图映射到样本标记空间。也就是,将特征图的通道维数整合到一起,变为了一个4096维的向量,这个向量可以把输入图片的语义信息表示出来,让计算机可以识别,用来实现分类任务。(最后还有一个Softmax函数,作为输出层,可以简单理解为起到简化输出的作用)

到这里,alexnet核心的深度学习网络框架已经介绍完毕,这个框架如何实际运用需要再了解一些机器学习的知识。

(机器学习可以认为是一个压缩知识的过程;我们原始的一个图片,文字或者视频输入到一个模型中,这个模型就会把它压缩为一个向量,这个向量可以被机器识别,用来实现别的任务,例如分类等等。

机器学习的逻辑实际就是屏幕上列举的三步:定义模型预测数据与真实数据之间的损失值loss;通过损失值迭代优化,调整模型的函数公式以得到最优模型。

一、以最简单的线性函数举例,假设一个函数公式作为model,对于已知的一组xy,用权重weigh和偏差bias这两个未知参数来构建模型y=wx+b预测预测下一个结果y

二、模型预测的y和真实数据y label之间的差值形成了e,所有已知的数据的e之和就是Loss,显然这个量代表了模型的好坏;

三、通过梯度下降的方法可以求得不同参数下的loss值,计算此时参数对loss的微分,根据斜率正负调整参数的大小,设定一个学习率𝜂η,调整过后的权重为w0-学习率x微分值,重复这个操作,直到更新上限或者调整到微分值刚好为0或者限入局部最优解,这时更新结束,得到最优模型。

这就是机器学习的底层逻辑。

但是在实际应用中,需要解决的问题往往是非线性的,这就需要我们对y=wx+b引入更多的非线性因素,激活函数就承担了这部分功能,常见的激活函数有relu sigmoid tanh等等,ppt展示了relusigmoid函数的公式和简单函数图像。

文章中表示reluAlexnet中有更好的表现,如最右侧图,错误率收敛到同一数值时,relu要表现的好的多。

𝒚=𝐦𝐚𝐱𝟎,𝒃+𝒘𝒙𝟏y=max⁡(0,b+w∗x1)

𝒚=𝒃+𝟐𝒊𝒄𝒊 𝒎𝒂𝒙(𝟎,𝒃𝒊+𝒘𝒊𝒙𝟏)y=b+∑_2i▒〖c_i  max(0,b_i+w_i x_1)〗

𝒚=𝒃+𝒋𝒘𝒋𝒙𝒋y=b+∑_j▒〖w_j x_j 〗

𝒚=𝒃+𝟐𝒊𝒄𝒊 𝒎𝒂𝒙(𝟎,𝒃𝒊+𝒋𝒘𝒊𝒋𝒙𝒋)y=b+∑_2i▒〖c_i  max(0,b_i+∑_j▒w_ij  x_j)〗

 而当xy的关系并非线性,而是呈图中所示的红色折线时,可以将红色的折线分解为多段函数的组合,如图中四条蓝色折线所示,很清晰的看到,红色折线可以被等效为四条z形状的折线之和,而这个z形状的折线就是sigmoid函数的形状,由此类推,任意一个非线性的曲线图,都可以分解为多段sigmoid函数相加。这样解释过后,右侧的公式就非常容易理解了。

线性模型在通过函数激活后为式1所示,当模型是由多个函数相加组合形成时,则构成了式2,式中i表示了该模型是由几个式1组合形成的。

当将所有的xy变量都输入到式2所示的模型中时,则组合式3和式2,其中j表示输入的变量x的数目,得到了最终的式4。这个公式可能比较抽象,接下来我用矩阵的形式把他表示一下。

 

ij都为3时,代入式4可以展开为蓝色虚线框内的式子,r123设为向量rb123设为向量b,所有的wij可以设置为矩阵Wx123设为向量大X,这个式子可以用框图形式画出,

(比划一下)r1= + + +bias1,同理x2x3也这样运算,得到了向量r,向量r通过激活函数,得到向量a,向量a可以继续向前经历刚刚向量x所经历的运算,得到向量y

这样不断迭代,就会形成一层一层向下传播的网络,每一个运算点都是一个神经元,每一层都被称为hidden layer,这样有好几个隐藏层的网络也就是深度学习网络了。

简单理解alexnet网络结构后,我们进入文章描述的实验部分。

这篇文章用了两种方法来减小过拟合,一个是使用标签-保留转换的方法人工扩大数据集。256×256图像中随机提取224×224的图像,这就是刚刚网络中输入图像是224×224的原因;并且对每个训练图像的RGB通道,成倍增加已有主成分。

第二个减小过拟合的方法是随机失活神经元操作。以0.5的概率将每个隐层神经元的输出设置为零。dropout强迫一个神经单元,和随机挑选出来的其他神经单元共同工作,消除减弱了神经元节点间的联合适应性,增强了泛化能力

到目前为止,仍然没有为什么dropout可以减小过拟合的公认定义。认可度较高的一种说法是:dropout强迫一个神经单元,和随机挑选出来的其他神经单元共同工作,消除减弱了神经元节点间的联合适应性,增强了泛化能力。类似于有性繁殖的方式不仅仅可以将优秀的基因传下来,还可以降低基因之间的联合适应性,使得复杂的大段大段基因联合适应性变成比较小的一个一个小段基因的联合适应性。

RGB通道,成倍增加已有主成分,其比例大小为对应特征值乘以一个从均值为0,标准差为0.1的高斯分布中提取的随机变量。

对于实验过程中的训练细节,使用随机梯度下降法(SGD)训练模型,用均值为0方差为0.01的高斯随机变量初始化超参数,在所有层上使用相同的学习率。

Momentum: 对传统SGD增加了动量这个观点,来解决传统SGD的一些问题,例如优化过程非常不平滑或者梯度下降很低效的时候

weight decay: 可以理解为是一个L2的正则化项,用在优化算法上而不是模型上

 至于文章的实验结果,如果所示,是挑选的一些测试集图片,从图片下的柱状图和标签可以理解到,分类任务是怎样操作的以及网络是怎样工作的,

神经网络一直被人诟病的一个问题就是网络自身不知道他的内部到底训练了一个什么东西,这些图片和标签展示出了最后4096维的向量的语义信息,可以说在一定程度上证明了神经网络内部可以读取到一定的特征信息。

这张ppt的图片里,第一列是五幅不同的测试图像,后面几列展示的信息,简单来说可以理解为倒数第二层提取出的特征向量,与测试图像的语义信息最相似的几个图像。可以说明alexnet在最后二层输出的特征,语义空间里面表现的非常好。

这两张表格是alexnet做分类任务与在他之前最好的模型的对比以及一些数据,可以看到无论是top1还是top5alexnet都下降了10%以上,具体原因在之前已经讲的非常清楚了,这里不做详细解释了

Top-1正确标记与模型输出的最佳标记不同的样本数/总样本数;top-5正确标记与模型输出的最佳标记不同的样本数/总样本数,AlexNet比往年两个误差率均减少了10%左右)

在最后这篇文章做了一个讨论,他认为网络的深度很重要,

并且,在Alexnet网络提出之前有监督学习打不过无监督学习,但是在Alexnet提出之后,引起了有监督学习的热潮,直到最新的语言模型bert的提出,才慢慢的将人们又拉回了无监督学习。

最后文章提出想将更大更深的神经网络应用到video上,但是因为video计算量非常大,且有时序信息,在现在来看发展也是比较慢的

(这一点现在看来没那么准确,因为少一层导致准确率下降也有可能是因为参数没找好,找好参数也可以达到之前的准确率的,所以现在来看,深度和宽度都很重要。

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值