HBU_神经网络与深度学习 作业7 卷积神经网络

目录

  • 写在前面的一些内容
  • 习题5-2
  • 习题5-3
  • 习题5-4
  • 习题5-7
  • EX
  • 总结

写在前面的一些内容

本次习题来源于 神经网络与深度学习 pdf电子书的第142页(对应纸质版第127页)的习题5-2、5-3、5-4和5-7,具体内容详见 NNDL 作业7 。
水平有限,难免有误,如有错漏之处敬请指正。

习题5-2

证明宽卷积具有交换性,即公式 r o t 180 ( W ) ⊗ ~ X = r o t 180 ( X ) ⊗ W ~ rot180(\boldsymbol{W}) \tilde{\otimes} \boldsymbol{X} = rot180(\boldsymbol{X}) \otimes \tilde{\boldsymbol{W}} rot180(W)~X=rot180(X)W~

首先由宽卷积定义可得:
y = r o t 180 ( W ) ⊗ ~ X = r o t 180 ( W ) ⊗ X ~ y=rot180(\boldsymbol{W}) \tilde{\otimes} \boldsymbol{X} = rot180(\boldsymbol{W})\otimes\tilde{\boldsymbol{X}} y=rot180(W)~X=rot180(W)X~由卷积的交换律可得:
y = r o t 180 ( W ) ⊗ X ~ = X ~ ⊗ r o t 180 ( W ) y=rot180(\boldsymbol{W}) \otimes \tilde{\boldsymbol{X}} = \tilde{\boldsymbol{X}} \otimes rot180(\boldsymbol{W}) y=rot180(W)X~=X~rot180(W)这样计算得到的特征图矩阵中其中一个通道的其中一个值为:
y i j = X ~ ⊗ r o t 180 ( W ) = ∑ u = 1 U ∑ v = 1 V x i − 1 + u , j − 1 + v ⋅ w u , v y_{ij} = \tilde{\boldsymbol{X}} \otimes rot180(\boldsymbol{W}) = \sum_{u=1}^U \sum_{v=1}^V x_{i-1+u,j-1+v} \cdot w_{u,v} yij=X~rot180(W)=u=1Uv=1Vxi1+u,j1+vwu,v其中 U , V U,V U,V W \boldsymbol{W} W的行数和列数。(翻转180°后矩阵长宽不变)

同理可得 y i j ′ = r o t 180 ( X ) ⊗ W ~ = ∑ a = 1 A ∑ b = 1 B x a , b ′ ⋅ w i − 1 + a , j − 1 + b ′ y'_{ij}=rot180(\boldsymbol{X}) \otimes \tilde{\boldsymbol{W}} = \sum_{a=1}^A \sum_{b=1}^B x'_{a,b} \cdot w'_{i-1+a,j-1+b} yij=rot180(X)W~=a=1Ab=1Bxa,bwi1+a,j1+b其中 A , B A,B A,B X \boldsymbol{X} X的行数和列数。

要使题给等式成立,则 y i j = y i j ′ y_{ij}=y'_{ij} yij=yij
X ~ \tilde{\boldsymbol{X}} X~的行数为,列数为

在上列两个式子中,参数满足:
a = i − u + 1 b = j − v + 1 a=i-u+1 \\ b=j-v+1 a=iu+1b=jv+1 u = a − i + 1 v = y − j + 1 u=a-i+1 \\ v=y-j+1 u=ai+1v=yj+1
y i j = r o t 180 ( X ) ⊗ W ~ = ∑ a = i − u + 1 U + i − 1 ∑ b = j − v + 1 V + j − 1 x a , b ⋅ w a − i + 1 , b − j + 1 y_{ij}=rot180(\boldsymbol{X}) \otimes \tilde{\boldsymbol{W}} = \sum_{a=i-u+1}^{U+i-1} \sum_{b=j-v+1}^{V+j-1} x_{a,b} \cdot w_{a-i+1,b-j+1} yij=rot180(X)W~=a=iu+1U+i1b=jv+1V+j1xa,bwai+1,bj+1根据宽卷积的性质,宽卷积仅是进行了X的零填充,可以发现该等式仍然成立,故宽卷积也符合可交换性。

习题5-3

分析卷积神经网络中用 1 × 1 1\times1 1×1的卷积核的作用。

1. 升降维

通过控制卷积核的通道数来对特征图的通道数进行控制,以此实现升降维。

2. 增加网络深度

保证特征图的尺寸相同的情况下用 1 × 1 1\times1 1×1卷积核可以多卷积一次,这样能再应用一次卷积函数,增加非线性。

习题5-4

对于一个输入为 100 × 100 × 256 100 \times 100 \times 256 100×100×256的特征映射组,使用 3 × 3 3 \times 3 3×3的卷积核,输出为 100 × 100 × 256 100 \times 100 \times 256 100×100×256的特征映射组的卷积层,求其时间和空间复杂度。
如果引入一个 1 × 1 1 \times 1 1×1卷积核,先得到 100 × 100 × 64 100 \times 100 \times 64 100×100×64的特征映射,再进行 3 × 3 3 \times 3 3×3的卷积,得到 100 × 100 × 256 100 \times 100 \times 256 100×100×256的特征映射组,求其时间和空间复杂度。

单个卷积层时间复杂度的计算
T i m e ∼ O ( M 2 ⋅ K 2 ⋅ C i n ⋅ C o u t ) \bold{Time} \sim O(M^2 \cdot K^2 \cdot C_{in} \cdot C_{out}) TimeO(M2K2CinCout) M M M:每个卷积核输出特征图的边长
K K K:每个卷积核的边长
C l C_l Cl:每个卷积核的通道数,即输入通道数,即上一层的输出通道数
C o u t C_{out} Cout:本卷积层具有的卷积核个数,即输出通道数

