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 层, z l 代表第 l 层输出, z d , i , j l 代表第 l 层第 d 通道 ( i , j ) 位置的值; z l 的通道数为 C l , 高度和宽度分别为 H l , W ^ l ( )

b) 池化单元的大小为 ( k 1 l 1 , k 2 l 1 ) ; 池化单元的步长为 ( s 1 l 1 , s 2 l 1 ) ; padding为 ( p 1 l 1 , p 2 l 1 )

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

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

前向传播

Max Pooling和Average Pooling

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

​ 根据以上约定,经过池化层后输出的高度 H l 和宽度 W ^ l 分别为 ( H l 1 + 2 p 1 l 1 k 1 l 1 ) / s 1 l 1 + 1 ( W ^ l 1 + 2 p 2 l 1 k 2 l 1 ) / s 2 l 1 + 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 ]

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

(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

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

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

(3) z c l = max 0 m < H l 1 ; 0 n < W ^ l 1 ( z c , m , n l 1 )

​ 全局平均池化的前向公式为:
(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 ) | 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 ) 位置的坐标 ( i , j ) (l层)的集合;

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

(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

(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 = ( a i , j ) m × n ( a i , j ) 2 i < 5 ; 4 j < 8 代表高度为第2行到第5行,宽度为第4列到第8列组成的矩阵

Average Pooling

​ 由公式(2)可知l层在高度i和宽度j上接收l-1层坐标范围分别是 [ 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 ] ; 即

(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层坐标范围是:
(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关于平均池化层的偏导如下:
(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

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

(10) δ c , i , j l 1 = { δ c l ; ( i , j ) = arg max m , n ( z c , m , n ) 0 ;

​ 注意第l层是一维的

Global Average Pooling

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

(12) δ c , i , j l 1 = δ c l / ( H l W ^ l 1 )

猜你喜欢

转载自blog.csdn.net/csuyzt/article/details/82633051