【深度学习】CNN的发展历史、各项重要技术
发展历程:
leNet - AlexNet - VGG / GoogleNet(Inception) - resNet - denseNet - 剪枝
NiN / MSRANet / highwayNet /
【leNet】1998
经典的5层网络:( 卷积 + tanh + 池化) * 2 + 全连接 120 + 全连接 84 + outPut 10 (MNIST)
首次使用卷积代替全连接。卷积:pattern匹配 、局部连接、参数共享、平移等变
引入了最大池化提取特征 2x2 ,少量平移不变性。
【AlexNet】2012 ImageNet
网络更深:5个卷积层 + 3个全连接层
四个网络重点:
1、使用非饱和神经元relu,代替sigmoid,速度快
2、双GPU
3、添加了归一化LRN(local response normalization,局部相应归一化)层,提高泛化能力。
4、pooling overlap
过拟合解决:
增强数据:反射,旋转
加入dropout
将图像分为上下两部分,全连接合并在一起
【VGG】 2014 ImageNet
关键点:
用更深的网络表达特征,
提出3x3的卷积核,大卷积核可以通过小的+多层实现,非线性描述更多,参数更少。
提出1x1的卷积核,升维、降维、通道之间信息交换、增加非线性。
LRN / overlapPooling没用,
多尺度:裁剪到一个随机大小,再随机取其中的 224 x 224 的照片
参数爆炸多,大概有134m辣么多。 奇怪的是只用了74个epoch就训练好了,比AlexNet的90个还要少。
【GoogLeNet】2014 ImageNet 分类
V1
引入Inception,(1*1, 3*3, 5*5, 3*3maxPooling), 加入了好多个inception层,同时使用了不同的卷积核,从加深到加宽。
用GlobalAvgPool去代替全连接层,最终留下了一层方便做finetune的全连接层。
加了两个softmax分支,1是避免梯度消失(太深了),2是搞一个简单模型用于模型融合。
V2
用两个3x3代替了5x5
首次使用BN进行了正则化。
V3
使用 Factorization into small convolutions 的思想,将 7x7 的搞成 1x7 的和 7x1 的。
降低了参数量,能处理更加丰富的空间特征。
【resNet】
不是过拟合问题,不是梯度消失 、 梯度爆炸的问题: 之前的做法 BN, Relu。
主要解决的是神经网络退化的问题。
网络深度虽然有,但是实际表达不出来。
1、我们甚至不能很好的表达linear, relu会损失一些信息,不能从输出反推输入。那就直接加入linear
2、在某些层秩很小,越深就越难改变。
3、层之间的相关性随着层数增加持续衰减 甚至指数衰减。
空间 、 深度不一致问题: 空间不一致 加个weight / 深度不一致 加个1x1卷积核
使用global avg pooling代替全连接。
【denseNet】
将所有的 input 做concat, 然后经过Hl函数(BN relu 3x3卷积)
后续发展:
在denseNet上面剪枝。
个人思考:
CNN是在空间上共享参数 、 RNN是在时间上共享参数.
CNN通道数越来越多,单个feature map越来越小。
共享参数的条件: 结构相似,或者说是平移不变性。
局部连接 --> 一个点和附近的比较相关,和比较远的不太相关
不同size的卷积核 --> 不同大小的pattern
平移不变性 --> 金融数据一定没有, 要不要搞个weight