目录
习题5-7 忽略激活函数,分析卷积网络中卷积层的前向计算和反向传播(公式(5.39))是一种转置关系。
【选做】设计简易CNN模型,分别用Numpy、Python实现卷积层和池化层的反向传播算子,并代入数值测试。
习题5-2 证明宽卷积具有交换性,即公式(5.13)。
证明:
习题5-3 分析卷积神经网络中用1x1的卷积核的作用。
(一)每个1×1的卷积核都试图提取基于相同像素位置的特征的融合表达。可以实现特征升维或降维的目的;
由于 1×1并不会改变 height 和 width,改变通道的第一个最直观的结果,就是可以将原本的数据量进行增加或者减少。这里看其他文章或者博客中都称之为升维、降维。但我觉得维度并没有改变,改变的只是 height × width × channels 中的 channels 这一个维度的大小而已。
(二)1×1的卷积核可以在保持特征图不变的情况下大幅增加非线性特性;
1*1卷积核,可以在保持feature map尺度不变的(即不损失分辨率)的前提下大幅增加非线性特性(利用后接的非线性激活函数),把网络做的很deep。
(三)将位于每个点位上的所有通道特征进行卷积,实现跨通道信息交互;
例子:使用1x1卷积核,实现降维和升维的操作其实就是通道间信息的线性组合变化,3x3,64通道的卷积核后面添加一个1x1,28通道的卷积核,就变成了3x3,28通道的卷积核,原来的64个通道就可以理解为跨通道线性组合变成了28通道,这就是通道间的信息交互。
(四)减小计算量,降低时间复杂度。
以GoogLeNet的3a模块为例,输入的feature map是28×28×192,3a模块中1×1卷积通道为64,3×3卷积通道为128,5×5卷积通道为32,如果是左图结构,那么卷积核参数为1×1×192×64+3×3×192×128+5×5×192×32,而右图对3×3和5×5卷积层前分别加入了通道数为96和16的1×1卷积层,这样卷积核参数就变成了1×1×192×64+(1×1×192×96+3×3×96×128)+(1×1×192×16+5×5×16×32),参数大约减少到原来的三分之一。
习题5-4 对于一个输入为100x100x256的特征映射组,使用3x3的卷积核,输出为100x100x256的特征映射组的卷积层,求其时间和空间复杂度。如果引入一个1x1卷积核,先得到100x100x64的特征映射,再进行3x3的卷积,得到100x100x256的特征映射组,求其时间和空间复杂度。
情况一:=100;
=3;
=256 ;
=256
时间复杂度一:100×100×3×3×256×256 = 5898240000
空间复杂度一:100×100×256 = 2560000
情况二:=100;
=1;
=3;
=256;
=64;
=64;
=256
时间复杂度二:100×100×1×1×256×64 + 100×100×3×3×64×256 = 1638400000
空间复杂度二:100×100×64 + 100×100×256 = 3200000