下面介绍反向传播基于的四个方程。

1. 输出层误差的方程

LL层为输出层,该层得分误差向量δL\delta^L中每一个元素定义如下:

δjL=CzjL=CajLσ(zjL) \delta^L_j= \frac{\partial C}{\partial z^L_j}=\frac{\partial C}{\partial a^L_j}\sigma'(z^L_j)

右式第一项CajL\frac{\partial C}{\partial a^L_j}表示代价随着jthj^{th}输出激活值的变化而变化的速度,第二项σ(zjL)\sigma'(z^L_j)刻画了在zjLz^L_j处激活函数σ\sigma的变化速度。

证明:应用链式法则我们可以就输出激活值的偏导数的形式重新表示上面的偏导数:

δjL=CzjL=kCakLakLzjL \delta^L_j= \frac{\partial C}{\partial z^L_j}=\displaystyle\sum_{k}\frac{\partial C}{\partial a^L_k}\frac{\partial a^L_k}{\partial z^L_j}

这里的求和是在输出层的所有神经元上运行的,当kjk \ne jakLzjL=0\frac{\partial a^L_k}{\partial z^L_j}=0,于是,我们可以简化方程为:

δjL=CajLajLzjL \delta^L_j=\frac{\partial C}{\partial a^L_j}\frac{\partial a^L_j}{\partial z^L_j}

然后ajL=σ(zjL)a^L_j=\sigma(z^L_j),于是,可以写成

δjL=CajLσ(zjL) \delta^L_j=\frac{\partial C}{\partial a^L_j}\sigma'(z^L_j)

以矩阵的形式重写方程,其中每个元素CajL\frac{\partial C}{\partial a^L_j}构成的向量表示成aC\nabla_aC,每个元素σ(zjL)\sigma'(z^L_j)构成的向量表示成σ(zL)\sigma'(z^L),于是得到

δL=[δ1Lδ2Lδ3L...δnL]=[Ca1Lσ(z1L)Ca2Lσ(z2L)Ca3Lσ(z3L)...CanLσ(znL)]=aCσ(zL) \delta^{L}= \begin{bmatrix} \delta^L_{1} \\ \delta^L_{2} \\ \delta^L_{3} \\ ... \\ \delta^L_{n} \end{bmatrix}=\begin{bmatrix} \frac{\partial C}{\partial a^L_1}\sigma'(z^L_1) \\ \frac{\partial C}{\partial a^L_2}\sigma'(z^L_2) \\ \frac{\partial C}{\partial a^L_3}\sigma'(z^L_3) \\ ... \\ \frac{\partial C}{\partial a^L_n}\sigma'(z^L_n) \end{bmatrix}=\nabla_aC \odot \sigma'(z^L)

2. 使用下一层的误差δl+1\delta^{l+1}来表示当前层误差δl\delta^l

特别的,

δl=((wl+1)Tδl+1)σ(zl) \delta^l =((w^{l+1})^T\delta^{l+1}) \odot\sigma'(z^l)

其中(wl+1)T(w^{l+1})^T(l+1)th(l+1)^{th}层权重矩阵wl+1w^{l+1}的转置。这个公式看过去有点复杂,但是每个元素都有很好得分解释,假设我们知道(l+1)th(l+1)^{th}的误差向量δl+1\delta^{l+1},当我们应用转置的权重矩阵(wl+1)T(w^{l+1})^T,我们可以把它看做是沿着网络反向移动误差,给了我们度量在lthl^{th}层的误差的方法。然后进行Hadamard乘积运算σ(zl)\sigma'(z^l),这会让误差通过ll层的激活函数反向传递回来并给出在第ll层的带权输入误差向量δl\delta^l

根据该公式,我们可以首先根据第一个公式得到输出层的误差δL\delta^L,然后得到第(L1)th(L-1)^{th}层的误差,如此一步步地方向传播完整个网络。

证明:根据链式法则,我们可以将δjl=Czjl\delta^l_j= \frac{\partial C}{\partial z^l_j}写成:

δjl=Czjl=kCzkl+1zkl+1zjl=kzkl+1zjlδkl+1 \delta^l_j= \frac{\partial C}{\partial z^l_j}=\displaystyle\sum_{k}\frac{\partial C}{\partial z^{l+1}_{k}}\frac{\partial z^{l+1}_k}{\partial z^l_j}=\displaystyle\sum_{k}\frac{\partial z^{l+1}_k}{\partial z^l_j}\delta^{l+1}_k

这里我们将最后一个式子交换了两边的项,并用δkl+1\delta^{l+1}_k代入。然后

zkl+1=jwkjl+1ajl+bkl+1=jwkjl+1σ(zjl)+bkl+1 z^{l+1}_k=\displaystyle\sum_{j}w^{l+1}_{kj}a^l_j+b^{l+1}_k=\displaystyle\sum_{j}w^{l+1}_{kj}\sigma(z^{l}_j)+b^{l+1}_k

做微分,我们得到

zkl+1zjl=wkjl+1σ(zjl) \frac{\partial z^{l+1}_k}{\partial z^l_j}=w^{l+1}_{kj}\sigma'(z^{l}_j)

代入上式,得到

δjl=kwkjl+1σ(zjl)δkl+1=(kwkjl+1δkl+1)σ(zjl) \delta^l_j=\displaystyle\sum_{k}w^{l+1}_{kj}\sigma'(z^{l}_j)\delta^{l+1}_k=(\displaystyle\sum_{k}w^{l+1}_{kj}\delta^{l+1}_k) \sigma'(z^{l}_j)

将公式进行矩阵化,最后得到第一个公式。

举例来说,如下图:

