深度学习中反向传播算法简单推导笔记

反向传播算法简单推导笔记

1.全连接神经网络

在这里插入图片描述

该结构的前向传播可以写成:

z(1)=W(1)x+b(1)z^{(1)} = W^{(1)}x+b^{(1)}z(1)=W(1)x+b(1)
a(1)=σ(z(1))a^{(1)} = \sigma(z^{(1)})a(1)=σ(z(1))
z(2)=W(2)a(1)+b(2)z^{(2)}=W^{(2)}a^{(1)}+b^{(2)}z(2)=W(2)a(1)+b(2)
a(2)=σ(z(2))a^{(2)} = \sigma(z^{(2)})a(2)=σ(z(2))

2.符号约定

  1. δi(x)\delta^{(x)}_{i}δi(x):∂Loss∂zi(x)\frac{\partial Loss}{\partial z_i^{(x)}}zi(x)Loss 标量.

  2. δ(x)\delta^{(x)}δ(x):向量,由δ1(x),δ2(x)...,δn(x)\delta^{(x)}_{1},\delta^{(x)}_{2}...,\delta^{(x)}_{n}δ1(x),δ2(x)...,δn(x)组成.

  3. ⊙\odot:表示按元素级别的乘法操作.
    [ab]⊙[cd]=[acbd]\left[ \begin{matrix} a\\b \end{matrix} \right] \odot \left[ \begin{matrix} c\\d \end{matrix} \right] = \left[ \begin{matrix} ac\\bd \end{matrix} \right][ab][cd]=[acbd]

    [abcd]⊙[ef]=[aebecfdf]\left[ \begin{matrix} a&b\\c&d \end{matrix} \right] \odot \left[ \begin{matrix} e\\f \end{matrix} \right] = \left[ \begin{matrix} ae&be\\cf &df\end{matrix} \right][acbd][ef]=[aecfbedf]

3.全连接反向传播公式推导

针对本博客给出来的2层,每层2个神经元的全连接神经网络模型,给出其反向传播推导过程.

现在欲求∂Loss∂W(1),∂Loss∂W(2),∂Loss∂b(1),∂Loss∂b(2),δ(1),δ(2)\frac{\partial Loss}{\partial W^{(1)}},\frac{\partial Loss}{\partial W^{(2)}},\frac{\partial Loss}{\partial b^{(1)}},\frac{\partial Loss}{\partial b^{(2)}},\delta^{(1)},\delta^{(2)}W(1)Loss,W(2)Loss,b(1)Loss,b(2)Loss,δ(1),δ(2).

依据模型图并根据链式求导法则可以得到下面的等式:
欲求δ(2)\delta^{(2)}δ(2)先考虑下面式子

δ1(2)=∂Loss∂a1(2)∗∂a1(2)∂z1(2)=∂Loss∂a1(2)∗σ′(z1(2))\delta^{(2)}_1=\frac{\partial Loss}{\partial a^{(2)}_1}*\frac{\partial a^{(2)}_1}{\partial z^{(2)}_1} = \frac{\partial Loss}{\partial a^{(2)}_1}*\sigma'(z^{(2)}_1)δ1(2)=a1(2)Lossz1(2)a1(2)=a1(2)Lossσ(z1(2))

δ2(2)=∂Loss∂a2(2)∗∂a2(2)∂z2(2)=∂Loss∂a2(2)∗σ′(z2(2))\delta^{(2)}_2=\frac{\partial Loss}{\partial a^{(2)}_2}*\frac{\partial a^{(2)}_2}{\partial z^{(2)}_2} = \frac{\partial Loss}{\partial a^{(2)}_2}*\sigma'(z^{(2)}_2)δ2(2)=a2(2)Lossz2(2)a2(2)=a2(2)Lossσ(z2(2))
那么
δ(2)=[δ1(2)δ2(2)]=[∂Loss∂a1(2)∂Loss∂a2(2)]⊙[σ′(z1(2))σ′(z2(2))]\delta^{(2)}=\left[ \begin{matrix} \delta^{(2)}_1 \\ \\ \delta^{(2)}_2 \end{matrix} \right] = \left[ \begin{matrix} \frac{\partial Loss}{\partial a^{(2)}_1} \\ \\ \frac{\partial Loss}{\partial a^{(2)}_2} \end{matrix} \right] \odot \left[ \begin{matrix} \sigma'(z^{(2)}_1) \\ \\ \sigma'(z^{(2)}_2) \end{matrix} \right]δ(2)=δ1(2)δ2(2)=a1(2)Lossa2(2)Lossσ(z1(2))σ(z2(2))


