之前也总结过一些:机器学习与深度学习基础学习笔记_是魏小白吗的博客-CSDN博客
深度可分离卷积的计算量与普通卷积计算量的对比
这部分之前也详细的论述过,这里就不再重述了,在这里放上链接:机器学习笔记(15)轻型网络(MobileNet GhostNet ShuffleNet)的计算量_是魏小白吗的博客-CSDN博客_shufflenet计算量
传统卷积的计算量应为:Dk × Dk × M × N × DF × DF,可以看到与输出特征图的尺寸是没有关系的,只与输出特征图的通道有关
DW的计算量为Dk × Dk × M × DF × DF,对比一下两者,仍然与输出尺寸无关,而由于是以组的形式(M个组)使输入与卷积通道“一一对应”,所以不会产生额外的N
PW的计算量自然就是1 × 1 × M × N × DF × DF,其实就是使用1x1卷积,所以直接把DF赋值为1即可
MobileNet相关
MobileNet就是使用DW和PW堆积而成的
MobileNet的网络结构如图1所示。首先是一个3x3的标准卷积,然后后面就是堆积DW,并且可以看到其中的部分DW会通过strides=2进行下采样。然后采用average pooling将feature map变成1x1,根据预测类别大小加上全连接层,最后是一个softmax层。如果单独计算DW和PW,整个网络有28层(这里Avg Pool和Softmax不计算在内)。我们还可以分析整个网络的参数和计算量分布,如表2所示。可以看到整个计算量基本集中在1x1卷积上,如果你熟悉卷积底层实现的话,你应该知道卷积一般通过一种im2col方式实现,其需要内存重组,但是当卷积核为1x1时,其实就不需要这种操作了,底层可以有更快的实现。对于参数也主要集中在1x1卷积,除此之外还有就是全连接层占了一部分参数。
GhostNet相关
GhostNet应用DW和PW也很好理解,
等式中的分子部分就是一个常规卷积的计算,下面可以这样理解:GhostNet论文中提到在计算特征图输出的时候会有很多冗余的、相似的计算。既然是冗余的和相似的计算,那么我们就可以使用线性计算代替。理论上应该不会损失效果且提升计算速度。故而我们拿出n/s部分仍采用常规的卷积计算保证效果,剩下的(s-1)*n/s只使用一个线性运算代替。经过上式的对比,可以有效减小计算量。
做比例计算之后意外发现结果竟然是S,那就是说该模型的速度与准确率之间的平衡直接由S完成
VGG网络基本知识点
今天的面试有一道题是关于VGG网络的,发现对经典网络竟然不太熟悉了,于是找了几篇文章冲洗复习了一下
VGG16相比AlexNet的一个改进是采用连续的几个3x3的卷积核代替AlexNet中的较大卷积核(11x11,7x7,5x5)。对于给定的感受野(与输出有关的输入图片的局部大小),采用堆积的小卷积核是优于采用大的卷积核,因为多层非线性层可以增加网络深度来保证学习更复杂的模式,而且代价还比较小(参数更少)。
VGG16包含了16个隐藏层(13个卷积层和3个全连接层),如上图中的D列所示
VGG19包含了19个隐藏层(16个卷积层和3个全连接层),如上图中的E列所示
总之,作为CNN领域的开篇论文之一,它的主要贡献就是论证了使用多个小卷积叠加,效果和准确率都会有所改善。
但是不能无限制的叠加,因为网路层数过深后会导致梯度消失和梯度爆炸
可以看到VGG中已经有所使用1x1的卷积,只不过这个时候作者都还没意识到1x1卷积的潜力
关于正则化项L1、L2
1. L1与L2的公式
L1正则化项公式为所有元素的绝对值之和; L2正则化项为即所有元素平方后开方
2. L1与L2的异同点
2.1 最经典的解释是这种:https://blog.csdn.net/jinping_shi/article/details/52433975,也就是说通过那两幅图(见链接),我们可了解到:
L1正则化可以产生稀疏权值矩阵,即产生一个稀疏模型,可以用于特征选择。通过那幅图解释可以直观想象,因为L1正则项有很多『突出的角』(二维情况下四个,多维情况下更多),待优化函数与这些角接触的机率会远大于与 L1其它部位接触的机率(这是很直觉的想象,突出的角比直线的边离等值线更近些,而在这些角上,会有很多权值等于0(因为角就在坐标轴上),这就是为什么L1正则化可以产生稀疏模型,进而可以用于特征选择。
L2正则化可以防止模型过拟合(overfitting),因为它能让参数尽可能的小:拟合过程中通常都倾向于让权值尽可能小,最后构造一个所有参数都比较小的模型。因为一般认为参数值小的模型比较简单,能适应不同的数据集,也在一定程度上避免了过拟合现象。可以设想一下对于一个线性回归方程,若参数很大,那么只要数据偏移一点点,就会对结果造成很大的影响;但如果参数足够小,数据偏移得多一点也不会对结果造成什么影响,专业一点的说法是『抗扰动能力强』。而L2正则化可以获得值很小的参数。具体推导见链接。
L2不具有稀疏性:通过那幅图解释,二维平面下L2正则化的函数图形是个圆(绝对值的平方和,是个圆),与方形相比,被磨去了棱角。因此待优化函数J与L2相交时使得w^2或w^2等于零的机率小了许多(这个也是一个很直观的想象),这就是为什么L2正则化不具有稀疏性的原因,因为不太可能出现多数 w1 w2都为0的情况。
2.2 字节跳动的面经中找到一种说法:L2因为要平方,数值很大,所有一开始训练会容易不稳定。但是训练到后期,L1斜率一直是1,会有些没必要的计算。所以常用的应该是L2
2.3 这里有一种好玩的说法:https://blog.csdn.net/vincent2610/article/details/53408088,
相同点:都用于避免过拟合
不同点:L1可以让一部分特征的系数缩小到0,从而间接实现特征选择。所以L1适用于特征之间有关联的情况。
L2让所有特征的系数都缩小,但是不会减为0,它会使优化求解稳定快速。所以L2适用于特征之间没有关联的情况
感受野的计算
1 参考:https://blog.csdn.net/qq_36653505/article/details/83473943,链接内的图片展示了感受野的接受过程。“第N层的感受野是多大?”这个问题等价于“第N层输出特征图中的一个元素是由原图像中多少个像素计算得到的”
2 感受野的计算:RFn=RFn-1 + (kn-1)*stride_n,其中stride_n表示的是第n次卷积的移动步幅stride。注意求解过程是从RF1开始的,RF1一定为第一个卷积核的尺寸大小
3 感受野的计算如果步长为1的时候就是RFn=RFn-1 + (kn-1),比较容易计算
4 需要注意的不能通过计算输出特征图的尺寸推算感受野,这其中设计步长调整感受野。如20x20的输入,第一层k=3,s=2,第二层k=3,s=2。第一层过后输出为9x9,感受野为3.第二程后输出为4x4,公式计算感受野为7,而不是20/4=5