目录
void
CNN篇
该部分内容包括:
- 卷积核大小选择
- 卷积操作中的计算
- 网络泛化能力
卷积核大小选择
需要注意的是,LeNet-5中的卷积核size为5×5。
卷积核尺寸通常为奇数
- 为了有明确的卷积核中心
- 便于padding,奇数的尺寸可以从图像的两边对称的padding
(1 imes 1)卷积的作用
- 实现信息的跨通道交互和整合
- 对卷积核通道数进行降维和升维,减小参数量
卷积操作的尺寸变化
[egin{aligned}
n_{o u t} &=leftlfloorfrac{n_{i n}+2 p-k}{s}
ight
floor+ 1 \
n_{i n} : & ext { number of input features } \
n_{o u t} : & ext { number of output features } \
k : & ext { convolution kernel size } \
p : & ext { convolution padding size } \
s : & ext { convolution stride size }
end{aligned}
]
当padding设置为SAME的时候,会自动补0;当padding设置为VALID的时候,只使用有效的数据故不会补0。
感受野的计算
[egin{aligned} n_{o u t} &=leftlfloorfrac{n_{i n}+2 p-k}{s}
ight
floor+ 1 \
j_{o u t} &=j_{i n} * s \
r_{o u t} &=r_{i n}+(k-1) * j_{i n} \
ext {start}_{o u t} &=operatorname{start}_{i n}+left(frac{mathrm{k}-1}{2}-mathrm{p}
ight) * j_{i n}
end{aligned}
]
其中(j)是jump,含义是从最开始到现在跳过的连续特征点的数目,也就是从最开始到本层(除去本层)所有stride乘积。
减少卷积层参数量的方法
- 使用堆叠小卷积核代替大卷积核:VGG网络中2个(3 imes 3)的卷积核可以代替1个(5 imes 5)的卷积核
- 使用分离卷积操作:将原本(K imes K imes C)的卷积操作分离为(K imes K imes 1)和(1 imes1 imes C)的两部分操作
- 添加(1 imes 1)的卷积操作:与分离卷积类似,但是通道数可变,在(K imes K imes C_1)卷积前添加(1 imes1 imes C_2)的卷积核(满足(C_2 <C_1))
- 在卷积层前使用池化操作:池化可以降低卷积层的输入特征维度
提高CNN泛化能力
- 数据:
使用更多数据;
调整输入数据的分布使其尽量均匀:如BN层;
数据增强,如平移、旋转、裁剪、加噪声等; - batch size:在相同迭代次数和学习率的条件下,每批次采用更多的数据将有助于模型更好的学习到正确的模式,模型输出结果也会更加稳定;
- 目标函数:
比如L2比L1更能平衡样本作用,提高泛化能力;
添加权重矩阵的惩罚项来正则化; - 网络结构:
浅层增加网络深度,深层减少网络深度;
屏蔽网络节点:如dropout;
Reference
- 【干货】CNN 感受野首次可视化:深入解读及计算指南. https://mp.weixin.qq.com/s?__biz=MzI3MTA0MTk1MA==&mid=2651997001&idx=4&sn=3a0323b421a45e80520a411a3b21fe33