numpy实现神经网络系列
工程地址:https://github.com/yizt/numpy_neuron_network
基础知识
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练习
CNN练习
本文目录
依赖知识
a) 熟悉全连接层、损失函数的反向传播
b) 熟悉卷积层的反向传播-多通道、有padding、步长不为1
c) 熟悉池化层Max Pooling、Average Pooling、Global Average Pooling、Global Max Pooling
d) 熟悉以上三点的依赖知识
约定说明
a) l l 代表网络的第 层, zl z l 代表第 l l 层输出, 代表第 l l 层第 通道 (i,j) ( i , j ) 位置的值; zl z l 的通道数为 Cl C l , 高度和宽度分别为 Hl,W^l H l , W ^ l ( 避免与权重相同 避 免 与 权 重 相 同 )
b) 池化单元的大小为 (kl−11,kl−12) ( k 1 l − 1 , k 2 l − 1 ) ; 池化单元的步长为 (sl−11,sl−12) ( s 1 l − 1 , s 2 l − 1 ) ; padding为 (pl−11,pl−12) ( p 1 l − 1 , p 2 l − 1 )
c) 记 pzl−1 p z l − 1 为l-1层增加零填充后的张量
d) 记损失函数L关于第 l l 层输出 的偏导为 δl=∂L∂zl δ l = ∂ L ∂ z l
前向传播
Max Pooling和Average Pooling
最大池化和平均池化,最大池化和平均池化和平均池化前向过程完全一样,只是使用的函数不同。
根据以上约定,经过池化层后输出的高度 Hl H l 和宽度 W^l W ^ l 分别为 (Hl−1+2⋅pl−11−kl−11)/sl−11+1 ( H l − 1 + 2 ⋅ p 1 l − 1 − k 1 l − 1 ) / s 1 l − 1 + 1 和 (W^l−1+2⋅pl−12−kl−12)/sl−12+1 ( W ^ l − 1 + 2 ⋅ p 2 l − 1 − k 2 l − 1 ) / s 2 l − 1 + 1
因此最大池化的前向公式为:
平均池化的前向公式为:
Global Max Pooling和Global Average Pooling
全局最大池化和全局平均池化更加简单,是对单个通道上所有的元素求最大值和均值。所以经过全局平均池化后输出就是一维的了。
因此全局最大池化的前向公式为:
全局平均池化的前向公式为:
反向传播
Max Pooling
设 I(c,a,b)={(i,j)|argmaxm,n(pzl−1c,i,j)i⋅sl−11≤m<i⋅sl−11+kl−11;j⋅sl−12≤n<j⋅sl−12+kl−12=(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关于最大池化层的偏导如下:
注:设矩阵 A=(ai,j)m×n A = ( a i , j ) m × n 则 (ai,j)2≤i<5;4≤j<8 ( a i , j ) 2 ≤ i < 5 ; 4 ≤ j < 8 代表高度为第2行到第5行,宽度为第4列到第8列组成的矩阵
Average Pooling
由公式(2)可知l层在高度i和宽度j上接收l-1层坐标范围分别是
[i⋅sl−11,i⋅sl−11+kl−11−1]和[j⋅sl−12,j⋅sl−12+kl−12−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
]
; 即
可以推知l-1层坐标(m,n)对应l层坐标范围是:
故则损失函数L关于平均池化层的偏导如下:
其中(i,j)满足公式(8)的条件,并且大于等于0
Global Max Pooling
全局最大池化的反向公式如下
注意第l层是一维的
Global Average Pooling
全局平均池化就是后一层梯度平均的分给前一层所有的神经元,反向公式如下: