2017CS231n笔记_S5卷积神经网络

目录

S5.1历史

S5.2卷积和池化


S5.1历史

神经网络历史

  • 1957年,Frank RosenBlatt发明了第一代感知机器,首次实现了感知器算法。
  • 1960年,Windrow和Hoff发明了Adaline/Madaline,首次将线性层叠加,整合为多层感知器网络。
  • 1986年,Rumelhart首次提出反向传播算法。接着链式法则,更新算法才慢慢出现。
  • 2006年,Hinton和Salakhutdinov合写了一篇论文《Reinvigorated research in Deep Learning》,论文中表明深度神经网络可以高效地训练。
  • 2012年,Geoff. Hinton组利用深度神经网络进行声学建模和语音识别。Alex Krizhevsky提出卷积神经网络AlexNet。该网络在ImageNet分类大赛中取得了惊人的成绩。在此之后,卷积网络(ConvNets)逐渐得到了广泛应用。 

卷积神经网络历史

  • 1950s,Hubel和Wiesel在猫上做了实验,试图弄清楚神经元在视觉皮层的工作原理。
  • 1980年,神经认知机(一种网络框架模型)被提出,该架构首次把Hubel和Wiesel发现的简单和复杂细胞概念形成实例。
  • 1998年,LeCun等人首次应用反向传播和基于梯度的学习方法来训练卷积神经网络。相关论文《Gradient-based learning applied to document recognition》。
  •  Alex Krizhevsky提出了一种现代化的卷积神经网络AlexNet。相关论文《ImageNet Classification with Deep Convolutional Neural Networks》。

卷积神经网络结构

CNN(Convolutional Neural Networks)能够保留输入的空间结构。下图是典型的CNN结构。

卷积神经网络应用

卷积网络(ConvNets)被广泛应用。例如图像检索,图像分类,目标检测;图像分割;自动驾驶汽车领域;人脸识别;视频分类;姿势识别;游戏领域;强化学习;医学图像的解释和诊断;星系分类;路标识别;图像描述;DeepDream等等。


S5.2卷积和池化

卷积

卷积输入:1.图像x,其形状为(H,W,D)。其中W,H为x的长宽,D为x的深度。2.卷积核filter,其形状为(Hf,Wf,D)。其中Hf,Wf为filter的大小,filter的深度需要与x的深度相等,都为D。filter对应Hf*Wf的感受野(receptive field)。感受野就是输入区域。

卷积操作:将filter在x上进行滑动,计算出每一个空间定位时的点积结果。也就是将filter的每个位置元素和与之对应图像区域region的像素值相乘,即w^{T}x+b,b为偏置。在进行卷积操作时,还需要设置步长stride,选择是否选择填充,使用哪种填充方式,填充值的个数npad等等。

卷积输出:假设W和H相等,即x的形状为(H,H,D)。假设Hf和Wf相等,即filter的形状为(Hf,Hf,D)。则卷积输出y如下图所示。

是否填充 输出y的shape
不进行填充 (\frac{(H-Hf)}{stride}+1,\frac{(H-Hf)}{stride}+1,1)
进行填充 (H,H,1)/(\frac{(H+npad*2-Hf)}{stride}+1,\frac{(H+npad*2-Hf)}{stride}+1,1)

填充:一般情况下,为了使得输出和输入的大小相同,在进行卷积操作时会对图像做填充。如果不进行填充,卷积网络中输入图像的尺寸会迅速缩小(例如在后面的图中,尺寸从32变为28,再降低到24)。这种情况是不好的,因为会损失一些信息。而且,每次图像变小,其边角的信息会丢的更多。在进行填充时,可以使用0填充,也可以使用边缘的像素进行填充。当stride等于1,Hf和Wf相等(卷积网络中这两个值通常都相等)时,为了保证输入和输出大小相同,填充值的个数npad应该设置为(Hf-1)/2,具体的数据对应如下所示:

卷积核Hf*Wf 填充值的个数npad
3*3 1
5*5 2
7*7 3

卷积操作的例子:当输入数据x(32,32,3),filter(5,5,3),无填充,stride为1时,输出y的shape为(28,28,1),如下图所示。

卷积层

该层不关注所输入图片的全部,而是关注图像空间的一个局部区域,能够保存输入数据的空间结构。

该层的输入:图像数据集X(N,H,W,D)。N为样本的个数,N和W是图像的大小,D是图像的深度。

该层的权重W:一组卷积核filters,其形状为(Hf,Wf,D,Num)。Hf和Wf是卷积核的长宽大小。D是卷积核的深度,与输入数据的深度相等。Num为卷积核的个数。

