0_2_5-池化层的反向传播-MaxPooling、AveragePooling、GlobalAveragePooling

numpy实现神经网络系列

工程地址:https://github.com/yizt/numpy_neuron_network

基础知识

0_1-全连接层、损失函数的反向传播

0_2_1-卷积层的反向传播-单通道、无padding、步长1

0_2_2-卷积层的反向传播-多通道、无padding、步长1

0_2_3-卷积层的反向传播-多通道、无padding、步长不为1

0_2_4-卷积层的反向传播-多通道、有padding、步长不为1

0_2_5-池化层的反向传播-MaxPooling、AveragePooling、GlobalAveragePooling、GlobalMaxPooling

0_3-激活函数的反向传播-ReLU、LeakyReLU、PReLU、ELU、SELU

0_4-优化方法-SGD、AdaGrad、RMSProp、Adadelta、Adam

DNN练习

1_1_1-全连接神经网络做线性回归

1_1_2-全连接神经网络做mnist手写数字识别

CNN练习

2_1-numpy卷积层实现

2_2-numpy池化层实现

2_3-numpy-cnn-mnist手写数字识别

本文目录

依赖知识

a) 熟悉全连接层、损失函数的反向传播

b) 熟悉卷积层的反向传播-多通道、有padding、步长不为1

c) 熟悉池化层Max Pooling、Average Pooling、Global Average Pooling、Global Max Pooling

d) 熟悉以上三点的依赖知识

约定说明

a) l l 代表网络的第l 层, zl z l 代表第 l l 层输出,zd,i,jl 代表第 l l 层第d 通道 (i,j) ( i , j ) 位置的值; zl z l 的通道数为 Cl C l , 高度和宽度分别为 Hl,W^l H l , W ^ l ( 避 免 与 权 重 相 同 )

b) 池化单元的大小为 (kl11,kl12) ( k 1 l − 1 , k 2 l − 1 ) ; 池化单元的步长为 (sl11,sl12) ( s 1 l − 1 , s 2 l − 1 ) ; padding为 (pl11,pl12) ( p 1 l − 1 , p 2 l − 1 )

c) 记 pzl1 p z l − 1 为l-1层增加零填充后的张量

d) 记损失函数L关于第 l l 层输出zl 的偏导为 δl=Lzl δ l = ∂ L ∂ z l

前向传播

Max Pooling和Average Pooling

​ 最大池化和平均池化,最大池化和平均池化和平均池化前向过程完全一样,只是使用的函数不同。

​ 根据以上约定,经过池化层后输出的高度 Hl H l 和宽度 W^l W ^ l 分别为 (Hl1+2pl11kl11)/sl11+1 ( H l − 1 + 2 ⋅ p 1 l − 1 − k 1 l − 1 ) / s 1 l − 1 + 1 (W^l1+2pl12kl12)/sl12+1 ( W ^ l − 1 + 2 ⋅ p 2 l − 1 − k 2 l − 1 ) / s 2 l − 1 + 1

​ 因此最大池化的前向公式为:

zlc,i,j=maxisl11m<isl11+kl11;jsl12n<jsl12+kl12(pzl1c,i,j)i[0,Hl1],j[0,W^l1](1) (1) z c , i , j l = max i ⋅ s 1 l − 1 ≤ m < i ⋅ s 1 l − 1 + k 1 l − 1 ; j ⋅ s 2 l − 1 ≤ n < j ⋅ s 2 l − 1 + k 2 l − 1 ( p z c , i , j l − 1 ) i ∈ [ 0 , H l − 1 ] , j ∈ [ 0 , W ^ l − 1 ]

​ 平均池化的前向公式为:

