动手学深度学习 | 使用块的网络VGG | 23
VGG
AlexNet最大的问题是什么呢?最大的问题就是长得不规则,虽然说它是一个变大的LeNet,但是感觉很随意,这里加一点,那里加一点。它的结构不够清晰,大家问了很多问题,为什么要这样,为什么要那样,要怎么变深怎么变宽都不知道。
如果想要把网络变得更深更大,那么就要把网络变得更加regular点,这个就是VGG的思路。
就算是今天的今天,深度学习的发展依然是更多的数据,更深、更大。
这里提出一个叫做VGG块的东西,就是AlexNet思路的拓展,
这里VGG都是用的\(3*3\)的卷积,因为它们发现堆深一点的\(3*3\)效果会比浅一点的\(5*5\)效果要好。
VGG块:n个\(3*3\)的卷积,还有一个\(2*2\)的maxpooling。
VGG可以看作把AlexNet替换成一个个的VGG块,然后将这些VGG块搭在一起。
最后VGG的两个4096全连接层和AlexNet是一致的,VGG只是把AlexNet前面的网络部分规整化了。
下面得到VGG系列,比如VGG16就是卷积层+全连接层总共有16层(含有可训练参数的层)。
AlexNet是一个很快的网络,大概5000/sec,当然精度不够高,大概是0.5的样子。
VGG对AlexNet的提升是很大的,但是它的代价是会慢很多,慢个5~6倍(1000/sec),因为VGG更深了。还有就是原点的大小表示网络占据内存的大小,所以其实VGG是非常耗费内存的。
当然看图上,我们还没讲的那些网络,VGG可以说在性能和精度上都不占优势。
第一个思想:使用可重复的块来构建深度神经网络
第二个思想:给出一个系列,有高配和低配,可以自己自己的硬件性能进行选择(后面出来的网络也基本都是出一个系列的)
代码实现
QA
- 在CV人工特征的研究还没有进展?研究如何设计更好的特征是不是也还有意义?尤其是提升研究能力方面。
现在这是非常政治不正确的,如果现在还做人工特征研究的话,可能就发不出论文了,这也和当年做神经网络发不出论文是一样的。研究领域就是一派压倒另外一派,所有的研究者都是喜新厌旧的,会觉得你这个东西不fancy。现在基本很少论文做人工特征提取,特别是在主流的CV领域。(其实这不是一件好事情,在学术界这是一派对另外一派的打压)
(但是工业界很多还是用人工特征;能自动化的事情为什么要人工做?)
但是沐神认为人工特征提取确实是应该被取代的,工业的发展都是机器自动化来慢慢取代人工,然后人可以去些更加高级的事情。
- 我们要学习特征值向量和奇异值分解的知识吗?
我们这门课不会讲,但是确实很多深度学习模型都有用到矩阵分解的思想。
但是其实矩阵分解不会用的很多,建议就是想学的话当然是好的,但是不学的话其实问题也不会很大。
- 训练loss一直下降,测试loss从开始起就一点不降成水平,是什么原因呢?
一个是可能验证的代码写错了,还有一个就是overfitting。
- 为什么VGG(1,1,224,224)的输入高宽减半后,通道数是64?
因为这是VGG的架构,VGG就是这么设计的。