在上一节中讲到,从AlexNet到VGG的过程可以看出,深度增加确实对模型的性能有较大的提升。但是,在其过程中VGG随着网络模型深度的增加准确度反而降低,这就说明,模型性能的影响因子不可能只来自于网络的深度。也就是说,并不是网络深度越深模型的性能就越好,当网络深度达到临界状态时,再盲目加大模型的深度,模型性能反而会降低。那影响模型性能的主要因素有哪些呢?主要有5个因素,如下所示:
- 网络深度;
- 学习率的设计策略;
- 最优化方法;
- 卷积核的设置;
- 其他因素;
1、网络深度
网络深度上文已经讲过,不再赘述。
2、学习率的设计策略
学习率主要是控制模型的学习进度或是速度。学习速率是指导我们该如何通过损失函数的梯度调整网络权重的超参数。学习率越高,损失函数的变化速度就越快,反之亦然。
需要指出的是高学习率会使损失函数变化加快,但是往往得不到最优解,即在最优解附近来回震荡且震荡幅度较大。但是,使用低学习率可以确保我们不会错过任何局部极小值,同样也意味着我们将花费更长的时间来进行收敛,特别是在被困在高原区域的情况下。此时学习率的设计策略就变得尤为重要。
学习率的主要策略有Step、Exp、Inv、Multistep、Poly、Sigmoid等,其中效果一般最好的是Step和Multistep,Inv效果比较差。学习率的大小一般设置在0.01 ~ 0.001。当然,不同的模型对学习率的策略与大小要求不同,这个需要开发者自己尝试。
3、最优化方法
最优化问题在机器学习/深度学习中是经常遇到的问题,也是很重要的一个问题。学习算法的本质都是建立优化模型,通过最优化方法对目标函数(或损失函数)进行优化,从而训练出最好的模型。常见的最优化方法主要有Adam、RMS(均方根)prop、AdaDelta、Adagrad、Momentum、SGD等。最优化方法的选择可以注意以下几点:
- 对于稀疏数据,尽量使用学习率可自适应的优化方法,不用手动调节,而且最好采用默认值;
- SGD通常训练时间更长,但是在好的初始化和学习率调度方案的情况下,结果更可靠;
- 如果在意更快的收敛,并且需要训练较深较复杂的网络时,推荐使用学习率自适应的优化方法;
- Adadelta,RMSprop,Adam是比较相近的算法,在相似的情况下表现差不多;
- 在想使用带动量的RMSprop,或者Adam的地方,大多可以使用Nadam取得更好的效果。
4、卷积核的设置
卷积核的大小、步长、padding等都会影响感受野的大小,也影响feature map的尺寸,这对特征的学习尤为重要。卷积核最常见的大小就是3x3和5x5,其他的相对应用较少。
值得注意的是,选择卷积核大小的原则是小而深,这样其可以达到大的卷积核的效果,但参数会减少,而且会有更好的泛化能力。为了加快速度,常常把卷积核裁开,比如一个3x3的卷积核,可以裁成一个3x1和1x3的卷积核(通过矩阵乘法得知),分别对原有输入做卷积运算,这样可以大大提升运算的速度。
5、其他因素
其他因素主要是正则化因子、BN层的设置、激活函数的设置、网络的宽度、数据的数量质量与均衡性、网络结构的设计等等。