zlc,i,j=m=isl11isl11+kl111n=jsl12jsl12+kl121(pzl1c,i,j)/(kl11kl12)i[0,Hl1],j[0,W^l1](2) (2) z c , i , j l = ∑ m = i ⋅ s 1 l − 1 i ⋅ s 1 l − 1 + k 1 l − 1 − 1 ∑ n = j ⋅ s 2 l − 1 j ⋅ s 2 l − 1 + k 2 l − 1 − 1 ( p z c , i , j l − 1 ) / ( k 1 l − 1 ⋅ k 2 l − 1 ) i ∈ [ 0 , H l − 1 ] , j ∈ [ 0 , W ^ l − 1 ]

Global Max Pooling和Global Average Pooling

​ 全局最大池化和全局平均池化更加简单,是对单个通道上所有的元素求最大值和均值。所以经过全局平均池化后输出就是一维的了。

​ 因此全局最大池化的前向公式为:

zlc=max0m<Hl1;0n<W^l1(zl1c,m,n)(3) (3) z c l = max 0 ≤ m < H l − 1 ; 0 ≤ n < W ^ l − 1 ( z c , m , n l − 1 )

​ 全局平均池化的前向公式为:
zlc=m=0Hl11n=0W^l11(zl1c,i,j)/(Hl1W^l1)(4) (4) z c l = ∑ m = 0 H l − 1 − 1 ∑ n = 0 W ^ l − 1 − 1 ( z c , i , j l − 1 ) / ( H l − 1 ⋅ W ^ l − 1 )

反向传播

Max Pooling

​ 设 I(c,a,b)={(i,j)|argmaxm,n(pzl1c,i,j)isl11m<isl11+kl11;jsl12n<jsl12+kl12=(a,b)} I ( c , a , b ) = { ( i , j ) | arg ⁡ max m , n ⁡ ( p z c , i , j l − 1 ) i ⋅ s 1 l − 1 ≤ m < i ⋅ s 1 l − 1 + k 1 l − 1 ; j ⋅ s 2 l − 1 ≤ n < j ⋅ s 2 l − 1 + k 2 l − 1 = ( a , b ) } 代表最大池化过程中c通道上所有在l-1层最大值坐标在 (a,b) ( a , b ) 位置的坐标 (i,j) ( i , j ) (l层)的集合;

​ 则损失函数L关于最大池化层的偏导如下:

Lpzl1c,a,b=(i,j)I(c,a,b)Lzlc,i,jzlc,i,jpzl1z,a,b=(i,j)I(c,a,b)δlc,i,j(1)(5) (1) ∂ L ∂ p z c , a , b l − 1 = ∑ ( i , j ) ∈ I ( c , a , b ) ∂ L ∂ z c , i , j l ⋅ ∂ z c , i , j l ∂ p z z , a , b l − 1 (5) = ∑ ( i , j ) ∈ I ( c , a , b ) δ c , i , j l

δl1c=(Lpzl1c,a,b)pl11a<Hl1+pl11; pl12b<W^l1+pl12=((i,j)I(c,a,b)δlc,i,j)pl11a<Hl1+pl11; pl12b<W^l1+pl12(2)(6) (2) δ c l − 1 = ( ∂ L ∂ p z c , a , b l − 1 ) p 1 l − 1 ≤ a < H l − 1 + p 1 l − 1 ;   p 2 l − 1 ≤ b < W ^ l − 1 + p 2 l − 1 (6) = ( ∑ ( i , j ) ∈ I ( c , a , b ) δ c , i , j l ) p 1 l − 1 ≤ a < H l − 1 + p 1 l − 1 ;   p 2 l − 1 ≤ b < W ^ l − 1 + p 2 l − 1

​ 注:设矩阵 A=(ai,j)m×n A = ( a i , j ) m × n (ai,j)2i<5;4j<8 ( a i , j ) 2 ≤ i < 5 ; 4 ≤ j < 8 代表高度为第2行到第5行,宽度为第4列到第8列组成的矩阵

Average Pooling

​ 由公式(2)可知l层在高度i和宽度j上接收l-1层坐标范围分别是 [isl11,isl11+kl111][jsl12,jsl12+kl121] [ i ⋅ s 1 l − 1 , i ⋅ s 1 l − 1 + k 1 l − 1 − 1 ] 和 [ j ⋅ s 2 l − 1 , j ⋅ s 2 l − 1 + k 2 l − 1 − 1 ] ; 即

