卷积神经网络CNN反向传播过程

卷积神经网络CNN反向传播过程

卷积层与池化层是卷积神经网络的独特结构,它们同时也是CNN求导的难点。一来卷积的输入特征分为不同通道,针对每个通道求导使得求导过程变得困难。第二池化层不是传统的函数,如何求导令人十分费解。However,办法总比困难多儿。啦啦啦,现在我们就来总结一下卷积神经网络独特结构的梯度传播方式吧。

池化层的梯度

一开始我认为池化不是一般的函数形式,它真的可导吗?这时候我在心里默念三遍:

可导一定连续,连续不一定可导
可导一定连续,连续不一定可导
可导一定连续,连续不一定可导

于是问题变得更多了:池化连续吗????let us check.

  • 池化函数
    池化的输入是一个多通道特征,为了简单起见,以下我们都只考虑1个通道,因为各个通道信息相互独立,所以这不会影响我们分析结果的普适性。 还记得我们在一般神经网络(DNN)反向传播过程中提到过,针对矩阵函数可以视为多元函数嘛?池化这种在矩阵上进行的操作同样可以视为一种多元函数。Only,这种多元函数的定义域范围收到约束,。以 s i z e = 2 × 2 , s t r i d e = 1 size=2\times2,stride=1 size=2×2,stride=1的最大池化为例。设池化层的输入特征为 W ∈ R 3 × 3 \bf{W}\in\bf{R^{3\times 3}} WR3×3,那么池化的输出就是由许多多元函数映射结果组成的新矩阵 z \bf{z} z:
    z = ( m a x ( W 11 , W 12 , W 21 , W 22 ) m a x ( W 12 , W 13 , W 22 , W 23 ) m a x ( W 21 , W 22 , W 31 , W 32 ) m a x ( W 22 , W 23 , W 32 , W 33 ) )   @ E q . 1 \bf{z}= \left( \begin{array}{ccc} max(W_{11}, W_{12}, W_{21}, W_{22}) & max(W_{12}, W_{13}, W_{22}, W_{23})\\ max(W_{21}, W_{22}, W_{31}, W_{32}) & max(W_{22}, W_{23}, W_{32}, W_{33}) \end{array} \right)\ @Eq.1 z=(max(W11,W12,W21,W22)max(W21,W22,W31,W32)max(W12,W13,W22,W23)max(W22,W23,W32,W33)) @Eq.1
    还记得函数连续性的定义吗?
    lim ⁡ x → → x 0 → f ( x → ) = f ( x 0 → ) s o , lim ⁡ W → → W 0 → max ⁡ ( W → ) = max ⁡ ( W 0 → ) \lim\limits_{\overrightarrow{x}\rightarrow\overrightarrow{x_0}}f(\overrightarrow{x})=f(\overrightarrow{x_0})\\ so,\lim\limits_{\overrightarrow{W}\rightarrow\overrightarrow{W_0}}\max(\overrightarrow{W})=\max(\overrightarrow{W_0}) x x0 limf(x )=f(x0 )so,W W0 limmax(W )=max(W0 )
    clearly, E q . 1 Eq.1 Eq.1是个连续函数。这就是说我们值得好好探讨以下池化函数的可导性质了。

  • 最大池化(Max Pooling)
    最大池化操作可以表示成像 E q . 1 Eq.1 Eq.1这样的函数,this is a 连续函数。However,它可导嘛?首先儿,让我们把 E q . 1 Eq.1 Eq.1展开一下:
    max ⁡ ( x 1 , x 2 , x 3 , x 4 ) = { x 1 x 1 ≥ x 2 , x 3 , x 4 x 2 x 2 ≥ x 1 , x 3 , x 4 x 3 x 3 ≥ x 1 , x 2 , x 4 x 4 x 4 ≥ x 1 , x 2 , x 3 \max(x_{1},x_2,x_3,x_4)= \left\{\begin{aligned} x_1 & & x_1 \geq x_2,x_3,x_4 \\ x_2 & & x_2 \geq x_1,x_3,x_4 \\ x_3 & & x_3 \geq x_1,x_2,x_4 \\ x_4 & & x_4 \geq x_1,x_2,x_3 \end{aligned}\right. max(x1,x2,x3,x4)=x1x2x3x4x1x2,x3,x4x2x1,x3,x4x3x1,x2,x4x4x1,x2,x3
    不难发现,在 x 1 ≠ x 2 ≠ x 3 ≠ x 4 x_1\neq x_2\neq x_3\neq x_4 x1=x2=x3=x4时,最大池化函数的导数是 ( 1 , 0 , 0 , 0 ) (1,0,0,0) (1,0,0,0)或者 ( 0 , 1 , 0 , 0 ) (0,1,0,0) (0,1,0,0)或者 ( 0 , 0 , 1 , 0 ) (0,0,1,0) (0,0,1,0)或者 ( 0 , 0 , 0 , 1 ) (0,0,0,1) (0,0,0,1)。那四个自变量元有相等的情况呢,那当然是2两个1,3个1,4个1组合导数向量咯。那最大池化层传递梯度的时候到底是什么样子的。假设第H层是池化层,最大池化层的激活函数可以视为 a H = f ( z H ) = z H \bf{a^{H}}=f(\bf{z^{H}})=\bf{z^{H}} aH=f(zH)=zH,then损失函数对池化层非激活输入的导数为:
    ∂ ϵ ∂ z H − 1 = ∂ ϵ ∂ Z L ⋅ ∂ Z L ∂ Z L − 1 . . . ∂ Z H + 1 ∂ z H ∂ z H ∂ a H − 1 ∂ a H − 1 ∂ z H − 1 @ E q . 2 \begin{aligned} \frac{\partial\epsilon}{\partial \bf{z^{H-1}}}=\frac{\partial\epsilon}{\partial \bf{Z^{L}}}\cdot\frac{\partial\bf{Z^{L}}}{\partial \bf{Z^{L-1}}}...\frac{\partial\bf{Z^{H+1}}}{\partial \bf{z^{H}}}\frac{\partial\bf{z^{H}}}{\partial \bf{a^{H-1}}}\frac{\partial\bf{a^{H-1}}}{\partial \bf{z^{H-1}}}&&@Eq.2 \end{aligned} zH1ϵ=ZLϵZL1ZL...zHZH+1aH1zHzH1aH1@Eq.2
    其中 p a r t ( x ) part(\bf{x}) part(x)表示对向量的特定区域求导。我们发现,要求得最大池化的导数,必须借助前向传播的信息。现在假设前向传播时,最大池化的参数为 s i z e = 2 × 2 , s t r i d e = 1 size=2\times2,stride=1 size=2×2,stride=1,最大池化层的输入输出分别为.
    a H − 1 = ( 1 0 0 0 0 ‾ 2 ‾ 3 0 ‾ 4 ‾ ) @ E q . 3 a H = Z H = ( 1 2 3 4 ‾ ) \begin{aligned} \bf{a^{H-1}}=\left( \begin{array}{ccc} 1 & 0 & 0\\ \red0 & \red{\underline{0}} & \underline{2}\\ \red3 & \red{\underline{0}} & \underline{4} \end{array} \right)&&@Eq.3\\ \bf{a^{H}}=\bf{Z^{H}}=\left( \begin{array}{ccc} 1&2\\ \red3&\underline{4} \end{array} \right) \end{aligned} aH1=103000024aH=ZH=(1324)@Eq.3
    then clearly we have啦啦啦. 因为输出值 a H \bf{a^{H}} aH红色部分来源于输入值 a H − 1 \bf{a^{H-1}} aH1左下角4个值的最大值,所以输出对输出入求导结果就成下面左下角的样子。
    ∂ z H ∂ a H − 1 = ( 1 0 0 0 0 ‾ 1 ‾ 1 0 ‾ 1 ‾ ) \frac{\partial\bf{z^{H}}}{\partial \bf{a^{H-1}}}= \left( \begin{array}{ccc} 1 & 0 & 0\\ \red0 & \red{\underline{0}} & \underline{1}\\ \red1 & \red{\underline{0}} & \underline{1} \end{array}\right) aH1zH=101000011
    however, 有些细心的同学发现,那输出值 a H \bf{a^{H}} aH右下角下划线部分只有4是最大值,那为啥求导结果下划线部分有2个1呐?这是因为池化还有一个滑动的效果。池化后的输出值实际上是各个维度的最大值结果拼合在一起的。让我们从物理中向量的角度来分析来理解这样一个结果把。滑动最大函数可以表示成如此,其中max函数表示输出模值最大的向量。see, this is why求导结果是这样省的。
    f ( x 0 → ) = m a x ( 0 ⋅ e x → + 0 ⋅ e y → + 0 ⋅ e z → + 2 ⋅ e s → ) + m a x ( 0 ⋅ e z → + 2 ⋅ e s → + 0 ⋅ e h → + 4 ⋅ e o → ) = 2 ⋅ e s → + 4 ⋅ e o → where f(x) denotes sliding max function x 0 → = 0 ⋅ e x → + 0 ⋅ e y → + 0 ⋅ e z → + 2 ⋅ e s → + 0 ⋅ e h → + 4 ⋅ e o → ∂ f ( x 0 → ) ∂ x 0 → = 0 ⋅ e x → + 0 ⋅ e y → + 0 ⋅ e z → + 1 ⋅ e s → ‾ + 0 ⋅ e z → + 0 ⋅ e s → + 0 ⋅ e h → + 1 ⋅ e o → ‾ = 0 ⋅ e x → + 0 ⋅ e y → + 0 ⋅ e z → + 1 ⋅ e s → + 0 ⋅ e h → + 1 ⋅ e o → \begin{aligned} f(\overrightarrow{x_0})&=max(0\cdot\overrightarrow{e_x}+0\cdot\overrightarrow{e_y}+0\cdot\overrightarrow{e_z}+2\cdot\overrightarrow{e_s})+\\ &max(0\cdot\overrightarrow{e_z}+2\cdot\overrightarrow{e_s}+0\cdot\overrightarrow{e_h}+4\cdot\overrightarrow{e_o})\\ &=2\cdot\overrightarrow{e_s}+4\cdot\overrightarrow{e_o}\\ &\text{where f(x) denotes sliding max function}\\ &\overrightarrow{x_0}=0\cdot\overrightarrow{e_x}+0\cdot\overrightarrow{e_y}+0\cdot\overrightarrow{e_z}+2\cdot\overrightarrow{e_s}+0\cdot\overrightarrow{e_h}+4\cdot\overrightarrow{e_o}\\ \frac{\partial f(\overrightarrow{x_0})}{\partial \overrightarrow{x_0}}&=\underline{0\cdot\overrightarrow{e_x}+0\cdot\overrightarrow{e_y}+0\cdot\overrightarrow{e_z}+1\cdot\overrightarrow{e_s}}+\\&\underline{0\cdot\overrightarrow{e_z}+0\cdot\overrightarrow{e_s}+0\cdot\overrightarrow{e_h}+1\cdot\overrightarrow{e_o}}\\ &=0\cdot\overrightarrow{e_x}+0\cdot\overrightarrow{e_y}+0\cdot\overrightarrow{e_z}+1\cdot\overrightarrow{e_s}+0\cdot\overrightarrow{e_h}+1\cdot\overrightarrow{e_o} \end{aligned} f(x0 )x0 f(x0 )=max(0ex +0ey +0ez +2es )+max(0ez +2es +0eh +4eo )=2es +4eo where f(x) denotes sliding max functionx0 =0ex +0ey +0ez +2es +0eh +4eo =0ex +0ey +0ez +1es +0ez +0es +0eh +1eo =0ex +0ey +0ez +1es +0eh +1eo
    搜噶,原来最大池层的导数就是这么得来的,是不是还挺复杂的哈哈哈哈。没有关系,平均池化就容易理解得多啦。

  • 平均池化(Average Pooling)
    最大池化看懂以后,平均池化就更容易理解惹。咱们从一个具体的例子开始入手把。设平均池化的参数为 s i z e = 2 × 2 , s t r i d e = 1 size=2\times2,stride=1 size=2×2,stride=1,平均池化的输入仍然采用最大池化中的输入,即 E q . 3 Eq.3 Eq.3。Now, 平均池化的输出可以写成下面这种形式呢:
    a H = ( 1 4 ⋅ ( a 11 H − 1 + a 12 H − 1 + a 21 H − 1 + a 22 H − 1 ) 1 4 ⋅ ( a 12 H − 1 + a 13 H − 1 + a 22 H − 1 + a 23 H − 1 ) 1 4 ⋅ ( a 21 H − 1 + a 22 H − 1 + a 31 H − 1 + a 32 H − 1 ) 1 4 ⋅ ( a 22 H − 1 + a 23 H − 1 + a 32 H − 1 + a 33 H − 1 ) ) = ( 0.25 0.5 0.75 1.5 ) \begin{aligned} \bf{a^{H}}&=\left( \begin{array}{ccc} \frac{1}{4}\cdot(a^{H-1}_{11}+a^{H-1}_{12}+a^{H-1}_{21}+a^{H-1}_{22}) & \frac{1}{4}\cdot(a^{H-1}_{12}+a^{H-1}_{13}+a^{H-1}_{22}+a^{H-1}_{23})\\ \frac{1}{4}\cdot(a^{H-1}_{21}+a^{H-1}_{22}+a^{H-1}_{31}+a^{H-1}_{32}) & \frac{1}{4}\cdot(a^{H-1}_{22}+a^{H-1}_{23}+a^{H-1}_{32}+a^{H-1}_{33}) \end{array}\right)\\ &=\left( \begin{array}{ccc} 0.25 & 0.5\\ 0.75 & 1.5 \end{array}\right) \end{aligned} aH=(41(a11H1+a12H1+a21H1+a22H1)41(a21H1+a22H1+a31H1+a32H1)41(a12H1+a13H1+a22H1+a23H1)41(a22H1+a23H1+a32H1+a33H1))=(0.250.750.51.5)
    那么求导结果就变成了:
    ∂ z H ∂ a H − 1 = ( 0.25 0.5 0.25 0.5 1 0.5 0.25 0.5 0.25 ) \begin{aligned} \frac{\partial\bf{z^{H}}}{\partial \bf{a^{H-1}}}= \left( \begin{array}{ccc} 0.25 & 0.5 & 0.25\\ 0.5 & 1 & 0.5\\ 0.25 & 0.5 & 0.25 \end{array}\right) \end{aligned} aH1zH=0.250.50.250.510.50.250.50.25
    TUA!nice。

卷积层的梯度

要计算卷积层的梯度,我们也得先把卷积操作定义成卷积函数。卷积操作相对于池化来说是比较好理解的。毕竟数学里面已经有了关于卷积的函数定义。like this
f ( δ ) = ∫ W ( x ) ⋅ I ( δ − x ) d x \begin{aligned} f(\delta) = \int W(x)\cdot I(\delta-x)dx \end{aligned} f(δ)=W(x)I(δx)dx
有了卷积函数的定义,离散化就更加简单了。那么卷积层的非激活输出定义如下(Normally n > > m n>>m n>>m, 不过这里我们不做任何约束):
z H ( x ) = Σ i = 0 m W H ( i ) ⋅ a H − 1 ( x − i ) \begin{aligned} z^{H}(x)=\Sigma_{i=0}^{m}W^{H}(i)\cdot a^{H-1}(x-i) \end{aligned} zH(x)=Σi=0mWH(i)aH1(xi)

卷积层梯度

如果咱们需要更新卷积层参数,那么梯度就计算到卷积层这里,那么非激活输出对参数的梯度是多少儿呢?这就来分析分析。 z H \bf{z^{H}} zH中单个元素对参数矩阵 W H \bf{W^{H}} WH单个元素的导数is like this:
∂ z H ( x ) ∂ W H ( i ) = a H − 1 ( x − i ) \begin{aligned} \frac{\partial z^{H}(x)}{\partial W^{H}(i)}= a^{H-1}(x-i) \end{aligned} WH(i)zH(x)=aH1(xi)
所以呢,参数矩阵就应该是这么大的:
∂ z H ∂ W H = ( a H − 1 ( 0 ) n a n n a n n a n . . . a H − 1 ( 1 ) a H − 1 ( 0 ) n a n n a n . . . a H − 1 ( 2 ) a H − 1 ( 1 ) a H − 1 ( 0 ) n a n . . . . . . ) \begin{aligned} \frac{\partial \bf{z^{H}}}{\partial \bf{W^{H}}}= \left( \begin{array}{ccc} a^{H-1}(0) & nan & nan & nan & ...\\ a^{H-1}(1) & a^{H-1}(0) & nan & nan & ...\\ a^{H-1}(2) & a^{H-1}(1) & a^{H-1}(0) & nan & ...\\ ...\\ \end{array} \right) \end{aligned} WHzH=aH1(0)aH1(1)aH1(2)...nanaH1(0)aH1(1)nannanaH1(0)nannannan.........
according to what we have laerned from DNN backpropagation, we would get sth like this:
∂ ϵ ∂ W H = δ H ⋅ ∂ z H ∂ W H \begin{aligned} \frac{\partial \epsilon}{\partial \bf{W^{H}}}=\bf{\delta^{H}}\cdot \frac{\partial \bf{z^{H}}}{\partial \bf{W^{H}}}\\ \end{aligned} WHϵ=δHWHzH
in which the dimension detail is ( 1 × N H ) × ( N H × N W H ) (1\times N^{H})\times(N^{H}\times N^{W^{H}}) (1×NH)×(NH×NWH). 不难看出,这个乘积妥妥是一个卷积呀,而且还是一个将 a H − 1 \bf{a^{H-1}} aH1水平翻转180°以后的卷积儿。你可能会说,卷积神经网络的输出都是多维的呀,一维卷积的结论能够推广到多维张量上吗?let me tell you, sure,当然可以了。在离散空间上,多维张量可以拍扁成1维向量,并且这个1维向量与原来多维张量的index关系是:
y = a n − 1 × ( a n − 2 × ( . . . ( a 1 × x 1 + x 2 ) . . . ) + x n − 1 ) + x n = Π i = 1 n − 1 a i x 1 + Π i = 2 n − 1 a i x 2 + . . . + x n \begin{aligned} y &= a_{n-1} \times ( a_{n-2} \times (...(a_1\times x_1 + x_2)...) + x_{n-1}) + x_n\\ &=\Pi_{i=1}^{n-1}a_{i}x_{1}+\Pi_{i=2}^{n-1}a_{i}x_{2}+...+x_n \end{aligned} y=an1×(an2×(...(a1×x1+x2)...)+xn1)+xn=Πi=1n1aix1+Πi=2n1aix2+...+xn
显然这是一个线性变换公式。then如果把 y y y旋转180°,那么效果相当于把每一个 x i x_i xi旋转180°。well,那么我们就知道了,卷积层参数的梯度就是这么一个东西:
∂ ϵ ∂ W H = δ H ∗ r o t 180 ( a H − 1 ) ∂ ϵ ∂ b H = δ H \begin{aligned} \frac{\partial \epsilon}{\partial \bf{W^{H}}}&=\bf{\delta^{H}}*rot180(\bf{a^{H-1}})\\ &\frac{\partial \epsilon}{\partial \bf{b^{H}}}=\bf{\delta^{H}} \end{aligned} WHϵ=δHrot180(aH1)bHϵ=δH

梯度如何跨越卷积层

卷积对于被卷积的两个函数来说是对称的,i.e.
∫ f ( t ) g ( x − t ) d t = ∫ g ( t ) f ( x − t ) d t \int f(t)g(x-t)dt = \int g(t)f(x-t)dt f(t)g(xt)dt=g(t)f(xt)dt
这种直觉告诉我们,针对 W H \bf{W^{H}} WH a H − 1 \bf{a^{H-1}} aH1的求导具有相同的形式,显然:
∂ z H ∂ a H − 1 = ( W H ( 0 ) n a n n a n n a n . . . W H ( 1 ) W H ( 0 ) n a n n a n . . . W H ( 2 ) W H ( 1 ) W H ( 0 ) n a n . . . . . . ) \begin{aligned} \frac{\partial \bf{z^{H}}}{\partial \bf{a^{H-1}}}= \left( \begin{array}{ccc} W^{H}(0) & nan & nan & nan & ...\\ W^{H}(1) & W^{H}(0) & nan & nan & ...\\ W^{H}(2) & W^{H}(1) & W^{H}(0) & nan & ...\\ ...\\ \end{array} \right) \end{aligned} aH1zH=WH(0)WH(1)WH(2)...nanWH(0)WH(1)nannanWH(0)nannannan.........
TUA!!!那么梯度在跨越卷积层时,也是以翻转180°的卷积形式存在的。哈哈哈哈哈,还挺好玩的呢。乌拉那拉氏

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值