目录
3. 对于一个二维卷积, 输入为3 × 3, 卷积核大小为2 × 2, 试将卷积操作重写为仿射变换的形式. 参见公式(5.45) .
4. 忽略激活函数, 分析卷积网络中卷积层的前向计算和反向传播(公式(5.39)) 是一种转置关系.
5. 在空洞卷积中, 当卷积核大小为𝐾, 膨胀率为𝐷时, 如何设置零填充𝑃的值以使得卷积为等宽卷积 .
附加题 阅读 “5.3.1 卷积神经网络的反向传播算法”,举例说明推导过程.
1.证明宽卷积具有交换性, 即公式(5.13).
证明:
由于是宽卷积,所以可以转化为:
W,X的通式为:
旋转180度:
给W行列两段各填充:m-1,n-1 ,得到填充后的
给X行列两段各填充:u-1,v-1 ,得到填充后的
根据前面的处理后的通式,计算得到:
由计算结果可得: 两式相等,只是x,w的顺序颠倒结果不变。
所以:宽卷积具有交换性。
在这个证明过程中,主要是使用具有一般性的通式,进行计算,走一遍计算的流程,得到根据通式计算的结果交换后是一样的,从而宽卷积的交换性。
2. 对于一个输入为100 × 100 × 256的特征映射组, 使用3 × 3的卷积核, 输出为100 × 100 × 256的特征映射组的卷积层, 求其时间和空间复杂度. 如果引入一个1 × 1卷积核, 先得到100 × 100 × 64的特征映射, 再进行3 × 3的卷积, 得到100 × 100 × 256的特征映射组, 求其时间和空间复杂度.
第一种情况:
第二种情况:
3363840 |
3. 对于一个二维卷积, 输入为3 × 3, 卷积核大小为2 × 2, 试将卷积操作重写为仿射变换的形式. 参见公式(5.45) .
输入和卷积核初始形式为:
将卷积操作重新写为仿射变换的形式,即:
C为卷积核变形的稀疏矩阵,因为x为的输入,将其拉为一个九维的向量,和C相乘结果和卷积的一样,所以w的稀疏矩阵为。再根据卷积的过程推出稀疏矩阵,得到仿射变换的形式如图所示:
4. 忽略激活函数, 分析卷积网络中卷积层的前向计算和反向传播(公式(5.39)) 是一种转置关系.
卷积层的前向传播:,写为仿射变换的形式,以上一题为例,输入,卷积核大小,经过卷积操作,实现了9维到4维的映射。
而反向传播过程:实现的是四维到九维的映射,
其形式正如:
所以:卷积网络中卷积层的前向计算和反向传播是一种转置关系.
5. 在空洞卷积中, 当卷积核大小为𝐾, 膨胀率为𝐷时, 如何设置零填充𝑃的值以使得卷积为等宽卷积 .
空洞卷积即为:在卷积核的每两个元素之间插入D − 1个空洞,以此来增加卷积核的大小,从而增加输出单元的感受野。如图所示:卷积核的有效大小为
等宽卷积即为:卷积输入和输出的宽度相同。
所以:要设置零填充𝑃的值以使得卷积为等宽卷积,应该满足:
所以:
附加题 阅读 “5.3.1 卷积神经网络的反向传播算法”,举例说明推导过程.
在卷积神经网络的反向传播算法,需要特别注意的点:
-
已知池化层的误差,反向推导上一隐藏层的误差
先将它还原为池化前的大小:
如果是前向传播过程中使用的是最大池化MAX,则根据在前向传播时记录的最大值位置,例如:分别是左上,右下,右上,左下,则转换后的矩阵为:
如果是平均池化Average,则进行平均:转换后的矩阵为:
这样,upsample函数完成了池化误差矩阵放大与误差重新分配的逻辑。
-
已知卷积层的误差,反向推导上一隐藏层的误差
卷积层的反向传播:过程和之前DNN的误差反向传播差不多,只是将W旋转了180度,进行转置。在误差矩阵周围填充了一圈0,此时将卷积核翻转后和反向传播的梯度误差进行卷积,就得到了前一次的梯度误差。详细流程如图所示:
公式如下:
-
已知卷积层的误差,推导该层的W,b的梯度
(1)对于卷积层W:公式如下,此时是层内的求导,而不是反向传播到上一层的求导 ,所以无需再反转卷积核。
而对于卷积层b:因为在CNN中,误差是三维张量,而b只是一个向量,不能像普通网络中那样直接和误差相等。通常的做法是将误差的各个子矩阵的项分别求和,得到一个误差向量,即为b的梯度:
(2)池化层没有W,b,不用 计算w,b。
(3)对于全连接层:
详细流程:
1. 对神经网络进行初始化,定义好网络结构,设定好激活函数,对卷积层的卷积核W、偏置b进行随机初试化,对全连接层的权重矩阵W和偏置b进行随机初始化。
设置好训练的最大迭代次数,每个训练batch的大小,学习率2. 从训练数据中取出一个batch的数据
3. 从该batch数据中取出一个数据,包括输入x以及对应的正确标注y
4. 前向传播:将输入x送入神经网络的输入端,得到神经网络各层输出参数z和a
5. 根据神经网络的输出和标注值y计算神经网络的损失函数
6. 计算损失函数对输出层的误差
7. 利用相邻层之间delta误差的递推公式求得每一层的delta误差
8. 利用每一层的误差求出损失函数对该层参数的导数
- 卷积层:
- 全连接层:
9. 将求得的导数加到该batch数据求得的导数之和上(初始化为0),跳转到步骤3,直到该batch数据都训练完毕
10. 利用一个batch数据求得的导数之和,根据梯度下降法对参数进行更新
11. 跳转到步骤2,直到达到指定的迭代次数
总结:
这次作业主要是就卷积神经网络的反向传播过程进行了详细总结,其中主要是公式的推导,没有像大佬们一样详细的一步一步进行推导,对于我有点困难,所以就自己按照老师们的推导过程走了一遍,进行了总结梳理,尤其是其公示的推导,它们和之前全连接的区别等等,包括前面几题对公式的证明理解。使我更加深入的了解学习了卷积神经网络的反向传播过程。