欲求∂Loss∂W(2)\frac{\partial Loss}{\partial W^{(2)}}W(2)Loss先考虑下面式子
∂Loss∂w11(2)=δ1(2)∗∂z1(2)∂w11(2)=δ1(2)∗a1(1)\frac{\partial Loss}{\partial w^{(2)}_{11}} = \delta^{(2)}_1*\frac{\partial z^{(2)}_1}{\partial w^{(2)}_{11}}= \delta^{(2)}_1*a^{(1)}_1w11(2)Loss=δ1(2)w11(2)z1(2)=δ1(2)a1(1)

∂Loss∂w12(2)=δ1(2)∗∂z1(2)∂w12(2)=δ1(2)∗a2(1)\frac{\partial Loss}{\partial w^{(2)}_{12}} = \delta^{(2)}_1*\frac{\partial z^{(2)}_1}{\partial w^{(2)}_{12}}= \delta^{(2)}_1*a^{(1)}_2w12(2)Loss=δ1(2)w12(2)z1(2)=δ1(2)a2(1)

∂Loss∂w21(2)=δ2(2)∗∂z2(2)∂w21(2)=δ2(2)∗a1(1)\frac{\partial Loss}{\partial w^{(2)}_{21}} = \delta^{(2)}_2*\frac{\partial z^{(2)}_2}{\partial w^{(2)}_{21}}= \delta^{(2)}_2*a^{(1)}_1w21(2)Loss=δ2(2)w21(2)z2(2)=δ2(2)a1(1)

∂Loss∂w22(2)=δ2(2)∗∂z2(2)∂w22(2)=δ2(2)∗a2(1)\frac{\partial Loss}{\partial w^{(2)}_{22}} = \delta^{(2)}_2*\frac{\partial z^{(2)}_2}{\partial w^{(2)}_{22}}= \delta^{(2)}_2*a^{(1)}_2w22(2)Loss=δ2(2)w22(2)z2(2)=δ2(2)a2(1)

那么
∂Loss∂W(2)=[δ1(2)⋅a1(1)δ1(2)⋅a2(1)δ2(2)⋅a1(1)δ2(2)⋅a2(1)]=[δ1(2)δ2(2)]⋅[a1(1)a2(1)]=δ(2)⋅a(1)T\frac{\partial Loss}{\partial W^{(2)}} = \left[ \begin{matrix} \delta^{(2)}_1 \cdot a^{(1)}_1 & \delta^{(2)}_1\cdot a^{(1)}_2 \\ \\ \delta^{(2)}_2 \cdot a^{(1)}_1 & \delta^{(2)}_2 \cdot a^{(1)}_2 \end{matrix} \right] = \left[ \begin{matrix} \delta^{(2)}_1 \\ \\ \delta^{(2)}_2 \end{matrix} \right] \cdot \left[ \begin{matrix} a^{(1)}_1 & a^{(1)}_2 \end{matrix} \right] = \delta^{(2)}\cdot a^{(1)T}W(2)Loss=δ1(2)a1(1)δ2(2)a1(1)δ1(2)a2(1)δ2(2)a2(1)=δ1(2)δ2(2)[a1(1)a2(1)]=δ(2)a(1)T


欲求∂Loss∂b(2)\frac{\partial Loss}{\partial b^{(2)}}b(2)Loss,先考虑下面式子

∂Loss∂b1(2)=δ1(2)∗1\frac{\partial Loss}{\partial b^{(2)}_1} = \delta^{(2)}_1*1b1(2)Loss=δ1(2)1

∂Loss∂b2(2)=δ2(2)∗1\frac{\partial Loss}{\partial b^{(2)}_2} = \delta^{(2)}_2*1b2(2)Loss=δ2(2)1

那么
∂Loss∂b(2)=[δ1(2)δ2(2)]⊙[1]=δ(2)\frac{\partial Loss}{\partial b^{(2)}} = \left[ \begin{matrix} \delta^{(2)}_1 \\ \\ \delta^{(2)}_2 \end{matrix} \right] \odot \left[ \begin{matrix} 1 \end{matrix} \right] = \delta^{(2)}b(2)Loss=δ1(2)δ2(2)[1]=δ(2)


欲求δ(1)\delta^{(1)}δ(1),先考虑下面式子

