本文主要是對傳統的卷積網絡進行改進,關鍵點有兩個:
第一:mlpconv
第二:全局平均池化
傳統的cnn可以看做是廣義線性模型GLM,所以cnn覺得潛在的概念都是線性可分的。(但是cnn+非線性激活不是能模擬出非線性嗎?)但是一些數據是非線性、多維度的,因此提出將卷積替換爲更多小部分的非線性函數,從而提升模型的抽象能力。
作者通過mlpconv模擬多部分非線性函數。具體結構如下圖:
下面的結構是一個mplconv:
layers {
bottom: "data"
top: "conv1"
name: "conv1"
type: CONVOLUTION
blobs_lr: 1
blobs_lr: 2
weight_decay: 1
weight_decay: 0
convolution_param {
num_output: 96
kernel_size: 11
stride: 4
weight_filler {
type: "gaussian"
mean: 0
std: 0.01
}
bias_filler {
type: "constant"
value: 0
}
}
}
layers {
bottom: "conv1"
top: "conv1"
name: "relu0"
type: RELU
}
layers {
bottom: "conv1"
top: "cccp1"
name: "cccp1"
type: CONVOLUTION
blobs_lr: 1
blobs_lr: 2
weight_decay: 1
weight_decay: 0
convolution_param {
num_output: 96
kernel_size: 1
stride: 1
weight_filler {
type: "gaussian"
mean: 0
std: 0.05
}
bias_filler {
type: "constant"
value: 0
}
}
}
layers {
bottom: "cccp1"
top: "cccp1"
name: "relu1"
type: RELU
}
layers {
bottom: "cccp1"
top: "cccp2"
name: "cccp2"
type: CONVOLUTION
blobs_lr: 1
blobs_lr: 2
weight_decay: 1
weight_decay: 0
convolution_param {
num_output: 96
kernel_size: 1
stride: 1
weight_filler {
type: "gaussian"
mean: 0
std: 0.05
}
bias_filler {
type: "constant"
value: 0
}
}
}
layers {
bottom: "cccp2"
top: "cccp2"
name: "relu2"
type: RELU
}
全局平均池化用於替代傳統的fc層,由於在傳統的卷積網絡中,卷積層提取特徵,全連接層用於將卷積轉爲分類,而這過程相當一黑盒部分,還有過擬合風險。因此本文提出了全局平均池化,舉個例子,通過之前的各種卷積或者mlpconv生成了1000x6x6的feature map,其中1000爲特徵層的維數,6x6爲feature map的大小。如果將一個feature map看做一種類別對應的特徵圖,則直接將feature map池化爲一個點,再加上softmax就可以分類。(這種思想相比於fc比較形象,但是中間也有很多難以解釋的事情,╮(╯▽╰)╭)
層結構如下:
layers {
bottom: "cccp8"
top: "pool4"
name: "pool4"
type: POOLING
pooling_param {
pool: AVE
kernel_size: 6
stride: 1
}
}