卷积神经网络整体时间复杂度的计算
T i m e ∼ O ( ∑ l = 1 D M l 2 ⋅ K l 2 ⋅ C l − 1 ⋅ C l ) \bold{Time} \sim O(\sum_{l=1}^D M^2_l \cdot K^2_l \cdot C_{l-1} \cdot C_l) TimeO(l=1DMl2Kl2Cl1Cl) D D D:神经网络所具有的卷积层数,即网络的深度。
l l l:神经网络的第 l l l个卷积层
C l C_l Cl:神经网络第 l l l个卷积层的输出通道数 C o u t C_{out} Cout,即该层的卷积核个数
C o u t C_{out} Cout
对于第 l l l个卷积层而言,其输入通道数 C i n C_{in} Cin就是第 ( l − 1 ) (l-1) (l1)个卷积层的输出通道数

空间复杂度计算

包括两个部分:总参数量和各层输出特征图
S p a c e ∼ O ( ∑ l = 1 D K l 2 ⋅ C l − 1 ⋅ C l + ∑ l = 1 D M 2 ⋅ C l ) \bold{Space} \sim O(\sum_{l=1}^D K^2_l \cdot C_{l-1} \cdot C_l + \sum_{l=1}^D M^2 \cdot C_l) SpaceO(l=1DKl2Cl1Cl+l=1DM2Cl)参数量( ∑ l = 1 D K l 2 ⋅ C l − 1 ⋅ C l \sum_{l=1}^D K^2_l \cdot C_{l-1} \cdot C_l l=1DKl2Cl1Cl):模型所有带参数的层的权重参数总量(即模型体积)
特征图( ∑ l = 1 D M 2 ⋅ C l \sum_{l=1}^D M^2 \cdot C_l l=1DM2Cl):模型再实时运行过程中每层所计算出的输出特征图大小

根据上述内容可以计算得出时间复杂度和空间复杂度。

①时间复杂度: 256 × 100 × 100 × 256 × 3 × 3 = 5   898   240   000 256×100×100×256×3×3=5\ 898\ 240\ 000 256×100×100×256×3×3=5 898 240 000

空间复杂度: 256 × 100 × 100 = 2   560   000 256×100×100=2\ 560\ 000 256×100×100=2 560 000

②时间复杂度: 64 × 100 × 100 × 256 + 256 × 100 × 100 × 64 × 3 × 3 = 1   638   400   000 64×100×100×256+256×100×100×64×3×3=1\ 638\ 400\ 000 64×100×100×256+256×100×100×64×3×3=1 638 400 000

空间复杂度: 64 × 100 × 100 + 256 × 100 × 100 = 3   200   000 64×100×100+256×100×100=3\ 200\ 000 64×100×100+256×100×100=3 200 000

习题5-7

忽略激活函数,分析卷积网络中卷积层的前向计算和反向传播是一种转置关系。

卷积层的前向计算和反向传播的公式如下:
δ ( l , d ) = f l ′ ( Z ( l , d ) ) ⊙ P ∑ P = 1 P ( r o t 180 ( W ( l + 1 , p , d ) ) ⊗ δ ( l + 1 , p ) ) \delta^ {(l,d)} = f_l'(\boldsymbol{Z}^{(l,d)}) \odot P \sum^P_{P=1} (rot180(\boldsymbol{W}^{(l+1,p,d)}) \otimes \delta^{(l+1,p)}) δ(l,d)=fl(Z(l,d))PP=1P(rot180(W(l+1,p,d))δ(l+1,p))则:
l l l层的净输入为 z ( l + 1 ) = W ( l + 1 ) z ( l ) z^{(l+1)}=W^{(l+1)}z^{(l)} z(l+1)=W(l+1)z(l),反向传播的误差项为 δ ( l ) = ( W ( l + 1 ) ) T δ ( l + 1 ) \delta^{(l)}=(W^{(l+1)})^T\delta^{(l+1)} δ(l)=(W(l+1))Tδ(l+1)
l + 1 l+1 l+1层的净输入为 z ( l + 1 ) = ( W ( l + 1 ) ) T z ( l + 1 ) z^{(l+1)}=(W^{(l+1)})^Tz^{(l+1)} z(l+1)=(W(l+1))Tz(l+1),反向传播的误差项为 δ ( l + 1 ) = W ( l + 1 ) δ ( l ) \delta^{(l+1)}=W^{(l+1)}\delta^{(l)} δ(l+1)=W(l+1)δ(l)
显然,忽略激活函数下前向计算和反向传播是一种转置关系。

EX

代码实现反向传播算子。

在前面实验里的卷积算子塞一个反向传播的函数就行了。

def backward(self, grad_sum):
        grad_sum = grad_sum.transpose(1, 2, 3, 0).reshape(self.out_channels, -1)
        grad_w = grad_sum.dot(self.X_col.T).reshape(self.W.shape)
        grad_bias = np.sum(_grad_sum, axis=1, keepdims=True)

        self.W = self.W_opt.update(self.W, grad_w)
        self.bias = self.bias_opt.update(self.bias, grad_bias)

        grad_sum = self.W_col.T.dot(grad_sum)
        grad_sum = column2image(grad_sum,
                                self._input.shape,
                                self.kernel_size,
                                stride=self.stride,
                                output_shape=self.padding)

        return grad_sum

总结

总的来说,收益最大的是习题5-2。在思考过程中一直在考虑如何将问题一般化。思考很久没有进展,通过同学的讨论得到了突破。下次还是用归纳法做结论题吧。

你可能感兴趣的:(python,深度学习,cnn)