δ1(1)=δ1(2)⋅∂z1(2)∂a1(1)⋅∂a1(1)∂z1(1)+δ2(2)⋅∂z2(2)∂a1(1)⋅∂a1(1)∂z1(1)=δ1(2)⋅w11(2)⋅σ′(z1(1))+δ2(2)⋅w21(2)⋅σ′(z1(1))\delta^{(1)}_1 = \delta^{(2)}_1 \cdot \frac{\partial z^{(2)}_{1}}{\partial a^{(1)}_1} \cdot \frac{\partial a_1^{(1)}}{\partial z_1^{(1)}} + \delta^{(2)}_2 \cdot \frac{\partial z^{(2)}_{2}}{\partial a^{(1)}_1} \cdot \frac{\partial a_1^{(1)}}{\partial z_1^{(1)}} = \delta^{(2)}_1 \cdot w^{(2)}_{11} \cdot \sigma'(z_1^{(1)}) + \delta^{(2)}_2 \cdot w_{21}^{(2)} \cdot \sigma'(z_1^{(1)})δ1(1)=δ1(2)a1(1)z1(2)z1(1)a1(1)+δ2(2)a1(1)z2(2)z1(1)a1(1)=δ1(2)w11(2)σ(z1(1))+δ2(2)w21(2)σ(z1(1))

δ2(1)=δ1(2)⋅∂z1(2)∂a2(1)⋅∂a2(1)∂z2(1)+δ2(2)⋅∂z2(2)∂a2(1)⋅∂a2(1)∂z2(1)=δ1(2)⋅w12(2)⋅σ′(z2(1))+δ2(2)⋅w22(2)⋅σ′(z2(1))\delta^{(1)}_2 = \delta^{(2)}_1 \cdot \frac{\partial z^{(2)}_{1}}{\partial a^{(1)}_2} \cdot \frac{\partial a_2^{(1)}}{\partial z_2^{(1)}} + \delta^{(2)}_2 \cdot \frac{\partial z^{(2)}_{2}}{\partial a^{(1)}_2} \cdot \frac{\partial a_2^{(1)}}{\partial z_2^{(1)}} = \delta^{(2)}_1 \cdot w^{(2)}_{12} \cdot \sigma'(z_2^{(1)}) + \delta^{(2)}_2 \cdot w_{22}^{(2)} \cdot \sigma'(z_2^{(1)})δ2(1)=δ1(2)a2(1)z1(2)z2(1)a2(1)+δ2(2)a2(1)z2(2)z2(1)a2(1)=δ1(2)w12(2)σ(z2(1))+δ2(2)w22(2)σ(z2(1))

那么

δ(1)=[w11(2)w21(2)w12(2)w22(2)]⋅[δ1(2)δ2(2)]⊙[σ′(z1(1))σ′(z2(1))]=W(2)T⋅δ(2)⊙σ′(z(1))\delta^{(1)}=\left[ \begin{matrix} w_{11}^{(2)} & w_{21}^{(2)} \\ \\ w_{12}^{(2)} & w_{22}^{(2)} \end{matrix} \right] \cdot \left[ \begin{matrix} \delta^{(2)}_1 \\ \\ \delta^{(2)}_2 \end{matrix} \right] \odot \left[ \begin{matrix} \sigma'(z^{(1)}_1) \\ \\ \sigma'{(z_2^{(1)})} \end{matrix} \right]=W^{(2)T} \cdot \delta^{(2)} \odot \sigma'(z^{(1)})δ(1)=w11(2)w12(2)w21(2)w22(2)δ1(2)δ2(2)σ(z1(1))σ(z2(1))=W(2)Tδ(2)σ(z(1))


∂Loss∂W(1),∂Loss∂b(1)\frac{\partial Loss}{\partial W^{(1)}},\frac{\partial Loss}{\partial b^{(1)}}W(1)Loss,b(1)Loss的方法与之前求∂Loss∂W(2),∂Loss∂b(2)\frac{\partial Loss}{\partial W^{(2)}},\frac{\partial Loss}{\partial b^{(2)}}W(2)Loss,b(2)Loss完全相同,这里就不赘述了

利用向量微积分简化推导过程

上面的推到方法我们专注于拆成标量用链式求导法则算,最后拼成矩阵相乘的形式,这样从数学上来说比较严谨,但是较为麻烦.

而实际上我们有一种更为简单(玄学 )的做法,那就是直接对向量运用链式求导法则,并且根据矩阵的维数来调整项目的位置和对项目进行转置.

欲求δ(2)=∂Loss∂z(2)=∂Loss∂a(2)⋅∂a(2)∂z(2)\delta^{(2)} = \frac{\partial Loss}{\partial z^{(2)}} = \frac{\partial Loss}{\partial a^{(2)}} \cdot \frac{\partial a^{(2)}}{\partial z^{(2)}}δ(2)=z(2)Loss=a(2)Lossz(2)a(2)

