CNN反向传播和普通神经网络的联系和比较
BP神经网络反向传播反向传播是BP神经网络的特点,在之前的博客中已经粗略介绍了BP神经元以及反向传播的特点,对反向传播用较为直观图示解释。本博客将重点介绍其反向传播的传播过程。首先明确概念,反向传播就是得到整个网络的输出对每个门单元的梯度的过程。举例说明,f(x1,x2,x3,x4)=(max(x1,x2)+x3)∗x4f(x1,x2,x3,x4)=(max(x1,x2)+x3)∗...
BP神经网络反向传播
反向传播是BP神经网络的特点,在之前的博客中已经粗略介绍了BP神经元以及反向传播的特点,对反向传播用较为直观图示解释。
本博客将重点介绍其反向传播的传播过程。
首先明确概念,反向传播就是得到整个网络的输出对每个门单元的梯度的过程。
举例说明, f(x1,x2,x3,x4)=(max(x1,x2)+x3)∗x4 f ( x 1 , x 2 , x 3 , x 4 ) = ( m a x ( x 1 , x 2 ) + x 3 ) ∗ x 4 <script type="math/tex" id="MathJax-Element-1">f(x_1,x_2,x_3,x_4) = (max(x_1,x_2)+x_3)*x_4</script>
那么, dfdx1 d f d x 1 <script type="math/tex" id="MathJax-Element-2">\frac{df}{dx_1}</script> , dfdx2 d f d x 2 <script type="math/tex" id="MathJax-Element-3">\frac{df}{dx_2}</script>, dfdx3 d f d x 3 <script type="math/tex" id="MathJax-Element-4">\frac{df}{dx_3}</script>, dfdx4 d f d x 4 <script type="math/tex" id="MathJax-Element-5">\frac{df}{dx_4}</script> 如何计算,含义是什么?
1.如果 x1>x2 x 1 > x 2 <script type="math/tex" id="MathJax-Element-6">x_1>x_2</script>, 那么 dfdx1=x4 d f d x 1 = x 4 <script type="math/tex" id="MathJax-Element-7">\frac{df}{dx_1}=x_4</script>,反之为0,也就是说如果 x1>x2 x 1 > x 2 <script type="math/tex" id="MathJax-Element-8">x_1>x_2</script>,那么 x1 x 1 <script type="math/tex" id="MathJax-Element-9">x_1</script>对输出有影响,反之没影响
2.如果 x2>x1 x 2 > x 1 <script type="math/tex" id="MathJax-Element-10">x_2>x_1</script>, 那么 dfdx2=x4 d f d x 2 = x 4 <script type="math/tex" id="MathJax-Element-11">\frac{df}{dx_2}=x_4</script>,反之为0,含义与 x1 x 1 <script type="math/tex" id="MathJax-Element-12">x_1</script>相同
3. dfdx3=x4 d f d x 3 = x 4 <script type="math/tex" id="MathJax-Element-13">\frac{df}{dx_3}=x_4</script>,这说明 x3 x 3 <script type="math/tex" id="MathJax-Element-14">x_3</script>的变化对整个输出的影响与 x4 x 4 <script type="math/tex" id="MathJax-Element-15">x_4</script>成正比
4. dfdx4=max(x1,x2)+x3 d f d x 4 = m a x ( x 1 , x 2 ) + x 3 <script type="math/tex" id="MathJax-Element-16">\frac{df}{dx_4}=max(x_1,x_2)+x_3</script>,这说明 x4 x 4 <script type="math/tex" id="MathJax-Element-17">x_4</script>的变化对整个输出的影响与 max(x1,x2)+x3 m a x ( x 1 , x 2 ) + x 3 <script type="math/tex" id="MathJax-Element-18">max(x_1,x_2)+x_3</script>成正比
其次,总结加法,乘法,最大值操作对梯度的作用。
1 加法门单元把输出的梯度相等地分发给它所有的输入
2 取最大值门单元对梯度做路由
3 乘法门单元是相互交换输入值
根据以上方法计算梯度,我们就可以知道,应该改变哪几个变量,才能使整个网络的loss function值最小,这也就完成了反向传播的过程
上述计算的梯度,我们可以借助雅可比矩阵(jacobi matrix) 存储,雅可比矩阵的形式如下:
举个例子,如果输入 x x <script type="math/tex" id="MathJax-Element-20">x</script>为4096维向量, <script type="math/tex" id="MathJax-Element-21">f=max(x,0)</script>
1.那么雅可比矩阵的尺寸?
4096∗4096 4096 ∗ 4096 <script type="math/tex" id="MathJax-Element-22">4096*4096</script>
2.这个雅可比矩阵是怎样的?
只有对角线上有值,其余为0,并且如果 xi x i <script type="math/tex" id="MathJax-Element-23">x_i</script>小于0,那么雅可比矩阵第i行i列的值也为0,如果 xi x i <script type="math/tex" id="MathJax-Element-24">x_i</script>大于0,那么雅可比矩阵第i行i列的值为1
CNN反向传播
有了上面的讨论之后,CNN的反向传播就容易理解了很多,这里我们主要讨论卷积层和pooling层的反向传播。
卷积层
下面的图片引自CNN的反向传播

