AlexNet的一些参数:
卷积层:5层
全连接层:3层
深度:8层
参数个数:60M
神经元个数:650k
分类数目:1000类
由于当时的显卡容量问题,AlexNet 的60M个参数无法全部放在一张显卡上操作,所以采用了两张显卡分开操作的形式,其中在C3,R1,R2,R3层上出现交互,所谓的交互就是通道的合并,是一种串接操作。
AlexNet的结构图:
AlexNet 网络参数计算
按照公式推算了一下感受野和特征层的大小。
网络层 | 感受野 | 卷积核个数 | 卷积核尺寸 | 步长 | padding | feature_map |
---|---|---|---|---|---|---|
conv | 227*227 | 48*2 | 11*11 *3 | 4 | 2 | 227*227 |
max pooling | 55*55 | 48*2 | 3*3 *3 | 2 | - | 56*56 |
conv | 27*27 | 48*2 | 5*5 *48 | 1 | 2 | 27*27 |
max pooling | 25*25 | 128*2 | 3*3 *48 | 2 | - | 27*27 |
conv | 12*12 | 192*2 | 3*3 *128 | 1 | 1 | 13*13 |
conv | 10*10 | 192*2 | 3*3 *192 | 1 | 1 | 13*13 |
conv | 8*8 | 128*2 | 3*3 *192 | 1 | 1 | 13*13 |
max pooling | 6*6 | 128*2 | 3*3 *128 | 2 | - | 6*6 |
fc | - | 2048*2 | 6*6 *256 | - | - | - |
fc | - | 2048*2 | 1*1 *4096 | - | - | - |
fc | - | 1000 | 1*1 *4096 | - | - | - |
技术
技术创新 | 具体细节 | - | - |
---|---|---|---|
数据增强方法 | 随机裁剪(256-227) | 水平翻转 | 亮度,色彩变化(猫狗) |
激活函数 | Relu代替Sigmoid | 解决较深网络中sigmoid梯度弥散的问题 | |
网络创新 | 在全连接层后使用0.5的dropout | 缓解过拟合的问题 | 网络的收敛速度快了很多 |
- | 重叠pooling窗口 | 使用池化窗口是大小为3×3,步幅为2。在输出尺寸相同的情况下,与使用大小为2×2,步幅为2的非重叠池化窗口相比,重叠池化窗口能够分别将第一名的错误率降低0.4%,第5名的错误率降低0.3% | |
- | 局部响应归一化(LRN) | 对局部神经元创建了竞争的机制,使得其中响应较大的值变得更大,并抑制反馈较小的(强者更强,弱者更弱) | 评价不高,基本弃用 |
训练方式 | 多GPU训练 | 硬件资源有限,将feature maps分给两个GPU分别处理,最后把两个GPU的结果在某些层融合。 |
说明
感受野计算公式(不考虑padding,从下往上反推)
rfsize = (output - 1) * stride + ksize
Feature Map的尺寸计算公式
fm(output)=(input_size + 2 * padding_size − ksize)/stride+1
卷积核的厚度=被卷积的图像的通道数 (卷积后三通道合为1)
卷积核的个数=卷积操作后输出的通道数 (即feature map的通道数)
全连接概念
拿第一层全连接层举例,该操作其实就是用2048个13*13 *256(256是池化层的厚度)的卷积核卷积出来的,对于输入的每一张特征图,都使用一个和图像大小一样的核卷积进行点积运算,这样整幅图就变成了一个数了,如果厚度是256就是那256个核卷积完了之后相加求和。这样就能把一张图高度浓缩成一个数了。
Dense层就是全连接层,其实现的就是下列计算:
output = activation(dot(input, kernel)+bias)
activation是激活函数,kernel即为卷积核即权重w
由于全连接参数实在太多,现在尽量避免全连接,使用全局平均值也就是最后那一层的feature map(最后一层卷积的输出结果),直接求平均值,即全局平均池化。
全局平均池化就是用 feature map 直接表示属于某个类的 confidence map,比如最后输出7* 7* 512,每个feature map中的值加起来求平均值,变为1* 1* 512 。然后把得到的这些平均值,再经过全连接输入softmax中分类, 更重要的是实验效果并不比直接用 FC 差。使用全局平均池化的重点主要是减少计算量,图中第二个计算应为16.
损失函数
权值w与偏置b,是网络中需要学习的参数,也就相当于拟合y=w*x+b中的待求参数w和b。其目标函数即为损失函数loss,网络训练的目标就是通过调整每一个权值Wij使得Loss达到最小,loss函数可以看成是由所有待求权值Wij为自变量的复合函数,会有很多局部最小值,梯度下降法可以求解最小化loss函数的问题。
设loss函数 L(W11,W12,⋯,Wij,⋯,Wmn) ,要求loss函数的梯度,我们需求出loss函数L对每一个权值Wij的偏导数。而BP算法正是用来求解这种多层复合函数的所有变量的偏导数的利器。
参考文献:
[1]: 从AlexNet理解卷积神经网络的一般结构
[2]: 卷积神经网络中全连接层工作原理的解释
[3]: 对于全连接层的理解 全连接层的推导
[4]: 前向传播算法(Forward propagation)与反向传播算法(Back propagation)
[5]: AlexNet 学习笔记
[6]: 对全局平均池化(GAP)过程的理解