由于dim{δ(2)}=2∗1,dim{∂Loss∂a(2)}=2∗1dim\{\delta^{(2)}\} = 2*1,dim\{\ \frac{\partial Loss}{\partial a^{(2)}} \} = 2*1dim{δ(2)}=21,dim{ a(2)Loss}=21,根据矩阵乘法的法则,理论上应该有dim{∂a(2)∂z(2)}=1∗1dim\{\ \frac{\partial a^{(2)}}{\partial z^{(2)}} \} = 1*1dim{ z(2)a(2)}=11.

而实际上如果是列向量(a(2)a^{(2)}a(2))对列向量(z(2)z^{(2)}z(2))进行求导,大多都是对应元素进行求导,比如∂a(2)∂z(2)=[σ′(z1(2))σ′(z2(2))]=σ′(z(2))\frac{\partial a^{(2)}}{\partial z^{(2)}}=\left[ \begin{matrix} \sigma'(z^{(2)}_1) \\ \\ \sigma'(z^{(2)}_2) \end{matrix} \right]=\sigma'(z^{(2)})z(2)a(2)=σ(z1(2))σ(z2(2))=σ(z(2)),也就是说dim{∂a(2)∂z(2)}=2∗1dim\{\frac{\partial a^{(2)}}{\partial z^{(2)}} \} = 2*1dim{z(2)a(2)}=21.

那怎么办呢,2∗1,2∗22*1,2*221,22的矩阵不满足乘法规律,这样的话,使用⊙\odot这个操作刚好就可以,所以:
δ(2)=∂Loss∂z(2)=∂Loss∂a(2)⋅∂a(2)∂z(2)=∂Loss∂a(2)⊙σ′(z(2))\delta^{(2)} = \frac{\partial Loss}{\partial z^{(2)}} = \frac{\partial Loss}{\partial a^{(2)}} \cdot \frac{\partial a^{(2)}}{\partial z^{(2)}}=\frac{\partial Loss}{\partial a^{(2)}} \odot \sigma'(z^{(2)})δ(2)=z(2)Loss=a(2)Lossz(2)a(2)=a(2)Lossσ(z(2))

看到这里,明白人一定会说:你这不扯淡吗,毫无道理.

没错,你来打我呀.

我们再看一个例子:

欲求∂Loss∂W(2)=(∂Loss∂a(2)⋅∂a(2)∂z(2))⋅∂z(2)∂W(2)=δ(2)⋅∂z(2)∂W(2)\frac{\partial Loss}{\partial W^{(2)}} = (\frac{\partial Loss}{\partial a^{(2)}} \cdot \frac{\partial a^{(2)}}{\partial z^{(2)}}) \cdot \frac{\partial z^{(2)}}{\partial W^{(2)}} = \delta^{(2)} \cdot \frac{\partial z^{(2)}}{\partial W^{(2)}}W(2)Loss=(a(2)Lossz(2)a(2))W(2)z(2)=δ(2)W(2)z(2)

注意到dim{∂Loss∂W(2)}=2∗2,dim{δ(2)}=2∗1dim\{\frac{\partial Loss}{\partial W^{(2)}}\}=2*2,dim\{\delta^{(2)}\}=2*1dim{W(2)Loss}=22,dim{δ(2)}=21
那么理论上应该有dim{∂z(2)∂W(2)}=1∗2dim\{\frac{\partial z^{(2)}}{\partial W^{(2)}}\} = 1*2dim{W(2)z(2)}=12.

我们根据z(2)=W(2)a(1)+b(2)z^{(2)}=W^{(2)}a^{(1)}+b^{(2)}z(2)=W(2)a(1)+b(2),知道dim{a(1)}=2∗1dim\{a^{(1)}\}=2*1dim{a(1)}=21,所以令∂z(2)∂W(2)=a(1)T\frac{\partial z^{(2)}}{\partial W^{(2)}}=a^{(1)T}W(2)z(2)=a(1)T.

于是∂Loss∂W(2)=δ(2)⋅a(1)T\frac{\partial Loss}{\partial W^{(2)}}= \delta^{(2)} \cdot a^{(1)T}W(2)Loss=δ(2)a(1)T.

虽然很扯淡,但这样做跟前面用数学推导得到的公式是一样的.

我们再看一个例子:

δ(1)=∂Loss∂z(1)=∂Loss∂z(2)⋅∂z(2)∂a(1)⋅∂a(1)∂z(1)\delta^{(1)} = \frac{\partial Loss}{\partial z^{(1)}}=\frac{\partial Loss}{\partial z^{(2)}} \cdot \frac{\partial z^{(2)}}{\partial a^{(1)}} \cdot \frac{\partial a^{(1)}}{\partial z^{(1)}}δ(1)=z(1)Loss=z(2)Lossa(1)z(2)z(1)a(1)

