google inception网络
迁移学习
数据增强
如何使用开源代码
一、三个经典网络
LeNet
[LeCun et al., 1998. Gradient-based learning applied to document recognition]
这篇文章较早,比如现在常用max,而当时用avg,当时也没有softmax
AlexNet
[Krizhevsky et al., 2012. ImageNet classification with deep convolutional neural networks]
这篇文章让CV开始重视深度学习的使用,相对于LeNet-5,它的优点有两个:更大,使用ReLU
same表示使用same过滤器,也就是输入和输出维度一致
VGG-16
[Simonyan & Zisserman 2015. Very deep convolutional networks for large-scale image recognition]
16表示总共有16个CONV和FC,这篇文章指出了信道数和维度变化的规律性(随网络增加/减少),缺点是参数实在太多了
阅读论文顺序:2-3-1
二、残差网络
[He et al., 2015. Deep residual learning for image recognition]
残差网络基础
残差网络由残差块组成,它使得网络可以变得更深。蓝色为正常路径,紫色为短路/跳跃连接,$a^{[l]}$的信息会直接作为$a^{[l+2]}$计算的输入(残差)。插入的位置是线性计算后,激活前
plain network的问题
plain network指一般的网络。在plain network中随着深度增加,优化算法更难执行,所以可能会出现错误率先降后升的情况
网络越深越难训练:梯度消失/爆炸的问题
为什么Residual网络有用
假设对一个大型网络再增加两层(构成残差块)
$a^{[l+2]}=g(a^{[l]}+z^{[l+2]})\\=g(a^{[l]}+w^{[l+2]}a^{[l+1]}+b^{[l+2]})$
如果让$w^{[l+2]}=0$,$b^{[l+2]}=0$,则$a^{[l+2]}=g(a^{[l]})$
如果$g(x)$用ReLU激活函数,则$a^{[l+2]}=a^{[l]}$
所以,在原来的网络上加上两层,再通过残差网络,还是可以很容易学习到恒等关系
如果不用残差网络,$a^{[l+2]}=g(z^{[l+2]})=g(w^{[l+2]}a^{[l+1]}+b^{[l+2]})$,要用这个学习到$a^{[l+2]}=a^{[l]}$,明显会比上面的方式难
当$a^{[l+2]}$和$a^{[l]}$形状不同时,$a^{[l+2]}=W_sa^{[l]}$,增加一个$W_s$矩阵。这个矩阵可以是学习的矩阵/参数,或固定矩阵(只是对$a^{[l]}$用0进行填充,使得变成想要的矩阵)
残差网络的结构图
三、1x1卷积Network in network
[Lin et al., 2013, Network in network]
1x1卷积
当channel=1时,1x1没有什么效果
当channel=$n_c$时,$ReLU(n_hxn_wxn_c * (1x1xn_c)n_oc + b)=ReLU(n_hxn_wxn_oc + b)$,相当于对输入的元素运用了ReLU(非线性函数)
1x1卷积的作用
通过增加一个非线性函数使得信道数减少或保持不变(压缩信道的方法),以减少计算量
而池化层只能是对高度/宽度进行压缩
28x28x192 --ReLU(conv 1x1x32)-->28x28x32
四、google Inception网络
[Szegedy et al. 2014. Going deeper with convolutions]
Inception可以帮你决定应该采用什么样的过滤器,是否需要pool层等
它的做法是把各种过滤器的结果堆叠在一起
下例中的维度是自己定义的,这样最后输出的结果中会有256个信道
下图是一样Inception的一个基础块