【机器学习】李宏毅——浅谈机器学习原理+鱼与熊掌兼得的深度学习简述
如何评判一个训练集的好坏
如果我们希望得到一个训练集,并且用该训练集所训练出来的模型,在训练集上的误差和在整个数据空间上的误差相距较小,即写成如下表达式:
那么训练集\(D_{train}\)应该满足的条件为:
即对于假设空间中的任何模型在训练集上的误差和在整个数据空间上的误差之间的误差都小于某个值。推导过程如下:
因此,我们总希望得到一个好的样本集,其能够满足:
下面则来探讨一下我们选取到坏的数据集的概率。
由前述的讨论可知,一个\(D_{train}\)是坏的,则至少存在一个h使得它不满足上式,那么可以认为:
那么可以看到:增加训练集样本的数据\(N\)或者减少假设空间的大小\(\lvert H \rvert\)都可以使得拿到坏数据集的概率降低
但在实际运用中很少采用这样来进行衡量,因为随机计算一下上界就大于1了,这只是给我们启发如何做而已。
而在现实中通常另外收集数据这个方法很难实现,那如果刻意去减少\(H\)的大小呢,这虽然可以使上界降低,但如果使得\(H\)都没有能够让损失函数很小的假设,那这个减少就很没有意义了。如下图,虽然在更小的\(H\)能够让训练假设的误差更接近于完美假设的误差,但这个完美假设是在这个小的假设空间中选出来的,很可能它本身的误差就很大。
那么有没有可能有一个loss很低的完美假设,同时还能够让现实训练出来的假设和理想很接近呢?,即图中两个small都要。
鱼与熊掌可以兼得的机器学习
承接上文,如果我们要有一个loss很低的完美假设,同时还能够让现实训练出来的假设和理想很接近,那么最简单的想法当然是假设空间很小,但是假设空间里面的假设都是能够让损失函数非常小的好假设
这里需要补充一下前面讲过的内容“为什么需要隐含层”,可以看我这篇文章点此跳转,具体即讲述了神经网络是如何利用隐含层来逼近任何函数的。
那么是不是只要一个隐含层就够了呢?那么为什么还需要深度学习呢?
事实上,在实现同一个复杂函数时,使用深度较大宽度较小的网络,相较于只有一层而宽度很大的网络来说,其参数量会小很多,也就是说其效率会更高,同时参数量小也就说明需要的训练数据量也会小,也就更加不容易过拟合。
那么结合前面的说法,深度学习可以使得\(H\)的大小减小,并且效果也能够与\(H\)很大的宽度方向的神经网络相当。而在一些函数是复杂但有一定规律的情况下,深度学习的效果可以更好,其参数量可以更小。