初探VGG网络 – Python量化投资

初探VGG网络

好几天没有开电脑学习,是要自律一点啦小李!今天叙述一下 之前常常看到但却不是很懂的VGG网络模型。
——————————————————————————————

VGG网络模型

VGG即Visual Geometry Group主要工作是证明了增加网络的深度能够在一定程度上影响网络最终的性能。VGG主要有两种结构,分别是VGG16和VGG19,两者并没有本质上的区别,只是网络深度不一样

直接上图,以VGG16为例(如下所示)


通过图片来具体看一下它的工作流程即( how work?)
①输入224x224x3的图片,经64个3×3的卷积核作两次卷积+ReLU(激活函数),卷积后的尺寸变为224x224x64
②通过max pooling(最大化池化),池化单元尺寸为2×2(效果为图像尺寸减半),池化后的尺寸变为112x112x64
③经128个3×3的卷积核作两次卷积+ReLU,尺寸变为112x112x128
④通过2×2的max pooling池化,尺寸变为56x56x128
⑤经256个3×3的卷积核作三次卷积+ReLU,尺寸变为56x56x256
⑥通过2×2的max pooling池化,尺寸变为28x28x256
⑦经512个3×3的卷积核作三次卷积+ReLU,尺寸变为28x28x512
⑧通过2×2的max pooling池化,尺寸变为14x14x512
⑨经512个3×3的卷积核作三次卷积+ReLU,尺寸变为14x14x512
⑩通过2×2的max pooling池化,尺寸变为7x7x512
⑪与两层1x1x4096,一层1x1x1000进行全连接(前两组fc,每组都是:fc-relu-dropout。最后一个fc仅有fc。)
⑫通过softmax输出1000个预测结果
综上可以得出:
13个卷积层(含relu)+5个池化(最大池化)+3个全连接层(含relu和dropout)+softmax
【注意算层数时不算maxpool层和softmax层,只算conv层和fc层。】

执行过程:

简化详解如下

更加形象化的VGG网络,可以使用经典卷积神经网络(CNN)结构可视化工具来看VGG网络
后一个强推/共40

接下来就分析VGG网络的特点及优劣。

VGG的特点

首先最明显的特点是:小卷积核
我们可以看到在VGG网络模型里面,将卷积核全部替换为3×3。

将卷积核变小有什么好处呢?

-首先卷积涉及到计算量,且影响到感受野。
-VGG16相比AlexNet的一个改进是采用连续的几个3×3的卷积核代替AlexNet中的较大卷积核(11×11,7×7,5×5)。对于给定的感受野,采用堆积的小卷积核优于采用大的卷积核,因为多层非线性层可以增加网络深度来保证学习更复杂的模式,而且代价还比较小。
接下来做个解释:
什么是感受野?为什么可以使用2个3×3卷积核可以来代替5X5卷积核?
从直观上讲,感受野就是视觉感受区域的大小。在卷积神经网络中,感受野的定义是卷积神经网络每一层输出的特征图(feature map)上的像素点在原始图像上映射的区域大小。
对于单层卷积网络,其feature map上每个特征点对应原图上的感受野大小等于卷积层滤波器的大小;对于多层卷积网络,可由此逐层往回反馈,通过反复迭代获得原始输入图像中感受野大小,即后面深层的卷积层感受野大小就和之前所有网络层的滤波器大小和步长有关系了,在计算的时候,忽略图像Padding的大小。使用的公式可以表示如下:    
r(i) = (r(i+1) – 1) * stride(i) + c(i)
具体可参考感受野描述

举个例子:见下图,输入的8个元素可以视为feature map的宽或者高,当输入为8个神经元经过三层conv3x3的卷积得到2个神经元。三个网络分别对应stride=1,pad=0的conv3x3、conv5x5和conv7x7的卷积核在3层、1层、1层时的结果。因为这三个网络的输入都是8,也可看出2个3×3的卷积堆叠获得的感受野大小,相当1层5×5的卷积;而3层的3×3卷积堆叠获取到的感受野相当于一个7×7的卷积。
input=8,3层conv3x3后,output=2,等同于1层conv7x7的结果
input=8,2层conv3x3后,output=4,等同于1层conv5x5的结果

【当然还可以用上面的公式逆推:r=(3-1)+3=5 –2个 r=(5-1)+5=7—3个】

刚刚上面叙述的代价小也就是计算量小。在计算量这里,为了突出小卷积核的优势,拿同样conv3x3、conv5x5、conv7x7、conv9x9和conv11x11,在224x224x3的RGB图上(设置pad=1,stride=4,output_channel=96)做卷积,卷积层的参数规模和得到的feature map的大小如下:


从图表可以看出增大的是卷积的计算量,在表格中列出了计算量的公式,最后要乘以2,代表乘加操作。为了尽可能证一致,这里所有卷积核使用的stride均为4,可以看到,conv3x3、conv5x5、conv7x7、conv9x9、conv11x11的计算规模依次为:1600万,4500万,1.4亿、2亿,这种规模下的卷积,虽然参数量增长不大,但是计算量是惊人的。
具体可参考VGG网络模型详解

最大特点分析完后接下来简要说说其他几个:
小池化核
相比AlexNet的3×3的池化核,VGG全部采用2×2的池化核。
通道数多
VGG网络第一层的通道数为64,后面每层都进行了翻倍,最多到512个通道,通道数的增加,使得更多的信息可以被提取出来。
层数更深、特征图更宽
由于卷积核专注于扩大通道数、池化专注于缩小宽和高,使得模型架构上更深更宽的同时,控制了计算量的增加规模。
全连接转卷积
这也是VGG的一个特点,在网络测试阶段将训练阶段的三个全连接替换为三个卷积,使得测试得到的全卷积网络因为没有全连接的限制,因而可以接收任意宽或高为的输入,这在测试阶段很重要。
具体详解可以移步上一个网址。

代码

这里推荐两个库,tensorflow-vgg
快速测试请参考VGG-in TensorFlow

资料搬运:
一文读懂VGG网络


Ending~

https://www.jianshu.com/p/50e86e6fc933

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
0 条回复 A 作者 M 管理员
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论