【建立模型】如何把现实映射进计算机?——更多资源,课程更新在
资源,名师讲座课程简介:
【建立模型】如何把现实映射进计算机?
建立模型:如何把现实映射进计算机
我们之前介绍了怎样设计一个算法,用算法解决问题的一般步骤。先要明确问题的方向和边界,建立数学模型,再找到合适的算法。
在这个过程中,建模非常考验算法工程师的水平,数学模型无法描述全部客观现实,这就需要算法工程师做出取舍,找到最贴合现实问题的数学描述。我们来具体说说怎么建立数学模型。
拿一个问题来举例,假设现在我们要预测100年之后的地球人口总数,该怎么建立模型呢?
还是分成三个步骤来说,第一步,确定假设;第二步,验证模型;第三步,权衡可行性。
1 确定假设
先来说第一步,确定假设。
像人口问题,现实中影响它的因素非常多。
比如说,各个国家的变化有很大差别,印度增速非常快,日本就很慢。不同的历史时期,人口增速也不同。前几十年,中国施行计划生育,人口增速就会变慢,现在放开了二胎,增速又会变快。两次世界大战,也让世界人口大规模减少,这些问题是否都要考虑呢?
再有,观念变化也会影响。现代社会很多人选择丁克生活,不生孩子,这些人比例有多少呢?中国乡村受到传统观念的影响,希望能多生孩子,这些数据和变化要不要考虑呢?
这么多因素,建模的时候一定不可能全都考虑,那哪些该考虑,哪些该舍弃呢?这就需要先确定假设。
我们先要搞清楚,需要得到一个什么精度的预测结果。如果我们想要的精度很低,那只需要一个简单、容易计算的模型。这时候,我们就需要对问题进行最大程度的简化。
比如咱们可以假设,像是一战、二战这样的大规模战争,在未来100年不会发生。还可以假设,像计划生育这样对人口有重大影响的政策,在未来100年不会发生。
这些假设当然是不合理的,没人能为这些做出担保,但舍弃这些变量可以大大简化模型。
当然,还可以再简化,各个国家的观念、社会影响,咱们都不考虑,就把全球人口总规模看成一个整体,只盯着这一个数据。
再进一步,咱们可以假设全世界人口增长速度不变。过去20年,全球人口增长了30%,那么假设未来每20年,世界人口也增长30%。这样的话,我们就把世界人口发展描述成了一个指数增长模型。
有了这个模型,我们就可以对全球人口进行预测。
但如果对精度要求非常高,就不能这么干了,各种复杂的因素都要有所考虑。联合国人口司是对世界人口走向进行预测最权威的机构。他们的模型建立得就非常精确。
他们通过数据分析,发现大部分国家的生育率大约都经历三个时期:高生育率期,从高生育率到低生育率的过渡期,以及低生育率期。联合国人口司追踪每个国家所处的时期,并对它们将来的人口增长率进行假设。
不只如此,他们还把死亡率、人口迁移、寿命的延长等等因素都考虑进模型中来。最后通过数值模拟,估计到下个世纪初,地球上的人口会达到109亿。
确定假设,其实是一步步确立重要变量、核心关系的过程。舍弃不重要的细节,把模糊的问题,明确化、量化,这样就把一个复杂的现实问题,转化成了计算机可以理解,算法可以处理的数学问题。
2 验证模型
模型有了,我们怎么知道这个模型是不是靠谱呢?这就需要进行第二步,验证模型。
按照刚才的假设,人口规模会呈现指数增长。指数增长速度是很快的,全球人口过不了多久,就会多到地球都承受不了,这符合现实吗?
我们换一个思路,再提出一个假设:人口的增长速度总是先慢再快,然后再慢,最后趋近于零。也就是说,虽然人口会不断增加,但之后增加得非常慢,最后人口总量会趋于一个稳定值。这个模型,叫逻辑斯蒂增长模型。
你认为哪个模型更贴近现实呢?常识就可以告诉你,一定是第二个。
如果常识验证不了,还可以用不同的方式来验证模型的可靠性。
比如,把两个模型都放在过去的某个时间点,看看它们对后来世界人口的发展,谁预测得更准确。又比如,我们可以把它们使用在国家层级的人口上,看看谁对国家人口的估计更准。哪个估计得不准确,就把谁淘汰掉。
那模型的验证是不是就总有固定的方法呢?
不一定。有时候需要有些奇思妙想,打破常规思维才行。讲一个科学史上发生过的,验证模型的惨案”。
当时在中世纪,科学界最大争论就是,太阳围着地球转,还是地球围着太阳转?日心说”和地心说”,是人们认识世界的两种模型,那怎么验证谁是谁非呢?这就不得不提两个人,第谷和开普勒。
先说说丹麦天文学家第谷,那可是个非常厉害的人物。
他是个贵族,却对用数据进行天文学研究,充满了热忱。1576年,丹麦国王为了支持他,送给他一座岛,还耗资一吨多黄金为他建造了一座天文台,那是世界上最早的大型天文台。
从此,20多年,第谷风雨无阻观察恒星和行星的运动轨迹,他对星象的观测精度,几乎接近肉眼分辨率的极限。就这样,第谷拿到了大量的一手天文观测数据,各个星体的位置记录精确到每天。
结果呢,他看不懂这些数据,没有发现规律,既不能验证地心说”,也不能验证日心说”,一无所获。
想不到的是,他的助手开普勒找到了答案。开普勒在第谷死后拿到了第谷毕生的数据,靠着分析第谷的数据,验证了日心说”模型的正确性。他还提出了著名的开普勒三定律,开启了近代天文学。
怎么开普勒就能成功,第谷不能呢?其实就在于,他们验证模型的时候,用的时间尺度不同。
第谷用的数据,以天”为单位,数据量太大,发现不了规律。开普勒以年”为单位,数据量大大减少,分析起来简单好多,当然也就更快地找到了规律。
所以说,模型的验证不是一成不变的,我们得从多角度来论证,有时候还需要点儿奇思妙想。
刚才说的这些都是验证模型的思路,通过不断和现实问题做比较,我们可以迭代出更合适的模型,把现实问题尽可能无损地映射进计算机里。
3 权衡:要贴近现实,也要容易求解
到这里,我们已经完成建立数学模型的任务了,但好的算法工程师还有一项任务要做,就是权衡,在模型的准确性和实现成本上进行取舍权衡。
比如预测人口问题,联合国人口司的模型显然最科学、最准确,那是不是意味着所有人在解决这个问题上,就都要采用这个模型呢?不一定。
一个模型是不是最优选择,不仅要看模型是不是靠谱,还要看是否能实现。对准确性要求高,通常就意味着变量多、逻辑复杂、数据不可得等困难。如果没有联合国人口司获取数据的能力 ,那么简单一些的逻辑斯蒂增长模型可能就更适合。
同时,一个复杂的模型对算法也提出了更高的要求,要么是成本上的,要么是复杂度上。复杂的模型或多或少,都带来更复杂的解法。
比如,同样是对股票价格进行预测,我们可以用简单的线性回归,也可以用深层神经网络模型,但是求解难度上就差太多了。
打个比方,不同的算法,好比是不同的画家。你让一个三岁的小画家,和达·芬奇排排坐,坐在一起画一位贵妇人。小朋友画出来的就是一堆鸡蛋和油条”,鸡蛋是脑袋,油条是胳膊。那达·芬奇画出来的就是《蒙娜丽莎》。
小朋友对图像的认知很简单,所有物体都被简化成了圆圈和线条,那画起画来,完成画作也不是那么难,三分钟就能完成。这就好像是线性回归模型。
达·芬奇对图像的认知非常细腻,什么是透视,什么是人体结构,都搞得清清楚楚的。他画出作品,当然要花更多的时间和精力,能画出迷之微笑”也需要更复杂的技巧。
这就像是神经网络模型,模型的结构复杂,能捕捉的细节多,但求解起来就更难。
所以说,虽然模型的选择过程存在主观性,没有统一的标准说怎样才是最好。但它有一个底线,那就是模型必须能求得有效解。
如果你的模型需要没有的数据或者没有有效的算法解决,那么模型再好,逼近现实问题程度再高也没用。在解决问题的时候,不能光追求模型准确,还要权衡它的可行性高低,最终找到一个又能准确描述现实,又能有效求解的模型。
划重点:
1建模就是把复杂的现实问题,转化成数学语言的过程。
2算法工程师会遵循三个步骤,不断迭代找出最合适的模型:
(1)确定假设,找到核心变量和关系,舍弃不重要的细节,把模糊的问题,明确化、定量化。
(2)验证模型,不断和现实问题做比较,验证模型是否足够贴合现实问题。
(3)权衡可行性,找到一个又能准确描述现实,又能有效求解的模型。