聊聊深度学习这档子事(3):寻找万能的通用模型
作者: 许野平 2016-06-18 于济南
前面说过,机器学习最终结果的好坏,取决于模型的选择和训练数据的采集。今天讨论一下模型的选择。在前面的讨论中,我们假定身高与体重存在函数关系 y=ax+b 。给人的感觉有些太武断了。为什么它们满足这种关系?它们之间不会是其他别的关系吗?
因此,数学家们在考虑,是否能找到一种万能的函数表示方法,能表示世间的一切函数关系?如果确实存在这样一个模型,机器学习的问题就解决一半了,模型用这个通用的,剩下只需要求解参数就行了。那么,这样万能的通用模型存在吗?
1. 幂级数
数学里面有个泰勒定理,说的是“任何”函数
f(x)
,一定能表示成一系列幂函数的线性组合:
看到这里,有人已经忍不住要惊叹了,原来幂级数就是万能的数学模型呀,几乎可以表示世间一切函数了。你先别太兴奋,幂级数只是其中之一,下面我们再看另一个模型。
2. 傅里叶级数
傅里叶级数数,“任何”函数都可以表示成一系列三角函数的线性组合:
其实这个很多情况下比幂级数还靠普,为什么呢?因为弦函数是有界函数,不会干太出格的事。幂函数就不同了,常常会给一个出人意料的预测结果。当然正常情况下,我们可以根据试验结果确定二者的优劣。
3. 最小二乘法求解
老天爷似乎一切都安排得妥妥当当,我们学过最小二乘法。我们知道如果模型可以表示成若干函数的线性组合,就可以借助最小二乘法求解。这两个级数恰好符合这个要求,因此,我们拿过来试一试,看看效果好不好。
本来想用Matlab写个例子,但是感觉有些太浪费时间了,不如先在这儿说说吧。其实结果很简单:
- 最小二乘法求解肯定没问题。已知训练样本数据求参数,就是解超定线性方程组,用最小二乘法求解毫无悬念。
- 参数个数太少,意味着模型太简单,对付复杂问题,往往这样的模型效果不佳。比如,训练数据符合模型 y=−sinx+3cos(2x−π3) ,而我们假定模型是 y=ax ,再怎么学习训练也不会取得好的结果, 因为模型本身就是错的。
- 训练样本少,模型复杂,也容易发生悲剧。比如已知 f(1)=2,f(2)=4,f(3)=6 ,我们可以得到很多函数模型,最简单的比如 f(x)=2x 。模型也可以复杂一些,例如 f(x)=2x+(x−1)(x−2)(x−3) ,或者 f(x)=2(x−2)(x−3)(1−2)(1−3)+4(x−1)(x−3)(2−1)(2−3)+6(x−1)(x−2)(3−1)(3−2) 等等。因为训练数据太少,我们不足以判定到底应该如何选取问题模型。这几个模型预测训练数据都是“零”误差,但是预测没见过的数据,则不见得奏效。因此,想取得好的效果,首先要保证足够多的训练样本。
- 模型足够复杂(即,级数中的项数保留的比较多),同时,训练样本足够多,则有希望取得良好的训练结果。
经过反反复复的实验观察,我们可以得到最终的结论,利用幂级数或者傅里叶级数,在训练数据充分的条件下,借助最小二乘法可以求得比较理想的解。到这儿,似乎应该给机器学习打上一个大大的句号了,但是到底出了什么问题,让科学家们在机器学习领域又发明了这么多令人眼花缭乱的技术?经典数学分析领域的幂级数和傅里叶级数到底存在什么致命的缺陷,导致它们在机器学习的大舞台上让位于其他角色?