Classic Network
LeNet - 5
LeNet-5是1998年的,非常早期,总共有60k个parameter,有如下几个特点:
1. 结构已经是conv pool conv pool FC FC Output 这种架构,可以看出来当年使用的还是avg pool,现在经常用的是max pool;
2. 随着层次增加
nH,nW
n
H
,
n
W
下降,
nC
n
C
上升;
3. Activation function是sigmoid/tanh,而现在是ReLU。
AlexNet
AlexNet是2012年ImageNet的比赛中让DL大放光彩的一个网络,有如下几个特点:
1. 和LeNet非常像,但是深度会非常深;
2. 使用了ReLU Activation;
3. 使用多个GPU进行权重计算;
4. 使用了Local Response Normalization(LRN,现在已经很少使用了)
VGG-16
VGG-16是15年的,特点是:
1. 非常深,参数在135M
2. 结构比较uniform
ResNet
Residual Network
ResNet包含了Residual Block,如下图所示
在main path上边加入了short cut/skip 连接。
由于深层次网络会出现梯度消失/爆炸的问题,所以理论上虽然layers数量增加,training error会下降,但是实际上到达一定layers之后,training error又会上升。而ResNet则不会。
为什么ResNet Work?
假设我们在一个NN后边加上一个ResBlock,由于shortcut的存在,当ResBlock里边的层中W全是0的时候,能够得到 a[l+2]=g(z[l+1]+a[l])=g(W[l+1]a[l+1]+b[l+1]+a[l])=a[l],g=ReLU,W=0 a [ l + 2 ] = g ( z [ l + 1 ] + a [ l ] ) = g ( W [ l + 1 ] a [ l + 1 ] + b [ l + 1 ] + a [ l ] ) = a [ l ] , g = R e L U , W = 0 ,这种情况就是identity function了,对于残差网络来说非常容易学习(其实就是啥也没学到呗),这样就不会损失性能了(因为skip导致这两层相当于啥也没加)。但是中间这一层一般会比较幸运的又学习到一些东西,那么在这种情况下就会对性能有所增益。(Dr Ng这么解释的。。。)
Network in network (NIN)
Network in network就是一个one by one filter。例如一个输入是64x64x192,那么应用一个1x1x192,filter数量是6的filter,得到一个64x64x6的结果,然后做一个ReLU,这个好处就是可以将通道数降下来。这个单独用NIN,挺少的,但是这个NIN对之后的网络结构影响很多,尤其是后边提及的inception network。
[Lin etc, Network in network, 2016]
Inception Network
Motivation
- 初衷就是,与其自己设置1x1, 3x3, 5x5,以及max pooling,干脆让network自己选。
- 例如28x28x192的input,1x1的有64个,3x3的有128个,5x5的有32个,max-pool有32个。然后把结果stack起来,变成64+128+32+32=256个。
- 但是问题是这种计算量非常大。例如5x5那个,计算量就是5x5x28x28x32x192=120M次乘法运算。这个对现代计算机而言也非常计算量大。所以用NIN做一个简化。
- NIN简化:先把28x28x192和1x1x192x16进行运算,计算量是28x28x192x1x1x16=2.4M,加上后边的28x28x32x5x5x32=10M,这样一共是12.4M,这样就减少了10倍。
Inception module
如图所示,Inception module。
GoogleNet
CNN实践建议
- 多用开源实现
- Transfer Learning
也就是说,用已有的框架,部分训练然后训练。这个是针对数据量比较小的情况。一般有三个级别:
- 如果数据量很少,那么就训练output layer;
- 数据量多一些,就训练后边的几个层,就相当于训练高层特征;
- 数据量再多,那就全都训练。
目前为止还没有一个框架能够部分训练,所以Dr Ng建议是可以把自己的数据,先用人家的固定好的参数数据都算出来,存好,然后训练这个数据就好了。
- Data Augmentation
主要有两类:
- 仿射变换类的:例如镜像,缩放,平移,random cropping
- RGB shifting,也就是换颜色。
State of CV
就目前而言,从数据量而言speech的问题>>Image Recognization >> Object Detection
数据量越多,hand-engineering就越少,数据量越少,hand-engineering就越多。
多用用多参考opensource的东西。