目录
习题5-7忽略激活函数,分析卷积网络中卷积层的前向计算和反向传播(公式(5.39))是一种转置关系.
习题5-2证明宽卷积具有交换性,即公式(5.13).
(5.13)
根据卷积,有:
变换坐标:,于是有:
因此原式变为:
根据宽卷积的性质,宽卷积仅是进行了X的零填充,可以发现该等式仍然成立,故宽卷积也符合可交换性。
习题5-3 分析卷积神经网络中用1×1的卷积核的作用
1、降维( dimension reductionality )。
比如,一张500 * 500且厚度depth为100 的图片在20个filter上做1*1的卷积,那么结果的大小为500*500*20。
2、升维(用最少的参数拓宽网络channal)
例子:64的卷积核的channel是64,只需添加一个1*1,256的卷积核,只用64*256个参数就能把网络channel从64拓宽四倍到256。
3、加入非线性。
卷积层之后经过激励层,1*1的卷积在前一层的学习表示上添加了非线性激励( non-linear activation ),提升网络的表达能力。
习题5-4
对于一个输入为100×100×256的特征映射,再进行3×3的卷积,得到100×100×256的特征映射组,求时间和空间复杂度。如果引入一个1×1卷积核,先得到100×100×64的特征映射,再进行3×3的卷积,得到100×100×256的特征映射组,求其时间和空间复杂度。
对于第一种情况:
其中,
对于第二种情况:
可以看出,使用1*1卷积核可以大大减少时间复杂度,代价是略微增加空间复杂度。
习题5-7忽略激活函数,分析卷积网络中卷积层的前向计算和反向传播(公式(5.39))是一种转置关系.
(5.39)
在第层时:净输入为
, 反向传播的误差项为
当在第l + 1 l+1l+1层时:净输入为,而反向传播的误差项为
因此,忽略激活函数下前向计算和反向传播是一种转置关系。
CNN的反向传播
首先要注意的是,一般神经网络中每一层输入输出a,z都只是一个向量,而CNN中的a,z是一个三维张量,即由若干个输入的子矩阵组成。其次:
1、池化层没有激活函数。这个问题倒比较好解决,我们可以令池化层的激活函数为σ(z)=z,即激活后就是自己本身。这样池化层激活函数的导数为1。
2、池化层在前向传播的时候,对输入进行了压缩,那么我们向前反向推导上一层的误差时,需要做upsample处理。
3、卷积层是通过张量卷积,或者说若干个矩阵卷积求和而得到当前层的输出,这和一般的网络直接进行矩阵乘法得到当前层的输出不同。这样在卷积层反向传播的时候,上一层误差的递推计算方法肯定有所不同。
4、对于卷积层,由于W使用的运算是卷积,那么由该层误差推导出该层的所有卷积核的W,b的方式也不同。
由于卷积层可以有多个卷积核,各个卷积核的处理方法是完全相同且独立的,为了简化算法公式的复杂度,我们下面提到卷积核都是卷积层中若干卷积核中的一个。
1、已知池化层的误差,反向推导上一隐藏层的误差
在前向传播时,池化层我们会用MAX或者Average对输入进行池化,池化的区域大小已知。现在我们反过来,要从缩小后区域的误差,还原前一层较大区域的误差。这个过程叫做upsample。假设我们的池化区域大小是2x2。第l层误差的第k个子矩阵为:
如果池化区域表示为a*a大小,那么我们把上述矩阵上下左右各扩展a-1行和列进行还原:
如果是MAX,假设我们之前在前向传播时记录的最大值位置分别是左上,右下,右上,左下,则转换后的矩阵为:
如果是Average,则进行平均,转换后的矩阵为:
上边这个矩阵就是误差矩阵经过upsample之后的矩阵,那么,由后一层误差推导出前一层误差的公式为:
上式和普通网络的反向推导误差很类似:
可以看到,只有第一项不同。
2、已知卷积层的误差,反向推导上一隐藏层的误差
公式如下:
我们再看一次普通网络的反向推导误差的公式:
可以看到区别在于,下一层的权重w的转置操作,变成了旋转180度的操作,也就是上下翻转一次,左右再翻转一次,这其实就是“卷积”一词的意义(我们可简单理解为数学上的trick),可参考下图,Q是下一层的误差,周围补0方便计算,W是180度翻转后的卷积核,P是W和Q做卷积的结果:
3、已知卷积层的误差,推导该层的W,b的梯度
经过以上各步骤,我们已经算出每一层的误差了,那么:
a)对于全连接层,可以按照普通网络的反向传播算法求该层W,b的梯度。
b)对于池化层,它并没有W,b,也不用求W,b的梯度。
c)只有卷积层的W,b需要求出,先看w:
再对比一下普通网络的求w梯度的公式,发现区别在于,对前一层的输出做翻转180度的操作:
而对于b,则稍微有些特殊,因为在CNN中,误差δ是三维张量,而b只是一个向量,不能像普通网络中那样直接和误差δ相等。通常的做法是将误差δ的各个子矩阵的项分别求和,得到一个误差向量,即为b的梯度:
参考:卷积神经网络(CNN)反向传播算法 - 刘建平Pinard - 博客园
心得体会
本次作业对课上卷积神经网络的通道和前向传播以及反向传播有了更深的理解:
1.初始化网络中所有权值W 和偏置参数b ;
2.利用前向传播算法计算最后一层输出a^l
3.使用softmax(将输出映射到(0,1))对输出处理,并计算损失函数J;
4.根据反向传播算法,计算损失函数J对各项权重或者偏置的偏导
5.利用梯度下降流,更新权重和偏置, ,返回至步骤2直至损失函数小于我们的预设值
虽然反向传播的过程可以直接用backward()求得,但技多不压身,还是要知道原理的。