算法在我们的生活中应用场景越来越多,尝试去了解它,了解计算机思考的方式能帮你在这个人机共存的时代中更加如鱼得水。但是当你想要了解“算法是什么”你将获得的是知识、是定义;可当你想要了解“什么是算法”,你将从根本理解算法。
从实际问题出发,能够帮你更快融入“算法的世界”。在下面这篇文章中,就有一个“鱼香肉丝和蛋糕制作”的生活实例,快速讲清算法的本质是什么、它的优势在哪儿、我们又如何去判断算法的好坏。
其实算法的门槛没有你想象中那么高,想要理解算法吗?快跟着《吴晶辰·算法通识16讲》主理人、亚马逊公司资深算法科学家吴晶辰一起来看看到底“什么是算法”吧。
既然要学习算法,那就先要搞清楚,算法到底是什么?
在算法科学家眼里,这个问题很简单,算法就是有输入、有输出的解决问题的计算步骤。可记住这句话你就懂什么是算法了吗?并没有。
所以说,我们想讨论的其实并不是“算法是什么”,而是“什么是算法”。
请注意,这两者是有区别的,前者告诉你一个知识,给你一个算法的定义。后者带你理解算法,让你识别出计算机做事与人类做事的核心差异。理解了这个核心差异,我们自然就懂了算法是什么。
算法对明确性有极其严苛的要求
我们先来讲讲,什么是算法。要理解这个问题,我们要先追问,计算机做事与人做事的核心差异是什么。咱们来看这么一个案例。
有一位特别厉害的媒婆,王婆,牵线搭桥的成功率特别高。隔壁村的赵婆听说之后,来跟王婆取经。
王婆告诉她,“我给人介绍对象就看四要素:双方离得近不近,年龄相差大不大,爱好匹不匹配,性格合不合得来。这几条大都满足就合适。其中性格最重要,只要性格合得来,其他条件可以适当放松。”
赵婆学完,果然牵线搭桥的成功率显著提升。
王婆的孙子是程序员,他跟王婆说:“您把方法告诉我,我给您写一套算法,自动匹配,不用挨家挨户跑去看了。”王婆听了高兴坏了,这孩子太有出息了,于是把这四要素如数家珍似的讲了一遍。
结果,王婆的孙子很失望,“您这四要素不是算法,计算机实现不了,要不您再想想?”
这“四要素”明明帮赵婆也提高了业务能力,为什么不是算法呢?算法要求有输入、输出、计算过程,这“四要素”方法也有啊。这输入是男女生的住址、年龄、爱好、性格四个维度的信息,然后做匹配计算,输出就是匹配的人选呀。
问题出在,这“四要素”的方法不够明确。是输入也不明确,计算过程也不明确。
就拿离得远近来说,表面上看很明确,输入双方住址,计算距离呗。但就算你把经纬度都要来,也解决不了“近不近”的问题。
我们来分析一下,多近算近?方圆几十公里算近吗?你可能有过这样的经验,住在市中心,3公里以外都懒得去,嫌远。住在郊区呢?10公里,开车也就一脚油的事,都算近。所以,什么叫近,不明确。
其次,离谁近?是男生和女生的家?还是包含工作地点?如果有好几套房子呢?怎么算?这也不明确。当出现多个地点,多个距离,怎么处理优先级呢?也不明确。
你可能想,有这么复杂吗?的确,王婆亲自来干,或者教给赵婆,都没这么复杂。但要交给计算机来干,那对不起,这些问题必须明确,一个都不能少。
你看,这就是算法和人的核心差异,人做事可以接受一定程度的模糊,算法却对明确性有极其严苛的要求。
再拿我举个例子。我在美国难得回家,每次回家爸爸会给我做鱼香肉丝,妈妈会给我烤蛋糕。他们跟我说,我们也是算法工程师,按照菜谱做菜就是执行一套算法。
听起来是这样,做菜也是有输入和输出的计算过程。鱼香肉丝要输入猪肉、泡姜、木耳,要猪肉切丝、盐少许、酱油少许。烤蛋糕要输入15克黄油,30克面粉,要放进200度烤箱,烤20分钟。
但你仔细回忆一下,鱼香肉丝的辅菜稍微有点变化,或者换个人做,味道可能就不一样了。但烤蛋糕只要严格遵照菜谱,谁来烤都一样。
所以从这个角度来说,鱼香肉丝的菜谱不是算法,烤蛋糕的才是。因为烤蛋糕的菜谱可以无数次复现,谁来干都一样。
到这里总结一下,算法要求极其明确。当一个解决方案足够明确,必然可以让这个算法无数次再现,同一个算法,相同的输入必然可以得到相同的输出。不会因为执行的计算机不同、人不同,就导致不同的结果。
能不能复现也是我们衡量明确性的标准。当你有一个问题要交给算法解决,就要不断明确每个细节,保证算法执行之后能够复现。所以本质上来说,算法就是一套通过确定性保证解决问题的工具。
模型化是算法优势的本质
好,算法需要明确,可只靠严苛的明确性,就能叱咤人类社会吗?
你可能有这样的感觉,算法在今天已经侵入我们工作和生活的方方面面了。找对象,可以上王婆的红娘系统;想网购,下单一个保温壶,购物网站会一直推荐保温壶;想看电影,搜索一个《风声》,各种谍战片扑面而来。
算法是靠什么优势,成功“入侵”人类社会的呢?我的答案是,模型化。你可能不会想到,刚才那些看起来完全不相关的程序,背后可能是一套算法。
什么叫模型化?简单来说,模型化就是对不同的问题,用同样的方式来看待,用同一套算法来解决。
购物网站、搜索引擎,没有“红娘四要素”这个理论,甚至还需要调用不同行业的背景知识,但数学模型可能完全是一样的。
比如,在红娘算法中,人与人之间的匹配分数,可以被看成是一个“距离”问题。匹配度高,距离近;匹配度低,距离远。距离,可以定义人和人的远近,也可以定义商品和商品的相关性,可以定义搜索词和电影之间的相关度。
表面上,这是红娘牵线问题、商品推荐问题、搜索引擎问题,但在算法工程师的眼里,这全是“距离”问题。这就是模型化。
模型化最大的价值,就是赋予算法超乎寻常的问题迁移能力。
我看过一个这样的研究,慕尼黑工业大学用算法预测《权力的游戏》的剧情。你看过这部美剧肯定知道,剧中人物常常意想不到就送命了。
这谁活谁死,能预测吗?还真别不信,这个团队在最后一季上映之前就预测,龙妈是所有角色中最可能活下来的。
正确与否,咱先不论,就说说这个团队预测用的模型。他们用的是保险公司的寿命预测模型,是不是又出人意料,又合情合理?保险公司分析的什么?是人的寿命和性别、遗传病史、是否吸烟等等之间的统计关系。
而剧情里同样包含了角色的寿命和他们所处的家族、配偶、联盟信息等关系。
脱去现实描述,里面隐藏的是就用多个变量来估计一个目标变量的统计预测模型。
你看,模型就是一个问题脱去现实描述外衣之后的逻辑内核。
同样一种逻辑内核可以在不同的问题中穿梭,来描述不同的现实关系。正是这种穿梭的能力,让算法能在不同领域中快速迁移。
算法没有好坏之分,都是人的思想
你可能也听到了一些不同的声音,算法带来了歧视、排斥、不公平。怎么有的算法“好”,有的算法“坏”呢?我想给你送达的最后一个认知是,算法没有好坏,背后都是设计者的思想。
咱们还是从一个案例来讲。机器学习领域有一个很经典的算法,叫K临近算法,在解决分类问题上很好用。
比如,在做肿瘤活体实验之前,用K临近算法可以通过肿瘤的特征信息,判断它是良性的,还是恶性的。
那具体K邻近算法是怎么实现的呢?我们每看到一个新肿瘤,就把它的特征和数据库里和它最相近的那几个肿瘤进行比较。
比如说,有10个最相近的,里面8个是良性的,2个是恶性的。于是医生可以预判,患者有20%的可能性,得的是恶性肿瘤。
同样一套算法,也被用到对简历进行评分上。结果,申请人的性别成了影响预测结果的主要因素。同样的简历内容,把名字改成男性的名字,算法就给出高分,改成女性,得分就较低。这是赤裸裸的歧视啊。
同一套算法,怎么一会“好”,一会“坏”呢?
其实,如果你把这套算法再用回到肿瘤的预测,也可能有类似的问题。把患者的性别从女性改成男性,那么预测出是恶性肿瘤的概率也会高一些。因为男性得癌症的几率高一些,这时候,我们不会认为算法歧视吧。
在算法抽象模型的迁移当中,我们能接受肿瘤预测中的“歧视”,但容忍不了简历筛选中的“歧视”,这是算法出了错吗?
不是。问题出在了,应用K临近算法的算法设计者对问题的理解上面。
K临近算法认为,要预测的数据和已有的数据在分布上是类似的。也就是说,在诊断肿瘤的时候,数据库中的男性更容易患癌症,那么预测的时候,男性患癌症的概率也更高。
但在简历预测的问题中,这个假设就不一定成立,或者说不应该成立,可能过去职场就存在歧视,又或者采集的数据中男女性别不平衡出现了问题。
不是算法错了,只是在不同场景里,我们需要的价值偏好和设计思想不同。
所以,不要对算法评判对错、评判好坏,算法的模型只是人思想的体现,如果算法出了问题,请回到人身上找问题。
算法永远不会完美,在这里,我借用统计学家乔治·博克斯的一句名言:“所有的模型都是错误的,但有些是有用的。”算法也一样,没有好坏,有用就好。
想要了解算法、驾驭算法吗?加入《吴晶辰·算法通识16讲》带你领略算法与机器学习的奥秘。与时代共同进步,让算法为你服务,更好地理解和预测社会的进步与变迁。快来加入我们一起学习吧。
▽ 戳此入手
点击“阅读原文”与时代共同进步,让算法为我们服务!