现在一提起 AI,很多人脑子里冒出来的可能不是技术,而是“高级感”“融资”“包装”这些词。好像只要在产品名字里加上“智能”两个字,身价就能立马翻倍。但 AI 真的只是一个用来撑门面的概念吗?显然不是。它远不止嘴上说说、PPT 里写写那么简单。

这种浮躁并不新鲜。当年区块链火的时候,但凡沾点边都敢自称“区块链项目”,现在也一样:会写几个 if-else 就敢叫算法工程师,项目里加个规则引擎就标榜人工智能。真正沉下心来做研究、啃基础算法的人,反而被淹没在各种热炒的声音里。
AI 其实是一门扎扎实实的学科,底下铺着计算机科学、数学、心理学、运筹学……一大摊子。我们平时随口就能说出来的应用,像自然语言处理、语音合成、人脸识别、刷脸支付、扫地机器人、情景感知家居,这些已经日常的功能,背后全是研发人员一点一点啃出来的。而把它们串起来的那根线,就是算法。不同的算法组合在一起,就像 DNA 片段一样,构成了 AI 的实际应用形态。
所以,甭管外面怎么炒,真想做出点东西,还是得回到算法本身。不如我们就从一个非常经典、也非常基础的小问题聊起,看看算法到底是怎么长出来的,为什么它才是 AI 的命根子。

问题是这样的:三个美女和三个野人要过河。有一条船,没有船夫,六个人都会划船。船一次最多只能载两个人。真正的限制条件是:无论在河的哪一边,只要野人的数量多于美女,美女就会被吃掉。也就是说,在左岸和右岸的任何时刻,野人数都不能大于美女数——当然,如果某一边根本没有美女,那野人再多也没关系。目标就是让六个人全部安全过河。
手工推演一下,其实不难。一开始,六个人都在左岸。我们可以这样走:先让两个野人划到右岸,再让其中一个把船划回来。这时左岸有三个美女、两个野人,右岸有一个野人。接着,让左岸这两个野人一起划到右岸,再让右岸的一个野人单独划回来。此时左岸是三个美女和一个野人,右岸是两个野人。第三步,两个美女划船到右岸,然后右岸的一个美女和一个野人一起划回来。这样一来,左岸变成了两个美女和两个野人,右岸剩下一个美女和一个野人。第四步,左岸的两个美女划到右岸,再由右岸的一个野人单独把船划回来。这时左岸没有美女,只剩两个野人,右岸是三个美女和一个野人。第五步,左岸的两个野人一起划到右岸,再让一个野人划回来。最后,左岸剩下的那个野人划过去,六个人全部安全抵达右岸。
看起来挺顺,逻辑上也能走通。但稍稍一想,问题就来了:这方案是唯一的吗?有没有更快的?六个人我们可以手动试出来,要是六十个、六百个人呢?用脑子硬推,几乎不可能。这时候,就需要把问题抽象成数学模型,让计算机去寻找所有可行方案,甚至找到最优解。
从状态空间的角度看,这个问题可以被描述得非常清晰。我们把左岸的美女数、野人数,以及船的位置,组合起来看成一个状态。船在左岸用 1 表示,在右岸用 0 表示。那么初始状态就是 (3, 3, 1):左岸三个美女三个野人,船在左岸。目标状态是 (0, 0, 0):左岸什么都没了,船最终停在右岸。
可能的状态总共有多少呢?美女数可以是 0、1、2、3 四种,野人数也是四种,船的位置两种,乘起来就是 4×4×2 = 32 种。但这里面很多状态是不合法的,或者根本不可能出现。比如,左岸野人数大于美女数,且美女数不为零,这种状态直接淘汰。同时还得考虑右岸的情况:如果左岸剩 2 美 0 野,船在左岸,那就意味着右岸有 1 美 3 野,同样不行。另外,船不可能停在没人的岸边,像 (0,0,1) 这种状态也毫无意义。把这些不合法的状态筛掉,剩下的状态画成一张图,每个状态是一个节点,船的一次合法移动就是一条边。于是,问题就变成了:在这张图上,从 (3,3,1) 节点出发,找到一条到达 (0,0,0) 的路径。这就是经典的状态空间搜索。
接下来的事情,就是写程序让计算机去搜。搜索算法的基本思路很直接:先确定船上能载什么人。依题意,船上可以载一个美女、一个野人、两个美女、两个野人,或者一美一野。然后,从当前状态出发,尝试所有可能的运载组合,生成新的状态,并检查新状态是否合法,同时还要判断这个状态是不是之前已经出现过,避免来回兜圈子。把合法的、未出现过的新状态存下来,继续往下搜索,直到抵达目标状态。
我写了一段程序来实现这个过程,跑了一下,确实能找到所有安全过河的方案。而且这个算法没有只盯着“三美三野”特化,它把美女数量、野人数量、船的最大载客量都设成了参数。只要改一下数字,它就能自动算出任意人数配置下的过河方案。比如把人数换成别的数字,它照样能跑出结果,灵活度很高。
不过,跑出来的结果也暴露了一些问题。当船最大载客 2,美女和野人各增加到 8 个时,虽然还是能找到方案,但程序为了找到第一个可行解,需要执行大约 40 万次运算。时间复杂度和空间复杂度都不低,显然还有很大的优化空间。

就这么一个看似不起眼的过河问题,已经牵扯出数据结构、图搜索、状态筛选等一系列基础知识。而且,我写的这个算法离优雅、高效还差得远,离工业级应用更是十万八千里。而这,仅仅是 AI 领域里一个极其微小的知识点。连这么个小问题,想做到极致都不容易,更别说自然语言处理、计算机视觉那些庞大的工程了。

所以我有时候真的不太理解,一些毕业才一两年的人,怎么就敢心安理得地管自己叫算法工程师。见过一些所谓的 AI 项目,不过是把市面上几家大厂的开放接口包一包,做一层壳,就说自己有核心技术。这种模式,短期内或许能跑出个 demo,甚至拿点投资,但长远来看,没有自己的算法积累,没有形成真正的技术壁垒,被替代只是时间问题。除非你真就奔着被大厂收购去的,那另当别论。
真正的 AI 研发,绝大多数时候是枯燥的,是坐冷板凳。它需要你静下心来,一行一行调代码,一遍一遍推公式,忍受无数次失败。走秀式的、浮在表面的东西,最多昙花一现。只有脚踏实地,真的把根扎下去,才能一点一点长出有生命力的东西来。
写下这些,也是想让大家看到算法本来的样子。如果读完之后,能让你愿意更沉得住气地往前走,那就再好不过了。共勉。
Entrar Agora