由于dim{∂Loss∂z(1)}=n∗1,dim{∂Loss∂z(2)}=m∗1,dim{∂z(2)∂a(1)}=?,dim{∂a(1)∂z(1)}=n∗1dim\{\frac{\partial Loss}{\partial z^{(1)}}\}=n*1,dim\{\frac{\partial Loss}{\partial z^{(2)}}\}=m*1,dim\{\frac{\partial z^{(2)}}{\partial a^{(1)}}\} = ?,dim\{\frac{\partial a^{(1)}}{\partial z^{(1)}}\}=n*1dim{z(1)Loss}=n1,dim{z(2)Loss}=m1,dim{a(1)z(2)}=?,dim{z(1)a(1)}=n1.

再根据z(2)=W(2)a(1)+b(2)z^{(2)}=W^{(2)}a^{(1)}+b^{(2)}z(2)=W(2)a(1)+b(2),那么∂z(2)∂a(1)\frac{\partial z^{(2)}}{\partial a^{(1)}}a(1)z(2)一定是有W(2)W^{(2)}W(2)变化而来的,而dim{W(2)}=m∗ndim\{W^{(2)}\}=m*ndim{W(2)}=mn,所以玄学一波(调整一下顺序以及转置)应该得到:
(其中n,m=2n,m=2n,m=2)

δ(1)=W(2)T⋅δ(2)⊙σ′(z(1))\delta^{(1)} = W^{(2)T} \cdot \delta^{(2)} \odot \sigma'(z^{(1)})δ(1)=W(2)Tδ(2)σ(z(1)).这与上面数学推导得到的结果是一致的.


4.卷积层反向传播

输入层为XXX,卷积核为KKK,输出层为YYY.

那么有 X⊗K=YX \otimes K=YXK=Y.

如果XXX的宽度为xxx,KKK的宽度为kkk,YYY的宽度为yyy.那么有y=x−k+1y=x-k+1y=xk+1成立.

[x11x12x13x21x22x23x31x32x33]⊗[k11k12x21k22]=[y11y12y21y22]\left[ \begin{matrix} x_{11} & x_{12} & x_{13} \\ x_{21} & x_{22} & x_{23} \\ x_{31} & x_{32} & x_{33} \end{matrix} \right] \otimes \left[ \begin{matrix} k_{11} & k_{12} \\ x_{21} & k_{22} \end{matrix} \right] = \left[ \begin{matrix} y_{11} & y_{12} \\ y_{21} & y_{22} \end{matrix} \right]x11x21x31x12x22x32x13x23x33[k11x21k12k22]=[y11y21y12y22]

展开之后我们可以写成:

y11=x11k11+x12k12+x21k21+x22k22y_{11}=x_{11}k_{11}+x_{12}k_{12}+x_{21}k_{21}+x_{22}k_{22}y11=x11k11+x12k12+x21k21+x22k22
y12=x12k11+x13k12+x22k21+x23k22y_{12}=x_{12}k_{11}+x_{13}k_{12}+x_{22}k_{21}+x_{23}k_{22}y12=x12k11+x13k12+x22k21+x23k22
y21=x21k11+x22k12+x31k21+x32k22y_{21}=x_{21}k_{11}+x_{22}k_{12}+x_{31}k_{21}+x_{32}k_{22}y21=x21k11+x22k12+x31k21+x32k22
y22=x22k11+x23k12+x32k21+x33k22y_{22}=x_{22}k_{11}+x_{23}k_{12}+x_{32}k_{21}+x_{33}k_{22}y22=x22k11+x23k12+x32k21+x33k22

δij=∂Loss∂yij=∇yij\delta_{ij}=\frac{\partial Loss}{\partial y_{ij}}=\nabla y_{ij}δij=yijLoss=yij

∂Loss∂k11=δ11⋅x11+δ12⋅x12+δ21⋅x21+δ22⋅x22\frac{\partial Loss}{\partial k_{11}}=\delta_{11} \cdot x_{11} + \delta_{12} \cdot x_{12}+\delta_{21} \cdot x_{21}+\delta_{22} \cdot x_{22}k11Loss=δ11x11+δ12x12+δ21x21+δ22x22
∂Loss∂k12=δ11⋅x12+δ12⋅x13+δ21⋅x22+δ22⋅x23\frac{\partial Loss}{\partial k_{12}}=\delta_{11} \cdot x_{12} + \delta_{12} \cdot x_{13}+\delta_{21} \cdot x_{22}+\delta_{22} \cdot x_{23}k12Loss=δ11x12+δ12x13+δ21x22+δ22x23
∂Loss∂k21=δ11⋅x21+δ12⋅x22+δ21⋅x31+δ22⋅x32\frac{\partial Loss}{\partial k_{21}}=\delta_{11} \cdot x_{21} + \delta_{12} \cdot x_{22}+\delta_{21} \cdot x_{31}+\delta_{22} \cdot x_{32}k21Loss=δ11x21+δ12x22+δ21x31+δ22x32
∂Loss∂k22=δ11⋅x22+δ12⋅x23+δ21⋅x32+δ22⋅x33\frac{\partial Loss}{\partial k_{22}}=\delta_{11} \cdot x_{22} + \delta_{12} \cdot x_{23}+\delta_{21} \cdot x_{32}+\delta_{22} \cdot x_{33}k22Loss=δ11x22+δ12x23+δ21x32+δ22x33

