卷积神经网络推导-批量图片矩阵计算

参考:卷积神经网络推导-单张图片矩阵计算

之前推导LeNet-5网络输入单个图像数据的前后向传播,现在实现批量图像数据的前后向传播

计算符号

  • $N$表示批量数据
  • $C$表示深度
  • $H$表示高度
  • $W$表示宽度
  • $output^{x}$表示第$x$层输出数据体

通道转换

使用OpenCVPIL读取一张图片,保存为numpy ndarray结构,图像尺寸前3位分别表示长度、宽度和深度:$[H, W, C]$

批量处理图像数据相当于在深度上进行累加,为方便计算,先转换成深度、长度和宽度:$[C, H, W]$

网络输出

对输入层

对卷积层$C1$

对池化层$S2$

对卷积层$C3$

对池化层$S4$

对卷积层$C5$

对全连接层$F6$

对输出层$F7$

前向计算

输入层

卷积层$C1$

共6个滤波器,每个滤波器空间尺寸为$5\times 5$,步长为$1$, 零填充为$0$

输出空间尺寸为$(32-5-2\cdot 0)/1+1=28$

所以单次卷积操作的向量大小为$1\cdot 5\cdot 5=25$,单个滤波器有$28\cdot 28=784$个局部连接,$N$张图片有$N\cdot 784$个局部连接

重置$y^{(1)}$大小,输出数据体$output^{(1)}\in R^{N\times 6\times 28\times 28}$

池化层$S2$

执行$\max$运算,每个滤波器空间尺寸$2\times 2$,步长为$2$

输出空间尺寸为$(28-2)/2+1=14$

所以单次$\max$操作的向量大小为$2\cdot 2=4$,单个滤波器有$6\cdot 14\cdot 14=1176$个局部连接, $N$张图片有$N\cdot 1176$个局部连接

$argz^{(2)} = argmax(a^{(1)})\in R^{(N\cdot 1176)}$,每个值表示单次局部连接最大值下标

重置$z^{(2)}$大小,输出数据体$output^{(2)}\in R^{N\times 6\times 14\times 14}$

卷积层$C3$

共16个滤波器,每个滤波器空间尺寸为$5\times 5$,步长为$1$, 零填充为$0$

输出空间尺寸为$(14-5+2\cdot 0)/1+1=10$

所以单次卷积操作的向量大小为$5\cdot 5\cdot 6=150$,单个滤波器有$10\cdot 10=100$个局部连接, $N$张图片有$N\cdot 100$个局部连接

重置$y^{(3)}$大小,输出数据体$output^{(3)}\in R^{N\times 16\times 10\times 10}$

池化层$S4$

执行$\max$运算,每个滤波器空间尺寸$2\times 2$,步长为$2$

输出空间尺寸为$(10-2)/2+1=5$

所以单次$\max$操作的向量大小为$2\cdot 2=4$,单个滤波器有$16\cdot 5\cdot 5=400$个局部连接, $N$张图片有$N\cdot 400$个局部连接

$argz^{(4)} = argmax(a^{(3)})\in R^{(N\cdot 400)}$,每个值表示单次局部连接最大值下标

重置$z^{(4)}$大小,输出数据体$output^{(4)}\in R^{N\times 16\times 5\times 5}$

卷积层$C5$

共120个滤波器,每个滤波器空间尺寸为$5\times 5$,步长为$1$, 零填充为$0$

输出空间尺寸为$(5-5+2\cdot 0)/1+1=1$

所以单次卷积操作的向量大小为$5\cdot 5\cdot 16=400$,单个滤波器有$1\cdot 1=1$个局部连接, $N$张图片有$N\cdot 1$个局部连接

输出数据体$output^{(5)}\in R^{N\times 120}$

全连接层$F6$

神经元个数为$84$

输出数据体$output^{(6)}\in R^{N\times 84}$

输出层$F7$

神经元个数为$10$

输出数据体$output^{(7)}\in R^{N\times 10}$

分类概率

$A\in R^{10\times 1}, B\in R^{10\times 1}$都是全$1$向量

