- 普遍问题:一般情况下 网络深度越大 网络的性能越好 泛化会更好 训练的失误会更小
但是网络越深越难优化
黄线表示20层网络训练误差的曲线 这里表示降低学习率 会有大幅度训练误差的下降 降低学习率可更好的找到局部最优解
这个图表示测试误差
当网络深度达到一定程度时 比如增加到56层 反而训练和测试误差都比20层高了
但这不是过拟合的问题 如果是因为过拟合 训练误差会持续下降 然后测试误差反而上升 所以这不是因为参数过多而造成的过拟合现象
为什么层次过深的网络更难训练呢?
比如当时最出名的VGG模型设计理念:
假如有一张图片 把他输入到卷积网络之中 网络浅层会维持比较大的空间分辨率 然后会以一定倍数逐渐增加通道大小 再增加通道数的同时也会减少下采样特征图的空间大小 然后特征通道数会越来越多 同时特征图的空间大小会越来越小
这样的设计理念就意味着 如果你在做一个分类任务 比如将一张图里的内容分类成乐高或者其他 物体具体在什么地方就不重要了 对于网络的底层滤波器 其实你是想让他能解析图像中非常低级的特征(比如说图像的边缘)这些特征所在的位置就非常重要
但是对于网络越高的层 抽取的特征也越来越抽象 其实经过分析我们也是到 网络越高的层更倾向于学习 提取更抽象的特征 然后公认的假设是 这些抽象特征的位置会越来越不重要 (如果你识别到图里有一个矩形 那么它出现在什么位置 跟其他物体是什么关系 现在都不是很重要)
如果我现在想识别一辆车 网络低层的滤波器会提取边缘特征 然后中间层滤波器会提取图中的几何形状特征(比如说车轮的形状和车身的形状 这些部分在什么位置并不重要)然后网络更高的层会学会如何组合这些独立的特征
对于越高的层次的特征来说 其出现的位置就越不重要 反而是构建更富表现力的特征变得越来越重要
因此体现在网络的设计上就是降低分辨率 同时增加特征图的数量
增加更多的层使其训练效果变差 不是因为过拟合 而是因为更多的层会导致更高的训练误差 性能的下降表示不是所有的系统都容易被优化
对一个深层次的网络 我们有上图这种方法:浅层次网络的参数直接复制到深层次网络对应位置 深层次网络的其他新添加的层次都只学习恒等映射函数 然后就等于把浅层次的网络学到的特征做简