我们发现

[∇k11∇k12∇k21∇k22]=[x11x12x13x21x22x23x31x32x33]⊗[∇y11∇y12∇y21∇y22]\left[ \begin{matrix} \nabla k_{11} &\nabla k_{12} \\ \\ \nabla k_{21} &\nabla k_{22} \end{matrix} \right] = \left[ \begin{matrix} x_{11} & x_{12} & x_{13} \\ x_{21} & x_{22} & x_{23} \\ x_{31} & x_{32} & x_{33} \end{matrix} \right] \otimes \left[ \begin{matrix} \nabla y_{11} & \nabla y_{12} \\ \\ \nabla y_{21} & \nabla y_{22} \end{matrix} \right]k11k21k12k22=x11x21x31x12x22x32x13x23x33y11y21y12y22

而这刚好也是一个卷积操作,可以写成

∂Loss∂K=∂Loss∂Y⋅∂Y∂K=X⊗∇Y\frac{\partial Loss}{\partial K}=\frac{\partial Loss}{\partial Y}\cdot\frac{\partial Y}{\partial K}=X \otimes \nabla YKLoss=YLossKY=XY

我们写成 ∇K=X⊗∇Y\nabla K=X \otimes \nabla YK=XY

这说明了卷积层的梯度传播仍然是卷积操作.

那么对卷积核KKK的梯度∇K\nabla KK我们求出来了,下面我们省略对XXX的梯度推导步骤,直接得出公式∇X=pad(∇Y)⊗rot180(K)\nabla X= pad(\nabla Y) \otimes rot_{180}(K)X=pad(Y)rot180(K)

其中rot180rot_{180}rot180操作表示将矩阵旋转180180180度,可以理解成先左右旋转,再上下旋转.

其中padpadpad操作表示对矩阵周围进行补000操作,为什么需要补000呢,这是为了保证最后维数是匹配的.∇X\nabla XX的维度是rrr,KKK的唯独是kkk,那么我们前向传播时候得到的YYY的维度是r−k+1r-k+1rk+1.假设pad(∇Y)pad(\nabla Y)pad(Y)的维度是???,那么必须有r=?−k+1r=?-k+1r=?k+1,所以?=r+k−1?=r+k-1?=r+k1,因此padpadpad操作将维度为r−k+1r-k+1rk+1的矩阵补成维度r+k−1r+k-1r+k1.

例如这个例子中的pad(∇Y)pad(\nabla Y)pad(Y)应该写成:

[00000∇y11∇y1200∇y21∇y2200000]\left[ \begin{matrix} 0&0&0&0 \\ 0&\nabla y_{11} & \nabla y_{12} & 0\\ 0&\nabla y_{21} & \nabla y_{22} & 0\\ 0&0&0&0 \end{matrix} \right]00000y11y2100y12y2200000

这个例子中的rot180(K)rot_{180}(K)rot180(K)应该写成:

[w22w21w12w11]\left[ \begin{matrix} w_{22} &w_{21} \\ \\ w_{12} & w_{11} \end{matrix} \right]w22w12w21w11


5.卷积操作的实现

卷积操作其实也可以写作矩阵乘法来做.

比如下面式子可以写成矩阵相乘的形式:

[x11x12x13x21x22x23x31x32x33]⊗[k11k12x21k22]=[y11y12y21y22]\left[ \begin{matrix} x_{11} & x_{12} & x_{13} \\ x_{21} & x_{22} & x_{23} \\ x_{31} & x_{32} & x_{33} \end{matrix} \right] \otimes \left[ \begin{matrix} k_{11} & k_{12} \\ x_{21} & k_{22} \end{matrix} \right] = \left[ \begin{matrix} y_{11} & y_{12} \\ y_{21} & y_{22} \end{matrix} \right]x11x21x31x12x22x32x13x23x33[k11x21k12k22]=[y11y21y12y22]


