感谢大佬的文章《Convolutional Neural Networks backpropagation: from intuition to derivation》,写的很清楚!
在这篇文章中,我们将跟随知乎文章《卷积神经网络(CNN)反向传播算法推导·南柯一梦宁沉沦》来学习Convolution的Backpropagation计算;
nn.Conv2d()
CNN中的卷积实际上是点积互相关(Dot Products);
在进行推导之前,我们需要先对符号进行定义,定义第 l l l层的输出为
z x , y l = W l ∗ V + b x , y l z_{x,y}^{l} = \bm{W}^{l}\ast \bm{V} + b_{x,y}^{l} zx,yl=Wl∗V+bx,yl
维数相容原则是可以让大家推测矩阵函数对应导数的技巧,
维数相容原则:
- 使用实数函数的求导法则求导,如果求导结果不能相容,则对不自洽的结果做维度相容的调整,使其维度能符合矩阵乘法运算的定义
- 维度相容调整:通过前后换序、转置使算式满足矩阵乘法的要求,且对于实映射函数 f ( x ) , f ( x ) ∈ R 1 f(x), f(x) \in R^1 f(x),f(x)∈R1需满足:
当 x ∈ R m × n x \in R^{m \times n} x∈Rm×n时,那么 ∂ f ( x ) ∂ x ∈ R m × n \frac{\partial f(x)}{\partial x} \in R^{m \times n} ∂x∂f(x)∈Rm×n
接下来介绍一个使用维数相容原则快速猜测复合函数导数算式的例子:
已知, J = ( X ω − y ) T ( X ω − y ) = ∥ X ω − y ∥ 2 J=(\boldsymbol{X} \boldsymbol{\omega} - y)^{T}(\boldsymbol{X} \boldsymbol{\omega} - y) = \left \| \boldsymbol{X} \boldsymbol{\omega} - y \right \|^2 J=(Xω−y)T(Xω−y)=∥Xω−y∥2,其中 X ∈ R m × n , ω ∈ R n × 1 , y ∈ R m × 1 \boldsymbol{X} \in R^{m \times n}, \boldsymbol{\omega} \in R^{n\times1}, y \in R^{m\times1} X∈Rm×n,ω∈Rn×1,y∈Rm×1。
求: ∂ J ∂ X , ∂ J ∂ ω , ∂ J ∂ y \frac{\partial J}{\partial \boldsymbol{X}}, \frac{\partial J}{\partial \boldsymbol{\omega}}, \frac{\partial J}{\partial y} ∂X∂J,∂ω∂J,∂y∂J。
step1:将所有变量当做实数来求导,(上式化为), J = ( X ω − y ) 2 J=(X\omega - y)^2 J=(Xω−y)2,
根据复合函数求导法则有 ∂ J ∂ X = 2 ( X ω − y ) ω , ∂ J ∂ ω = 2 ( X ω − y ) X , ∂ J ∂ y = − 2 ( X ω − y ) \frac{\partial J}{\partial X}=2(X\omega - y)\omega, \frac{\partial J}{\partial \omega}=2(X\omega - y)X, \frac{\partial J}{\partial y}= -2(X\omega - y) ∂X∂J=2(Xω−y)ω,∂ω∂J=2(Xω−y)X,∂y∂J=−2(Xω−y)
接下来我们来看看维度是否是自洽的,
∂ J ∂ X = 2 ( X ω − y ) ω \frac{\partial J}{\partial \boldsymbol{X}}=2(\boldsymbol{X} \boldsymbol{\omega} - \boldsymbol{y})\boldsymbol{\omega} ∂X∂J=2(Xω−y)ω: ( X ω − y ) → m × 1 , ω → n × 1 (\boldsymbol{X} \boldsymbol{\omega} - \boldsymbol{y})\rightarrow m \times 1, \boldsymbol{\omega} \rightarrow n \times 1 (Xω−y)→m×1,ω→n×1,不自洽
∂ J ∂ ω = 2 ( X ω − y ) X \frac{\partial J}{\partial \boldsymbol{\omega}}=2(\boldsymbol{X} \boldsymbol{\omega} - \boldsymbol{y})\boldsymbol{X} ∂ω∂J=2(Xω−y)X: ( X ω − y ) → m × 1 , X → m × n (\boldsymbol{X} \boldsymbol{\omega} - \boldsymbol{y})\rightarrow m \times 1, \boldsymbol{X} \rightarrow m \times n (Xω−y)→m×1,X→m×n,不自洽
∂ J ∂ y = − 2 ( X ω − y ) \frac{\partial J}{\partial \boldsymbol{y}}= -2(\boldsymbol{X}\boldsymbol{\omega} - \boldsymbol{y}) ∂y∂J=−2(Xω−y): ( X ω − y ) → m × 1 (\boldsymbol{X} \boldsymbol{\omega} - \boldsymbol{y})\rightarrow m \times 1 (Xω−y)→m×1,自洽
step2:根据step1的结果,依据维数相容原则做调整:前后换序、转置,
依据维数相容原则 ∂ J ∂ X ∈ R m × n \frac{\partial J}{\partial \boldsymbol{X}} \in R^{m \times n} ∂X∂J∈Rm×n,但 ∂ J ∂ X = 2 ( X ω − y ) ω \frac{\partial J}{\partial \boldsymbol{X}}=2(\boldsymbol{X} \boldsymbol{\omega} - \boldsymbol{y})\boldsymbol{\omega} ∂X∂J=2(Xω−y)ω中 ( X ω − y ) ∈ R m × 1 , ω ∈ R n × n (\boldsymbol{X} \boldsymbol{\omega} - \boldsymbol{y}) \in R^{m \times 1}, \boldsymbol{\omega} \in R^{n \times n} (Xω−y)∈Rm×1,ω∈Rn×n,自然地调整为 ∂ J ∂ X = 2 ( X ω − y ) ω T \frac{\partial J}{\partial \boldsymbol{X}}=2(\boldsymbol{X} \boldsymbol{\omega} - \boldsymbol{y})\boldsymbol{\omega}^T ∂X∂J=2(Xω−y)ωT;
同理: ∂ J ∂ ω ∈ R n × 1 \frac{\partial J}{\partial \boldsymbol{\omega}} \in R^{n\times1} ∂ω∂J∈Rn×1,但 ∂ J ∂ ω = 2 ( X ω − y ) X \frac{\partial J}{\partial \boldsymbol{\omega}}=2(\boldsymbol{X} \boldsymbol{\omega} - \boldsymbol{y})\boldsymbol{X} ∂ω∂J=2(Xω−y)X中, ( X ω − y ) ∈ R m × 1 , X ∈ R m × n (\boldsymbol{X} \boldsymbol{\omega} - \boldsymbol{y}) \in R^{m \times 1}, \boldsymbol{X} \in R^{m \times n} (Xω−y)∈Rm×1,X∈Rm×n,那么通过换序、转置可以得到维数相容的结果 2 X T ( X ω − y ) 2\boldsymbol{X}^T(\boldsymbol{X} \boldsymbol{\omega} - \boldsymbol{y}) 2XT(Xω−y)。