购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

2.2 优化问题

我们一般只会用梯度下降进行优化,这种优化方法存在很多的问题.比如可能会卡在局部最小值的地方,无法找到一个真的可以让损失很低的参数,如图2.3(a)所示.而图2.3(b)所示的蓝色部分是模型可以表示的函数所形成的集合,可以把 代入不同的数值,形成不同的函数,把所有的函数集合在一起,得到这个蓝色的集合.在这个蓝色的集合里面,确实包含了一些损失较低的函数.但问题是,梯度下降法无法找出损失低的函数,梯度下降法旨在解决优化问题,找到 就结束了,但 对应的损失不够低.此时,到底是模型偏差还是优化的问题呢?找不到一个损失低的函数,到底是因为模型的灵活性不够,还是因为模型的灵活性已经够了,只是梯度下降过程没有达到预期?

图2.3 梯度下降法存在的问题

要回答上述问题,一种方法是,通过比较不同的模型来判断模型现在到底够不够大.举个例子,这个例子出自论文“Deep Residual Learning for Image Recognition” [1] .在测试集上测试两个网络,一个网络有20层,另一个网络有56层.图2.4(a)中的横轴代表训练过程,也就是参数更新的过程. 随着参数被更新,损失会越来越低,但结果是,20层网络的损失比较低,56层网络的损失还比较高.很多人认为这代表过拟合,即56层太多了,网络根本不需要这么深.但这不是过拟合,并不是所有结果不好的情况都叫作过拟合.在训练集上,20层网络的损失也是比较低的,而56层网络的损失比较高,如图2.4(b)所示,这代表56层网络的优化没有做好.

图2.4 残差网络的例子

Q:如何知道是56层网络的优化不好?为什么不是模型偏差?万一是因为56层网络的灵活性还不够呢?

A:比较56层网络和20层网络,20层网络的损失都已经可以做到这样了,56层网络的灵活性一定比20层网络的高.56层网络要做到20层网络可以做到的事情轻而易举,只要前20层的参数跟20层网络一样,剩下36层都复制前一层的输出就好了.如果优化成功,56层网络应该比20层网络得到更低的损失. 但结果并非如此,这不是过拟合,也不是模型偏差,因为56层网络的灵活性是够的,问题是优化做得不够好.

这里给大家的建议是,当看到一个从来没有见过的问题时,可以先尝试使用一些比较小的、比较浅的网络,甚至用一些非深度学习的方法,比如线性模型、 支持向量机(Support Vector Machine,SVM) . SVM可能是比较容易做优化的,它们不会有优化失败的问题.也就是说,这些模型会竭尽全力,在它们的能力范围之内,找出一组最好的参数.因此,可以先训练一些比较浅的网络,或者训练一些比较简单的模型,弄清楚这些简单的模型到底可以得到什么样的损失.

接下来还缺一个深的模型,如果深的模型跟浅的模型比起来,明明灵活性比较高,损失却没有办法比浅的模型压得更低,就说明优化有问题,需要用一些其他的方法来更好地进行优化.

举个例子,如图2.5 所示,2017年~ 2020年的数据组成训练集时,1层的损失是280,2层就降到180,3层就降到140,4层就降到100,但是5层的时候损失却变成340.损失很大显然不是模型偏差的问题,因为4层都可以降到100了,5层应该可以降至更低才对.这是优化的问题,优化做得不好才会造成这个样子.如果训练损失大,可以先判断是模型偏差还是优化的问题.如果是模型偏差的问题,就把模型变大.假设经过努力可以让训练数据上的损失变小,接下来可以看测试数据上的损失;如果测试数据上的损失也小,比这个较强的基线模型还要小,就结束.

图2.5 网络越深,损失反而变大

测试数据上的结果不好,不一定是过拟合.要把训练数据上的损失记下来,在确定优化没有问题、模型够大后,再看是不是测试的问题. 如果训练数据上的损失小,测试数据上的损失大,则有可能是过拟合. ogUny53j88PN5dc3aVhIFnub7hWHnn9dFVCQjtuoNWBIYXA9eIUPQv3EvaEFifSs

点击中间区域
呼出菜单
上一章
目录
下一章
×

打开