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

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) 熟悉卷积层的反向传播-多通道、无padding、步长1

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

e) 熟悉以上4点的依赖知识

约定说明

a) l 代表网络的第 l 层, z l 代表第 l 层卷积, z d , i , j l 代表第 l 层卷积第 d 通道 ( i , j ) 位置的值; z l 的通道数为 C l , 高度和宽度分别为 H l , W ^ l ( )

b) W l 1 , b l 1 代表连接第 l 1 层和第 l 层的卷积核权重和偏置; 卷积核的维度为 ( 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 ) , 记 p z l 1 z l 1 高度和宽度这两个维度填充padding后的多维向量。

c) 记损失函数L关于第 l 层卷积的输出 z l 的偏导为 δ l = L z l       ( 3 )

前向传播

​ 有padding和没padding的前向传播过程完全一样,只需要将 无padding 中所有公式中的 z l 1 替换为 p z l 1 即可。

​ 因此根据以上约定,卷积核权重 W l 1 R k 1 l 1 × k 2 l 1 × C l 1 × C l ,偏置 b l 1 R C l ,每个输出通道一个偏置。 则有第 l 层卷积层,第 d 个通道输出为:

(4) z d , i , j l = c = 1 C l 1 m = 0 k 1 l 1 1 n = 0 k 2 l 1 1 W m , n , c , d l 1 p z c , i s 1 l 1 + m , j s 2 l 1 + n l 1 + b d l 1 i [ 0 , H l 1 ] , j [ 0 , W ^ l 1 ]

​ 其中: H l = ( H l 1 k 1 l 1 + 2 p 1 l 1 ) / s 1 l 1 + 1 ;           W ^ l = ( W ^ l 1 k 2 l 1 + 2 p 2 l 1 ) / s 2 l 1 + 1 ;

反向传播

​ 同样反向传播过程中,也只需要将 无padding 中所有公式中的 z l 1 替换为 p z l 1 即可。

权重梯度

a) 首先来看损失函数 L 关于第 l 1 层权重 W l 1 和偏置 b l 1 的梯度:

(1) L W m , n , c , d l 1 = i j L z d , i , j l z d , i , j l W m , n , c , d l 1 / / l d W m , n , c , d l 1 (2) = i j δ d , i , j l ( c = 1 C l 1 m = 0 k 1 l 1 1 n = 0 k 2 l 1 1 W m , n , c , d l 1 p z c , i s 1 l 1 + m , j s 2 l 1 + n l 1 + b d l 1 ) W m , n , c , d l 1 (5) = i j δ d , i , j l p z c , i s 1 l 1 + m , j s 2 l 1 + n l 1

b) 损失函数 L 关于第 l 1 层偏置 b l 1 的梯度同

(6) L b d l 1 = i j δ d , i , j l

l-1层梯度​

​ 根据 无padding 中公式(8)有

(8) L p z c , i , j l 1 = d = 1 C l m = 0 k 1 l 1 1 n = 0 k 2 l 1 1 r o t 180 W m , n , c , d l 1 p δ d , i + m , j + n l p a d d i n g

​ 其中 p δ d , i , j l p a d d i n g δ l 在行列直接插入 ( s 1 l 1 1 , s 2 l 1 1 ) 行列零元素后(即 δ l p a d d i n g ),再在元素外围填充高度和宽度为 ( k 1 l 1 1 , k 2 l 1 1 ) 的零元素后的梯度矩阵。

​ 我们知道 δ c l 1 就是 ( L p z c , i , j l 1 ) h × w 去除高度和宽度的填充后的矩阵,因此有

(3) δ c l 1 = ( L p z c , i , j l 1 ) p 1 l 1 i < H l 1 + p 1 l 1 , p 2 l 1 j < W ^ l 1 + p 2 l 1 (9) = ( d = 1 C l m = 0 k 1 l 1 1 n = 0 k 2 l 1 1 r o t 180 W m , n , c , d l 1 p δ d , i + m , j + n l p a d d i n g ) p 1 l 1 i < H l 1 + p 1 l 1 , p 2 l 1 j < W ^ l 1 + p 2 l 1

猜你喜欢

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