损失值

$Y\in R^{N\times 10}$,仅有正确类别为1, 其余为0

反向传播

输出层$F7$

求输入向量$z^{(7)}$梯度

其他梯度

求权重矩阵$W^{(7)}$梯度

求偏置向量$b^{(7)}$梯度

$M=N$,表示$dz^{(7)}$的行数

求上一层输出向量$a^{(6)}$梯度

全连接层$F6$

求输入向量$z^{(6)}$梯度

其他梯度

求权重矩阵$w^{(6)}$梯度

求偏置向量$b^{(6)}$梯度

$M=N$,表示$dz^{(6)}$的行数

求上一层输出向量$a^{(5)}$梯度

卷积层$C5$

求输入向量$z^{(5)}$梯度

其他梯度

求权重矩阵$W^{(5)}$梯度

求偏置向量$b^{(5)}$梯度

$M=N$, 表示$dz^{(5)}$的行数

求上一层输出向量$a^{(4)}$梯度

池化层$S4$

计算$z^{(4)}$梯度

因为$a^{(4)}\in R^{N\times 400}$,$output^{(4)}\in R^{N\times 16\times 5\times 5}$,$z^{(4)}\in R^{(N\cdot 400)}$,卷积层$C5$滤波器空间尺寸为$5\times 5$,和激活图大小一致,所以$z^{(4)}$梯度是$a^{(4)}$梯度矩阵的向量化

上一层输出向量$a^{(3)}$梯度

配合$argz^{(4)}$,最大值梯度和$z^{(4)}$一致,其余梯度为$0$

卷积层$C3$

计算$y^{(3)}$梯度

因为$a^{(3)}\in R^{(N\cdot 400)\times 4}$,$output^{(3)}\in R^{N\times 16\times 10\times 10}$,$y^{(3)}\in R^{(N\cdot 100)\times 16}$,池化层$S4$滤波器空间尺寸为$5\times 5$,步长为$1$,按照采样顺序将$a^{(3)}$梯度重置回$output^{(3)}$梯度,再重置为$y^{(3)}$梯度

求输入向量$z^{(3)}$梯度

其他梯度

求权重矩阵$W^{(3)}$梯度

求偏置向量$b^{(3)}$梯度

$M=N\cdot 100$,表示$dz^{(3)}$的行数

求上一层输出向量$a^{(2)}$梯度

池化层$S2$

计算$z^{(2)}$梯度

因为$a^{(2)}\in R^{(N\cdot 100)\times 150}$,$output^{(2)}\in R^{N\times 6\times 14\times 14}$,$z^{(2)}\in R^{(N\cdot 1176)}$,卷积层$C3$滤波器空间尺寸为$5\times 5$,步长为$1$,所以按照采样顺序将$a^{(2)}$梯度重置回$output^{(2)}$梯度,再重置为$z^{(2)}$梯度

上一层输出向量$a^{(1)}$梯度

配合$argz^{(2)}$,最大值梯度和$z^{(2)}$一致,其余梯度为$0$

卷积层$C1$

计算$y^{(1)}$梯度

因为$a^{(1)}\in R^{(N\cdot 1176)\times 4}$,$output^{(1)}\in R^{N\times 6\times 28\times 28}$,$y^{(1)}\in R^{(N\cdot 784)\times 6}$,池化层$S2$滤波器空间尺寸为$2\times 2$,步长为$2$,按照采样顺序将$a^{(1)}$梯度重置回$output^{(1)}$梯度,再重置为$y^{(1)}$梯度

求输入向量$z^{(1)}$梯度

其他梯度

求权重矩阵$W^{(1)}$梯度

求偏置向量$b^{(1)}$梯度

$M=N\cdot 784$, 表示$dz^{(1)}$的行数

小结

矩阵计算的优缺点

  • 优点:逻辑简单,易于理解
  • 缺点:占用额外内存(因为计算过程中每层数据体的值都应用在矩阵多个位置
坚持原创技术分享,您的支持将鼓励我继续创作!