事实上,卷积层跟普通的全连接层的不同之处就在于参数的共享,也就是说,并不是每一个输入像素所对应的权重都不同,这主要是为了减少在图像领域参数过多导致的过拟合现象。而参数共享之所以可以得到很好的效果,与图像的局部相关性有关,某一个位置的像素可能只与周围一定范围内的像素相关,与距离很远的像素关系不大。
因此基于上述分析以及对于bp链式法则的了解,我们可以定义后一层的误差为 lossl l o s s l <script type="math/tex" id="MathJax-Element-25">loss_l</script>,其中 l l <script type="math/tex" id="MathJax-Element-26">l</script>表示层数。从而求前一层的误差 <script type="math/tex" id="MathJax-Element-27">loss_{l-1}</script>,以及权重的导数 dfdwl d f d w l <script type="math/tex" id="MathJax-Element-28">\frac{df}{dw_l}</script>,以及偏置的导数 dfdbl d f d b l <script type="math/tex" id="MathJax-Element-29">\frac{df}{db_l}</script>。
首先我们来计算误差 lossl−1 l o s s l − 1 <script type="math/tex" id="MathJax-Element-30">loss_{l-1}</script>:
其中, zl z l <script type="math/tex" id="MathJax-Element-32">z_l</script>表示第 l l <script type="math/tex" id="MathJax-Element-33">l</script>层的输入, <script type="math/tex" id="MathJax-Element-34">a_{l-1}</script>表示第 l−1 l − 1 <script type="math/tex" id="MathJax-Element-35">l-1</script>层输出,那么这个问题就转换为,计算 dzldal−1 d z l d a l − 1 <script type="math/tex" id="MathJax-Element-36">\frac{dz_l}{da_{l-1}}</script>
以上图为例,我们计算左上角位置 (0,0) ( 0 , 0 ) <script type="math/tex" id="MathJax-Element-37">(0,0)</script>的导数,因为这个像素只与粉色权重相乘,所以它的导数就是粉色权重。位置 (0,1) ( 0 , 1 ) <script type="math/tex" id="MathJax-Element-38">(0,1)</script>的导数,在卷积核的滑动过程中会分别与绿色权重和粉色权重相连,因此,它的导数包括了这两部分。如果用公式来表示上述过程:
权重的导数 dfdwl d f d w l <script type="math/tex" id="MathJax-Element-40">\frac{df}{dw_l}</script>,以及偏置的导数 dfdbl d f d b l <script type="math/tex" id="MathJax-Element-41">\frac{df}{db_l}</script>就很容易计算了,分别为 al−1∗lossl a l − 1 ∗ l o s s l <script type="math/tex" id="MathJax-Element-42">a_{l-1}*loss_l</script>以及 lossl l o s s l <script type="math/tex" id="MathJax-Element-43">loss_l</script>
pooling层
pooling层理解起来就更为简单,将之前卷积层的计算公式照搬下来, dzldal−1 d z l d a l − 1 <script type="math/tex" id="MathJax-Element-44">\frac{dz_l}{da_{l-1}}</script>理解为对 lossl l o s s l <script type="math/tex" id="MathJax-Element-45">loss_l</script>上采样之后求导。
那么这个上采样过程就分为两种,一种是average,一种是max。在average的计算中,将 lossl l o s s l <script type="math/tex" id="MathJax-Element-47">loss_l</script>平分给每个位置,而max时,只把 lossl l o s s l <script type="math/tex" id="MathJax-Element-48">loss_l</script>放在最大位置即可,其他与卷积的计算相同
更多推荐
所有评论(0)