笔记——CNN Architectures(cs231n 斯坦福计算机视觉公开课)
常见的 CNN Architectures
LeNet-5
AlexNet
VGG
GoogLeNet
ResNet
一些计算:
全连接层、卷积、池化操作对于维度的改变:
Fully Connected Layer:暴力拉平操作,不管原来是什么样的长宽深。


假设某张图展示了深度学习模型的一个典型架构,在该结构中, 输出单元与深层的全连接层相连, 输出单元针对10个类别分别生成数值表示. 每一行参数向量反映了对应输入特征的重要程度

都表示一个 template,也就是一个类别,比如猫啊狗啊青蛙啊。


如图,左边粉色块状

,右边蓝色块状表示一个卷积核。经过6个

的卷积核后

得到了一个新的 image:

(所以卷积核会改变输入的深度)
卷积操作后的输出:
输入:

滤波器:

个

stride:

输出:



滤波器:

个,一般是

个。
1. LeNet(1998)
架构:
CONV 1 POOL 1 CONV 2 POOL 2 FC 3 FC 4

细节:
卷积核

,stride

池化层

,stride

2. AlexNet (2012,8 layer)
AlexNet作为ImageNet Large Scale Visual Recognition Challenge (ILSVRC)的第一个项目,在基于卷积神经网络的第一名中首次取得突破
架构:
CONV1 - MAX POOL1 - NORM1 - CONV2 - MAX POOL2 - NORM2 - CONV3 - CONV4 - CONV5 - Max POOL3 - FC6 - FC7- FC8

CONV1: 96 个

的卷积核,

CONV1的输入维度: 227x227x3 images
CONV1的输出维度:即

(提示:

)
CONV1需要学习的参数:

(卷积核尺寸:长×宽×深×数量)其中深度由输入图像决定。
每个卷须必须被训练以便适应特定的任务。
因此,在使用96个小滤镜时,请注意每个层所需的学习参数总数即为所有这些小滤镜所包含的所有权重的数量!
Note: Convolutional layer CONV1 alters the output depth, which is determined by the number of convolutional kernels. As each convolutional kernel produces one output.

的 feature map,这些 feature map 是叠放的,构成新的深度。
MAX POOL1:

,

MAX POOL1的输入维度:

MAX POOL1的输出维度:

(相当于对 CONV1层得到的每一个 feature map 做 pooling)
POOL1需要学习的参数:0个
Note:池化层MAX POOL1不会改变输出维度的深度。
具体维度如下:
| INPUT | [227x227x3] | ||
|---|---|---|---|
| CONV1 | [55x55x96] | 96 11x11 filters at stride 4 | pad 0 |
| MAX POOL1 | [27x27x96] | 3x3 filters at stride 2 | |
| NORM1 | [27x27x96] | Normalization layer | |
| CONV2 | [27x27x256] | 256 5x5 filters at stride 1 | pad 2 |
| MAX POOL2 | [13x13x256] | 3x3 filters at stride 2 | |
| NORM2 | [13x13x256] | Normalization layer | |
| CONV3 | [13x13x384] | 384 3x3 filters at stride 1 | pad 1 |
| CONV4 | [13x13x384] | 384 3x3 filters at stride 1 | pad 1 |
| CONV5 | [13x13x256] | 256 3x3 filters at stride 1 | pad 1 |
| MAX POOL3 | [6x6x256] | 3x3 filters at stride 2 | |
| FC6 | [4096] | 4096 neurons | |
| FC7 | [4096] | 4096 neurons | |
| FC8 | [1000] | 1000 neurons (class scores) |
3. VGG(2014,19 layer)
和AlexNet 相比,VGG 采用的是更小的卷积核,网络也更深。

VGG 仅采用 3x3, stride 1,pad 1的卷积层, 2x2, stride 2的最大池化层。
那么就有一个问题就Q:为什么VGG 采用更小的卷积核?
从感受野的等效性、参数数量、网络深度的角度来看
3个

,stride

的卷积核的感受野等于一个

的卷积核,如下图所示(画图果然是理清思路的利器啊利器)。

从感受野的等效性、参数数量、网络深度三个角度来比较,如下表:
| 3x3的卷积核 | 1x1的卷积核 | |
|---|---|---|
| 相同感受野(7个输入) | 3个 | 1个 |
| 参数量 |

|

|
|深度|3|1|
深度越深,就加入了更多的非线性,大概对神经网络来说是很好的。
4. GoogLeNet(2014,22 layer)

无全连接层
有两种 inception module


通过叠加inception module实现网络层数的加深,并且增加了两组辅助分类模块
待解决的问题汇总:
Q1:LeNet、AlexNet、GoogleNet等模型的特点是其深度逐渐增加,在设计参数数量相对较少的情况下,在足够深度下能否使性能得到显著提升呢?
Q2:什么问题是卷积神经网络解决不了的?
Q3:Auxiliary classifier 如何训练?
Q4:当深度足够深入的时候,Auxiliary classifier旨在解决什么问题?是否有其他替代方法同样能够达到预期的效果?
Q5:当网络足够深时,则可以用单一层全连接层来实现其功能;那么全连接层与卷积层是否存在作用上的重叠呢?
Q6:深度和架构设计对分类效果的预测贡献比重是多少?
Q6.1:探讨为何 GoogleNet 深度更高却参数规模反而较小的同时仍能实现更好的分类效果?其主要原因是深度提升带来的额外优势吗?进一步而言 GoogleNet 的网络架构在分类任务中起到了多大程度的影响?
Q7.1:ResNet 为什么设计得如此之深?较浅层的效果如何?深度与残差对整体效果的贡献比例如何?
Q8:感觉持续不断地构建新的网络体系、深化层级结构往往能带来更好的成效;具体机制是什么?它们之间存在哪些共同点与差异?
5. ResNet
持续更新中......
