男孩还是女孩?这是个问题!

在中国人的生活中,生男生女可谓兹事体大,多少幸福与烦恼都因此而起。那么有没有办法提前做出准确的预测呢?当然有啦!通常在怀孕 4 个月时,胎儿的性别就可以通过 B 超得到准确的判断了,所以只要问一问医生轻松搞定。但是出于职业道德和执业法规的要求,医生一般是不会透露胎儿性别的。想要在怀孕的早期判断,终归还是要依赖祖辈流传下来的经验。

可祖辈的经验多了去了,流传最广的可能就是“酸儿辣女”:如果准妈妈突然爱喝柠檬水说明怀了个男孩;突然爱吃老干妈就说明怀了个女孩。可实际上,“酸儿辣女”只是一种互文的说法,表达的是怀孕对饮食口味的影响,想要以此为据预测胎儿的性别纯属无稽之谈。相比之下,另一条经验还更靠谱一些:准妈妈的肚子如果是尖形,则胎儿很可能是个男孩;肚子是圆形的话就更可能是个女孩。至少在我个人的生活经验之中,这条规则的准确率超过了 80%。

剥去所有的伦理道德外延,所谓的“生男生女”完全可以看成一个纯粹的科学问题。虽然说胎儿性别不可能以决定性的方式影响母体的物理特征,但终究会有一定的参考价值。通俗说就是虽说男孩肚子尖女孩肚子圆一定不会以 100% 的概率发生,但 70% 的置信度恐怕还是有的,这相比于纯属瞎猜的对半概率就是个不小的进步,也就意味着肚子形状的特征提供了一定的信息。除此之外,胎儿性别还可能对母体的其他变化产生一些不起眼但确实存在的影响,比如说民间流传的脚部浮肿或者肚脐突出,这些变化都可以作为预测胎儿性别的特征来看待。

除了肉眼可见的物理特征外,更精确的特征是医学上的定量指标。相关的具体信息在这里我就不班门弄斧了。但可以确定的是,胎儿的性别势必会对母体的内分泌特性产生不同的影响,从而在指标上体现出不同趋势的变化。而这些怀孕早期的指标变化反过来又可以为倒推胎儿性别提供有力的证据,从而实现“生男还是生女”的预测。

那么问题来了,能不能通过机器学习来解决这个问题呢?

能不能用机器学习来解决,要从下面这几个角度来分析。首先,预测胎儿的性别不是预测婴儿的活动,没人能知道婴儿的下一声啼哭会发生在什么时候,即使你知道他的血压肺活量脉搏等所有的生理指标,还是没有办法去预测。但胎儿的性别不一样,它可以体现出一些切实的规律,也就是某些特征会表现出固定的变化趋势,蕴含着明显的规律性,这种规律性被称为“模式”(pattern)。

机器学习能够解决的问题必然会包含某些显式或者隐式的模式,没有模式的问题就不能通过机器学习解决。完全随机的问题是不可能被求解,也不可能被学习的,就像我们永远也没法预测示波器下一时刻的本底噪声一样。

一提到模式,你可能会一下子联系到另一个专业词汇——模式识别(pattern recognition)。模式识别和机器学习实际上有大量的共通之处,严格地将两者区分开来既没方法也没必要。如果非要找到些不同的话,模式识别是被更广泛地应用在计算机视觉(computer vision)等专门领域之中的专门概念,工程上的意义更浓一些。如果说机器学习侧重于将预先设定的准确率等指标最大化,那模式识别就更注重于潜在模式的提取与解释

是不是有潜在模式的问题都能够被机器所学习呢?也不尽然。流体力学的研究之中有不少复杂困难的问题,但机器学习也没有成为这个学科的主流方法,这意味着机器学习并不适用于易编程问题的解释。一个具有解析解的问题是完全不需要机器学习的。即使一个一次方程组中有一万个方程,每个方程中又有一万个未知数,这个看似复杂的问题本质上也无非就是个矩阵求逆,只是矩阵的规模比较大而已。如果将机器学习运用到这种问题上,那就是杀鸡用牛刀了。

退一步讲,即使问题本身没有解析解,要是能够通过数值计算的方法解决,而不涉及明显的优化过程的话,也无需机器学习的使用。在流体力学中,仿真是最常用的研究方法,大量的参数与繁冗的边界条件给计算带来了超高的复杂度。但在这样的问题中,机器学习即使被应用,可能也不会发挥出良好的效果,因为这在本质上依然是对等式方程的求解。就像“能用钱解决的问题都不是问题“一样,能用纯计算解决的问题也不是(需要先进方法的)问题。

回到“生男还是生女”这个例子,你可能听说过所谓的“清宫图”——一个依据孕妇年龄和怀孕月份预测生育的表格。可是如果生男生女真的能靠简单的查表操作解决的话,它怎么会直到今天还困扰着为人父母的年轻人呢?正是因为这个问题没有那么简单,机器学习才有大展拳脚的用武之地。

最后,用机器学习解决问题还需要一个条件,就是大量的可用数据(data)。没有数据支撑的机器学习方法就是巧妇难为无米之炊。这是由于问题中的模式可不会像秃子头上的虱子那么明显,一方面,输出结果会受到多个输入特征的共同影响,另一方面,特征与特征之间通常也不是完全独立的,而是存在着相互作用。因此,要精确地描绘出输入与输入、输入与输出之间的定量关系,大量的数据是不可或缺的。

总结起来,什么样的问题才能通过机器学习来解决呢?首先,问题不能是完全随机的,需要具备一定的模式;其次,问题本身不能通过纯计算的方法解决;再次,有大量的数据可供使用。对于满足这三个条件的问题,机器学习的过程就可以用下图来表示

机器学习的过程

(图片来自 Yaser S. Abu-Mostafa, et al., Learning from Data A Short Course, 图 1.9) 在这张图中,目标函数不是通常意义上的正确率等指标,而是指问题的模式,也就是机器学习要发现的对象。这里的目标函数并不具备简单的解析式形式,不能精确求解,只能从不同的角度去近似。近似的方式是什么呢?针对训练数据的特点做出各种不同的假设(线性模型、多项式模型 ⋯⋯