y11=x11k11+x12k12+x21k21+x22k22y_{11}=x_{11}k_{11}+x_{12}k_{12}+x_{21}k_{21}+x_{22}k_{22}y11=x11k11+x12k12+x21k21+x22k22
y12=x12k11+x13k12+x22k21+x23k22y_{12}=x_{12}k_{11}+x_{13}k_{12}+x_{22}k_{21}+x_{23}k_{22}y12=x12k11+x13k12+x22k21+x23k22
y21=x21k11+x22k12+x31k21+x32k22y_{21}=x_{21}k_{11}+x_{22}k_{12}+x_{31}k_{21}+x_{32}k_{22}y21=x21k11+x22k12+x31k21+x32k22
y22=x22k11+x23k12+x32k21+x33k22y_{22}=x_{22}k_{11}+x_{23}k_{12}+x_{32}k_{21}+x_{33}k_{22}y22=x22k11+x23k12+x32k21+x33k22

[y11y12y21y22]=[x11x12x21x22x12x13x22x23x21x22x31x32x22x23x32x33]⋅[k11k12k21k22]\left[\begin{matrix} y_{11}\\y_{12}\\y_{21}\\y_{22} \end{matrix}\right] = \left[\begin{matrix} x_{11}&x_{12}&x_{21}&x_{22}\\ x_{12}&x_{13}&x_{22}&x_{23}\\ x_{21}&x_{22}&x_{31}&x_{32}\\ x_{22}&x_{23}&x_{32}&x_{33} \end{matrix}\right] \cdot \left[\begin{matrix} k_{11}\\ k_{12}\\k_{21}\\k_{22} \end{matrix}\right]y11y12y21y22=x11x12x21x22x12x13x22x23x21x22x31x32x22x23x32x33k11k12k21k22

从上面的例子可以看出吗,要把卷积操作变成矩阵相乘需要把YYY矩阵和KKK矩阵都展成一列向量,并且要对XXX矩阵做一个操作,就是把XXX按照卷积核的大小拆出一个大小为k2∗k2k^2*k^2k2k2的矩阵来.

最后矩阵乘法做完以后,将yyy向量reshapereshapereshape成矩阵回来就好了.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/320941.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

EntityFramework Core进行读写分离最佳实践方式,了解一下(二)?

写过上一篇关于EF Core中读写分离最佳实践方式后,虽然在一定程度上改善了问题,但是在评论中有的指出更换到从数据库。那么接下来要进行插入此时又要切换到主数据库,同时有的指出是否可以进行底层无感知操作,这确实是个问题&#x…

【图论】【Kosaraju】刻录光盘(ssl 2344)

刻录光盘 ssl 2344 题目大意: 求连通块 原题: 题目描述 在JSOI2005夏令营快要结束的时候,很多营员提出来要把整个夏令营期间的资料刻录成一张光盘给大家,以便大家回去后继续学习。组委会觉得这个主意不错!可是组…

P4158-[SCOI2009]粉刷匠【dp,背包】

正题 https://www.luogu.com.cn/problem/P4158 题目大意 nnn个墙长度为mmm,每次可以粉刷一堵墙的连续一段区间,粉刷过的不能再粉刷。给出每个位置应该粉刷的颜色,然后求TTT次可以粉刷正确多少个位置。 解题思路 首先我们对于第iii堵墙处理出…

一文搞清到底什么是 .NET?

现在各种 .NET 满天飞,别说新手了,连我这样的老手都差点被绕进去。到底什么是 .NET 呢?通俗易懂,什么是.NET?什么是.NET Framework?什么是.NET Core? 这篇文章好长呀,不知道你看完了没有,其实…

P4552-[Poetize6]IncDec Sequence【差分】

正题 题目链接:https://www.luogu.com.cn/problem/P4552 题目大意 给出nnn个数,每次可以选择一个区间加一或减一,求最少操作使得所有数相等,并且求可能的最终序列个数。 解题思路 在差分数组上操作,那么操作变为将差分数组上一…

练习利用LSTM实现手写数字分类任务

练习利用LSTM实现手写数字分类任务 MNIST数据集中图片大小为28*28. 按照行进行展开成28维的特征向量。 考虑到这28个的向量之间存在着顺序依赖关系,我们可以将他们看成是一个长为28的输入序列,将其输入到LSTM中,LSTM可以从中提取到序列特征…

【图论】最短路上的统计(ssl 1500)

最短路上的统计 ssl 1500 题目大意: 求一个图中,从a到b的所有最短路所经过的点数之和 原题: 题目描述 一个无向图上,没有自环,所有边的权值均为1,对于一个点对(a,b),我们要把所…

Service Mesh新成员:Consul 1.2