{isl11misl11+kl111jsl12njsl12+kl121(7) (7) { i ⋅ s 1 l − 1 ≤ m ≤ i ⋅ s 1 l − 1 + k 1 l − 1 − 1 j ⋅ s 2 l − 1 ≤ n ≤ j ⋅ s 2 l − 1 + k 2 l − 1 − 1

​ 可以推知l-1层坐标(m,n)对应l层坐标范围是:
mkl11+1sl11imsl11nkl12+1sl12jnsl12(8) (8) { ⌊ m − k 1 l − 1 + 1 s 1 l − 1 ⌋ ≤ i ≤ ⌊ m s 1 l − 1 ⌋ ⌊ n − k 2 l − 1 + 1 s 2 l − 1 ⌋ ≤ j ≤ ⌊ n s 2 l − 1 ⌋

​ 故则损失函数L关于平均池化层的偏导如下:
δl1c=(Lpzl1c,m,n)pl11m<Hl1+pl11; pl12n<W^l1+pl12=(ijδlc,i,j/(kl11kl12))pl11m<Hl1+pl11; pl12n<W^l1+pl12(3)(9) (3) δ c l − 1 = ( ∂ L ∂ p z c , m , n l − 1 ) p 1 l − 1 ≤ m < H l − 1 + p 1 l − 1 ;   p 2 l − 1 ≤ n < W ^ l − 1 + p 2 l − 1 (9) = ( ∑ i ∑ j δ c , i , j l / ( k 1 l − 1 ⋅ k 2 l − 1 ) ) p 1 l − 1 ≤ m < H l − 1 + p 1 l − 1 ;   p 2 l − 1 ≤ n < W ^ l − 1 + p 2 l − 1

​ 其中(i,j)满足公式(8)的条件,并且大于等于0

Global Max Pooling

​ 全局最大池化的反向公式如下

δl1c,i,j={δlc;0;(i,j)=argmaxm,n(zc,m,n)(10) (10) δ c , i , j l − 1 = { δ c l ; 如 果 ( i , j ) = arg ⁡ max m , n ( z c , m , n ) 0 ; 其 它

​ 注意第l层是一维的

Global Average Pooling

​ 全局平均池化就是后一层梯度平均的分给前一层所有的神经元,反向公式如下:

δl1c,i,j=δlc/(HlW^l1)(12) (12) δ c , i , j l − 1 = δ c l / ( H l ⋅ W ^ l − 1 )

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在深度学习中,Batch Normalization(BN)层和最大池化层反向传播过程是不同的。 对于BN层,反向传播的过程可以通过以下步骤进行: 1. 计算BN层的前向传播:首先,对于每个批次中的样本,计算其均值和方差。然后,使用这些均值和方差对输入数据进行标准化,并将其缩放和平移为输出。 2. 计算BN层的反向传播:在计算BN层的反向传播时,需要考虑到前向传播中标准化和缩放的操作。以下是反向传播的步骤: - 计算关于平移和缩放参数的梯度:通过链式法则,计算损失函数相对于平移参数和缩放参数的梯度。 - 计算关于输入数据的梯度:将平移和缩放参数的梯度乘以对应的标准化和缩放操作的导数,并将它们求和得到输入数据的梯度。 对于最大池化层反向传播的步骤如下: 1. 在前向传播过程中,最大池化层会记录下每个子区域中最大值的位置。 2. 在反向传播过程中,将损失函数关于输出值的梯度传播回来。这时,只有最大值所在的位置上的梯度会被传播,其他位置上的梯度都为零。 3. 最大池化层会将梯度传播到上一层,根据前向传播时记录的最大值位置,将梯度放置在对应的位置上。 这样,BN层和最大池化层就完成了反向传播过程。需要注意的是,不同的深度学习框架可能有不同的实现方式,但这里给出的是一般的反向传播思路。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值