该层的操作:卷积层使用多个卷积核,因为每个卷积核filter(Hf,Wf,D)都可以从输入数据上得到一种特殊的模式或概念,因此会有一组卷积核。具体操作是,每个卷积核在输入数据上进行卷积操作,形成一张激活映射图。Num个卷积核会形成Num张激活映射图。在进行卷积时,需设置步长stride,选择是否填充,使用哪种填充方式。

该层的输出:假设W和H相等,即X的形状为(N,H,H,D)。假设Hf和Wf相等,即filters的形状为(N,Hf,Hf,D)。则卷积输出Y如下图所示。

是否填充 输出Y的shape
不进行填充 (N,\frac{(H-Hf)}{stride}+1,\frac{(H-Hf)}{stride}+1,Num)
进行填充 (N,H,H,Num)
(N,\frac{(H+npad*2-Hf)}{stride}+1,\frac{(H+npad*2-Hf)}{stride}+1,Num)

该层的可训练参数个数:每个卷积核有(Hf*Wf*D+1)个参数,其中1为偏置。有Num个卷积核,因此该层有(Hf*Wf*D+1)*Num个参数。

单个卷积层的例子:其中输入数据X为(1,32,32,3),W为(5,5,3,6)的卷积核。步长为1,不填充,则该层输出为(1,28,28,6)。如下图所示。

多个卷积层的例子:在卷积网络中,多个卷积网络会进行堆叠,在每层卷积之后,会有Relu激活层对其输出进行处理,如下图所示。其中输入数据X为(1,32,32,3)。

池化

池化是指先对输入数据进行分区,然后在各个区域中进行某些操作得到一个值,使用这个值来代替该区域。操作有求区域最大值或者求区域平均值等。因此池化有最大池化,平均池化等。二维图片上的最大池化操作如下图所示。池化操作需要设置过滤器size和步长stride。常见的参数设置有size为2*2,stride为2;或者size为3*3,stride为3。在进行池化时,需要设置strde。大部分情况下,不同区域之间不会互相重叠。该层的

池化层

卷积神经网络中常使用池化层。池化层是指在该层中对数据进行池化操作。使用池化层的原因有二。第一是对数据进行池化能够降低激活映射的维度,使得更容易操作,因此池化层也可以看作对输入数据的降采样操作;第二是池化能够独立地操作每个激活映射一般在进行池化时不进行填充操作。需要注意的是,池化只在X的长宽平面进行,不在X的深度上进行,也就是说,在进行池化操作时X的深度不变。常见的池化层有Max Pooling层和Average Pooling层。Max Pooling对输入数据X进行最大池化操作。Average Pooling对输入数据X进行最大池化操作。

该层的输入:X,其形状为(N,H,W,D)。其中N为样本的个数,N和W是图像的大小,D是图像的深度。

该层需要设置的超参数:大小size和步长stride。同样地,常见的参数设置有size为2*2,stride为2;或者size为3*3,stride为3。在进行池化时,需要设置strde,使得不同区域之间不会互相重叠。

该层的输出:Y,其形状为(N,\frac{(H-s)}{stride}+1, \frac{(W-s)}{stride}+1,D)。假设size为2*2,则公式中的s为2;假设size为3*3,则公式中的s为3。

该层的可训练参数个数:0。

该层的例子:下图是一个池化层的简单例子,其中N=1,H和W=224,D=64。

全连接层

该层的输入:X,其形状为(N,L)。N为输入样本的个数,L为样本的维数。

该层的权重:设分类任务的类别个数为C,则该层权重W的形状为(C,L)。

该层的操作:在该层使用f=Wx函数,则该层的输出/激活值为一个(N,C)的张量。

该层的输出:Y,其形状为(N,C)。

全连接层的例子:如下图所示。其中N为1,L为3072,C为10。

典型的卷积网络

卷积网络(ConvNets)通常由卷积层,池化层和全连接层堆叠而成的,如下图所示。需要注意的是,在卷积层之后常使用激活函数(例如Relu)对其输出进行处理。可以看到下图中每个卷积层之后都使用了Relu激活层。

当ConvNets完成对网络中所有卷积核的学习后,前几层的卷积核一般代表了输入数据的low-level features,比如说一些边缘特征。而对于中间的卷积核,它们得到了Mid-level features,例如角点和斑点等。最后的一些卷积核能够学到了High-level features。这里给出某个ConvNets经过训练后,由每个卷积核生成的一些激活映射图的例子。

ConvNets有两个趋势,第一个趋势是朝更小尺寸卷积核和更深的结构发展;第二个趋势是完全弃用池化层和全连接层,仅保留卷积层。训练卷积网络的演示程序:https://cs.stanford.edu/people/karpathy/convnetjs/demo/cifar10.html。该程序可视化了卷积核和激活映射。


发布了71 篇原创文章 · 获赞 6 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/KKALL1314/article/details/104126621