当我们已经计算得到了第33层的误差向量δ3=[δ13δ23]\delta^{3}= \begin{bmatrix} \delta^3_{1} \\ \delta^3_{2} \end{bmatrix},这时计算第22层的误差向量δ2\delta^2,我们先计算δ32\delta^2_3,根据上面的公式可以得到

δ32=(kwk33δk3)σ(z33)=(w133δ13+w233δ23)σ(z32)=([w133w233]T[δ13δ23])σ(z32) \delta^2_3=(\displaystyle\sum_{k}w^{3}_{k3}\delta^3_k) \sigma'(z^{3}_3)=(w^{3}_{13}\delta^3_1+w^{3}_{23}\delta^3_2) \sigma'(z^{2}_3)=(\begin{bmatrix} w^3_{13} \\ w^3_{23} \end{bmatrix}^T \cdot \begin{bmatrix} \delta^3_{1} \\ \delta^3_{2} \end{bmatrix})\sigma'(z^{2}_3)

也就是图中两条绿色的线所标识的权重与误差的乘积和。

3. 代价函数关于网络中任意偏置的改变率

Cbjl=δjl \frac{\partial C}{\partial b^l_j}=\delta^l_j

也就是误差δjl\delta^l_jCbjl\frac{\partial C}{\partial b^l_j}完全一致。

证明:根据链式法则,其中zjl=kwjklakl1+bjlz^l_j = \displaystyle\sum_{k}w^l_{jk} a^{l-1}_k + b^l_j,最终可以得到

Cbjl=Czjlzjlbjl=Czjl \frac{\partial C}{\partial b^l_j} = \frac{\partial C}{\partial z^l_{j}}\frac{\partial z^l_j}{\partial b^l_j}=\frac{\partial C}{\partial z^l_{j}}

用矩阵表示,可以表示成:

Cbl=δl \frac{\partial C}{\partial b^l}=\delta^l

4. 代价函数关于任何一个权重的改变率

Cwjkl=akl1δjl \frac{\partial C}{\partial w^l_{jk}}=a^{l-1}_k\delta^l_j

证明:根据链式法则,其中zjl=kwjklakl1+bjlz^l_j = \displaystyle\sum_{k}w^l_{jk} a^{l-1}_k + b^l_j,最终可以得到

Cwjkl=Czjlzjlbjl=Czjlajl1=akl1δjl \frac{\partial C}{\partial w^l_{jk}} = \frac{\partial C}{\partial z^l_{j}}\frac{\partial z^l_j}{\partial b^l_j}=\frac{\partial C}{\partial z^l_{j}} a^{l-1}_j=a^{l-1}_k\delta^l_j

举例来说:

上面图中,想要计算Cw133\frac{\partial C}{\partial w^3_{13}},则Cw133=a32δ13\frac{\partial C}{\partial w^3_{13}}=a^2_3\delta^3_1。也可以理解成:

Cw=ainδout \frac{\partial C}{\partial w}=a_{in}\delta_{out}

其中aina_{in}是输入给权重ww的神经元的激活值,δout\delta_{out}是输出自权重ww的神经元的误差。

用矩阵表示,可以表示成(其中第(l1)th(l-1)^{th}层神经元有mm个,第lthl^{th}层神经元有nn个)

Cwl=C/[w11lw12lw13l...w1mlw21lw22lw23l...w1mlw31lw12lw13l...w1ml...wn1lwn2lwn3l...wnml]=[a1l1δ1la2l1δ1la3l1δ1l...aml1δ1la1l1δ2la2l1δ2la3l1δ2l...aml1δ2la1l1δ3la2l1δ3la3l1δ3l...aml1δ3l...a1l1δnla2l1δnla3l1δnl...aml1δnl] \frac{\partial C}{\partial w^l} = \partial C/\partial \begin{bmatrix} w^l_{11} & w^l_{12} & w^l_{13} & ... & w^l_{1m} \\ w^l_{21} & w^l_{22} & w^l_{23} & ... & w^l_{1m} \\ w^l_{31} & w^l_{12} & w^l_{13} & ... & w^l_{1m} \\ ... \\ w^l_{n1} & w^l_{n2} & w^l_{n3} & ... & w^l_{nm} \end{bmatrix}=\begin{bmatrix} a^{l-1}_1 \delta^l_1 & a^{l-1}_2 \delta^l_1 & a^{l-1}_3 \delta^l_1 & ... & a^{l-1}_m \delta^l_1 \\ a^{l-1}_1 \delta^l_2 & a^{l-1}_2 \delta^l_2 & a^{l-1}_3 \delta^l_2 & ... & a^{l-1}_m \delta^l_2 \\ a^{l-1}_1 \delta^l_3 & a^{l-1}_2 \delta^l_3 & a^{l-1}_3 \delta^l_3 & ... & a^{l-1}_m \delta^l_3 \\ ... \\ a^{l-1}_1 \delta^l_n & a^{l-1}_2 \delta^l_n & a^{l-1}_3 \delta^l_n & ... & a^{l-1}_m \delta^l_n \end{bmatrix}

于是得到:

Cwl=[δ1lδ2lδ3l...δnl][a1l1,a2l1,...,aml1] \frac{\partial C}{\partial w^l}= \begin{bmatrix} \delta_1^{l} \\ \delta_2^{l} \\ \delta_3^{l} \\ ... \\ \delta_n^{l} \end{bmatrix}\cdot [a^{l-1}_1, a^{l-1}_2, ..., a^{l-1}_m]

其中[δ1l,δ2l,...,δnl][\delta^l_1, \delta^l_2, ..., \delta^l_n]n1n * 1[a1l1,a2l1,...,aml1][a^{l-1}_1, a^{l-1}_2, ..., a^{l-1}_m]1m1 * m,最终得到nmn*m的权重矩阵。

results matching ""

    No results matching ""