机器学习里面有一个「没有免费午餐」定理(No Free Lunch Theorem):任意一种算法,如果对于某些类型的问题效果好,必然对于另一些类型的问题效果差。
上面的定理对于「机器学习」整体也是适用的。机器学习适合处理的问题,一般都有这么一个特点:在特征空间中相近的输入,对应的输出一般也相近(暂且称为「平滑性」)。这是机器学习能够把从训练数据中学到的知识推广(generalize)到新数据上的前提。如果一个问题不「平滑」,也就是说,输入稍微变一点儿,输出往往都会有巨大的变化,那么机器学习一般就会表现得惨不忍睹。
题主的问题,如果就以数值本身作为输入特征,那就是一个典型的「不平滑」问题:输入稍微变动一点儿,输出就变动很大。教科书里往往还会提到另一个例子:输入是若干个布尔特征,输出是它们的异或。这简直就是最「不平滑」的问题了。
如果你要用机器学习来解决这样的问题,就需要输入一点儿人类的智慧,通过设计合适的特征,把问题转化成一个「平滑」的问题。比如:
当然,作为人类,一般很难预判所面临的问题是否「平滑」。不过,如果你观察到机器学习的效果不好,就可以往「不平滑」的方向去想,设计一些合适的特征,将典型的「不平滑」问题转化成「平滑」的。
来补充一些东西。
关于「平滑性」,我一直没想出应该怎么来准确界定它。它并不要求输入到输出的映射连续。比如,完全可以要求模型去学习一个阶跃函数,模型只是不一定能学到非常精确的分界线而已,但是「阶跃」的精神是可以学到的。
我觉得「平滑性」可以这么理解:一般的机器学习模型中的运算(比如神经网络里的激活函数),都没有太多的转折,不会把特征空间切得很碎。这些运算组合而成的函数,也往往不会很「崎岖」。机器学习适合做的,就是拟合比较「平滑」的函数,而对「崎岖」的函数则拟合不好。
一个问题算是「平滑」还是「崎岖」,跟输入特征的范围,以及训练数据的密度,都有关系。仍以判断奇偶性的问题为例:
评论里有不少人指出:如果我就用一个「崎岖」的非线性函数当模型呢?比如,假设问题对奇数指定的输出是 1,对偶数指定的输出是 -1,用余弦函数 似乎就可以完美拟合数据了呀!
问题其实没那么简单。假设我们就用余弦函数 当作模型,其中有两个待学习的参数:频率 和初相 。问题的一个最优解是 ,其实完整的最优解应该是 。
我们在 [-20, 20] 的范围内随机取 10 个数 和它们的奇偶性 作为训练数据,用均方误差作为损失函数:
在 的范围内画出 的图象:
你可以感受一下这个损失函数的地形有多么崎岖,有多少局部最小值。如果增大数据量,或者增大输入数据的绝对值,损失函数会变得更加崎岖。想要准确地学到 处的全局最优解(图中有四个),几乎是不可能的。
本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度,google,bing,sogou 等
© 2025 tinynews.org All Rights Reserved. 百科问答小站 版权所有