本文译自 HashiCorp 官网关于 Consul 1.2 支持 Service Mesh 发布的博客文章。原文链接:https://www.hashicorp.com/blog/consul-1-2-service-mesh作者:Mitchell Hashimoto 翻译:董干 转载自:https://blog.idevfun.io/consul-1-2-…

P4564-[CTSC2018]假面【期望dp】

正题 题目大意:https://www.luogu.com.cn/problem/P4564 题目大意 nnn个人第iii个有mim_imi​点血,每次有操作 有ppp的概率对一个人造成111点伤害(如果死了就不算,ppp每次都不同)给出若干个人,对里面存活的人随机选择…

VAE(变分自编码器)学习笔记

VAE学习笔记 普通的编码器可以将图像这类信息编码成为特征向量. 但通常这些特征向量不具有空间上的连续性. VAE(变分自编码器)可以将图像信息编码成为具有空间连续性的特征向量. 方法是向编码器和解码器中加入统计信息,即特征向量代表的的是一个高斯分布,强迫特征向量服从高…

小 X 的 AK 计划

小 X 的 AK 计划 题目大意: 有n个点,到一个点(时间为距离)并花一些时间可以A掉此点,问最多可以A多少个点 原题: 解题思路: 先按位置从小到大排序,然后到每一个点并A掉的时间加在…

.NET Core 2.1的重大缺陷延长了.NET Core 2.0的寿命

微软近日宣布,.NET Core 2.0 即将 "寿终正寝",对它的支持将在2018年10月1日结束。.NET Core 2.0 是一个非长期支持(LTS)的版本,因此微软的承诺是在下一个版本发布的三个月之后结束对它的支持。由于 .NET Cor…

P4782-[模板]2-SAT问题【tarjan】

正题 题目链接:https://www.luogu.com.cn/problem/P4782 题目大意 给若干个条件限定为xi为a或xj为bx_i为a或x_j为bxi​为a或xj​为b。求构造一个序列xxx满足所有条件 解题思路 我们对于每个xix_ixi​构造两个点分别表示xix_ixi​为0/10/10/1。然后就开始对能够确定的条件关系…

区间dp专题

区间dp专题 基本思想 区间dp一类的问题往往子问题具有很明显的区间性质,也就是说我们可以通过将子问题定义为整个区间的一个子区间.因为一个大区间可以切分成两段相邻的子区间.从这点出发,我们便可以找到递推关系. 1.纸牌游戏 蜘蛛牌游戏规则是这样的:只能将牌拖…

.Net Core开发日志——Global Tools

.Net Core 2.1引入了一个新的功能,Global Tools,其本质是包含控制台应用程序的nuget包,目前而言,还没有特别有用的工具,不过相信随着时间的推移,各种有创意或者实用性强的Global Tools会出现在大家的视野里…

【DP】回文词 (ssl 1813)

回文词 ssl 1813 题目大意: 给出一个式子,最少要加多少个字符才能让这个式子是一个“回文词” 原题: 题目描述 回文词是一种对称的字符串,也就是说:一个回文词,从左向右读和从右向左读的结果都是一样的.任意给定一个字符串,通过插入若干…

POJ3678-Katu Puzzle【2-SAT】

正题 题目链接:http://poj.org/problem?id3678 题目大意 nnn个xix_ixi​为0/10/10/1。有mmm个条件表示xiandxjax_i\ and\ x_jaxi​ and xj​a或xiorxjax_i\ or\ x_jaxi​ or xj​a或xixorxjax_i\ xor\ x_jaxi​ xor xj​a。 求构造一组合法的xix_ixi​。 解题思路 讨论一下 …

Simple-Faster-RCNN源码学习笔记

Simple-Faster-RCNN 源码学习 项目github地址: https://github.com/chenyuntc/simple-faster-rcnn-pytorch 源码 源文件: model/utils/bbox_tools.py 方法: loc2bbox(src_bbox, loc) 参数含义: src_bbox描述的是bbox的坐标.loc表示的偏移(offsets)和缩放尺度(scales). 给…

API网关模式

什么是网关网关一词来源于计算机网络中的定义,网关(Gateway)又称网间连接器、协议转换器。网关的准确定义是: 两个计算机程序或系统之间的连接,网关作为两个程序之间的门户,允许它们通过不同计算机之间的协议通信来共享信息。顾名…

楼层

楼层 题目大意: 有两个数m和t,问1~m之间去掉有数字t的数之后还有多少个数 原题: 题目描述 mxy 感觉新世界的大门打开了。 ta 决定要在新世界的旅馆中找间房住。已知新世界每天都有一个高能的数字 t,这个数字在楼层中是不会出…