5-2
证明过程如下:
5-4:
卷积神经网络的复杂度分析:
时间复杂度:
单个卷积层的时间复杂度:Time~O(M^2 * K^2 * Cin * Cout)
M:输出特征图的尺寸。 K:卷积核的尺寸。
Cin:输入通道数。 Cout:输出通道数。
空间复杂度:
Space~O(K^2 * Cin * Cout)
空间复杂度与输入尺寸无关
(1)
时间复杂度:
空间复杂度:
(2)引入1*1卷积核
时间复杂度:
空间复杂度:
从上述计算可得知,引入1*1卷积核后时间复杂度和空间复杂度都大幅降低,当卷积网络很复杂时,可以通过1*1卷积核将输入通道数先降到一个较低的值,再进行真正的卷积。
5-5:
二维图像仿射变换可以写成矩阵相乘形式:
(1)只有线性变换的仿射变换:
(2)只有平移变换的仿射变换
(3)既有线性变换又有平移变换
本题:
5-7:
以书p127的仿射变换例题为例,当一个五维向量x经过大小为3的卷积核w卷积,会得到一个三维向量z,经过仿射变换,得到如下:
当要实现3维向量z到5维向量x的映射,通过了仿射矩阵的转置实现:
在卷积网络层中,第l层时,净输入为,反向传播的误差项
当在第l+1层时,净输入,而反向传播的误差项为
因此,综上所述,前向传播和反向传播是一种转置关系,
5-8:
空洞卷积是一种不增加参数数量,同时增加输出单元感受野的一种方法,也称膨胀卷积,通过给卷积核插入若干个空洞来变相增加其大小
如果在每两个元素之间插入D-1个空洞,卷积核的有效大小为:
等宽卷积是当步长S=1时,两端补零P=(K-1)/2,卷积后输出一个与输入大小相同的卷积结果
综上,将带入
最后得到
附加题:
先推导:已知池化层的,推导上一隐藏层的
从缩小后的误差还原前一次较大区域对应的误差,在反向传播时,我们首先会把的所有子矩阵矩阵大小还原成池化之前的大小,然后如果是MAX,则把的所有子矩阵的各个池化局域的值放在之前做前向传播算法得到最大值的位置。如果是Average,则把的所有子矩阵的各个池化局域的值取平均后放在还原后的子矩阵位置。
假设池化区域大小2*2,的第k个子矩阵为
还原上一层:
如果是MAX,假设我们之前在前向传播时记录的最大值位置分别是左上,右下,右上,左下,则转换后的矩阵为:
如果是Average,则进行平均:转换后的矩阵为:
这样就完成了池化误差矩阵放大与误差重新分配的逻辑
已知卷积层的误差,反向推导上一隐藏层的误差
卷积层的反向传播在原输入的每个点计算不同,如图:
图一A点的误差只对结点C有一个权重为B的影响,对卷积结果中的其它结点没有任何影响,A的delta误差应该等于C点的delta误差乘上权重B,图二A点受B和C共同的影响,它的delta误差就等于D点delta误差乘上C加上E点的delta误差乘上B
所以能推导出原图的delta误差,等于卷积结果的delta误差经过零填充后,与卷积核旋转180度后的卷积,
如图:
已知卷积层的误差,推导该层的W,b的梯度:
卷积核并没有反转,主要是层内的求导,而不是反向传播到上一层的求导:
对于卷积层b:因为在CNN中,误差是三维张量,而b只是一个向量,不能像普通网络中那样直接和误差相等。通常的做法是将误差的各个子矩阵的项分别求和,得到一个误差向量,即为b的梯度:
全连接层:
CNN的反向传播算法总结:
从反向传播开始,利用相邻层之间delta误差的递推公式求得每一层的delta误差
利用每一层的delta误差求出损失函数对该层参数的导数
将求得的导数加到该batch数据求得的导数之和上(初始化为0),跳转到步骤3,直到该batch数据都训练完毕
利用一个batch数据求得的导数之和,根据梯度下降法对参数进行更新,直到达到指定的迭代次数
(CNN的反向传播算法实在没有啥头绪,然后我对别人的梳理了一遍,推导总结了一下)