Redis 创始人谈大模型:通晓古今的队友与编程未来
Redis 创始人 antirez 写下了自己 2024 年的第一篇博文,他从一名普通程序员的角度谈了谈对大语言模型的感受。虽然他的成就并不普通,但他对技术的观察却非常接地气。他在文章里犀利评价 Google 引擎已经成为垃圾的海洋,并客观评价了现在的 AIGC 能力:愚蠢但通晓古今。
通过长期使用,他认为现阶段的生成式 AI 只会让已经很强的程序员变得更强。目前大多数编程任务都是在重复工作,根本不需要大模型有太高的推理水平,大模型很适合那些'用完就扔'的程序。我们对 antirez 的博文进行了翻译,并在不改变作者原意基础上进行了一些删减和润色。
背景:从搜索引擎到大模型
自从 ChatGPT 横空出世以来,包括后面以本地方式运行的各种大模型,生成式 AI 已然得到了广泛应用。我个人的目的一方面是想依靠大模型提高编码能力,另外还希望把宝贵的精力从繁琐且价值有限的工作中解放出来。相信很多朋友也像我一样,花费了无数时间搜索没什么启发性的技术文档、被迫学习各种过于复杂的 API、编写过短时间内就沦为垃圾的程序。工作不该是这样的,开发也不该是这样的。现如今,Google 引擎已经成了垃圾的海洋,我们得费尽心思才能在其中找到一点有用的内容。
另外,我本人并不是编程新手。哪怕不借助任何外部资源,我也能够编写代码,甚至可以说具备一定开发水平。只是随着时间推移,我开始越来越多地用大模型协助编写高级代码:Python 代码最多,但在 C 语言中则应用较少。
大语言模型最让我印象深刻的一点,就是我能准确意识到何时可以使用、而哪些情况下盲目使用只会拖慢进度。我还发现,大模型其实很像维基百科和 YouTube 上的各种视频课程:对于有意愿、有能力、更自律的使用者来说效果拔群,但对本就业务能力不足的朋友来说则边际收益递减。所以我很担心,至少在现阶段,生成式 AI 只会让已经很强的程序员变得更强。
下面让我们一步步开始讨论。
大语言模型:全知全能还是鹦鹉学舌?
机器学习新浪潮中最令人忧心的现象之一,就是 AI 专家对于大模型的认知还相当有限。我们虽然发明了神经网络,但在实质上发明的仅仅是一种自动优化神经网络参数的算法。硬件已经能够训练出越来越大的模型,并使用提取自待处理数据(先验素材)的统计知识,再通过大量迭代试验排除错误、逼近正确答案。必须承认,大模型确实要比以往其他架构效果更好。但总体来讲,神经网络本身仍然极不透明。
由于无法解释大模型为何具备某些新兴能力,预计科学家们的态度将更趋谨慎。但在另一个极端上,也有不少人都严重低估了大语言模型,认为它们只不过是某种更先进的马尔可夫链,最多只能重现在训练集中见到过的有限变化。但大量事实证据表明,这种大模型只是在'鹦鹉学舌'的理论根本站不住脚。
也有不少热心群众觉得大语言模型获得了某种实际上不存在的超自然力量。没那么玄乎,大模型最多只能对自己在训练期间接触过的数据表示空间进行插值,而这并不是什么新鲜成果。而且哪怕单论插值,其能力也相当有限(但足以超出人类预期,甚至带来惊喜)。如果能够更进一步,在接触过的所有代码围成的空间当中进行连续插值,那么大模型哪怕无法创造出真正新奇的事物,也足以取代 99% 的程序员。
好在现实没这么夸张,我们开发者们仍有生存的空间。大语言模型确实能编写出自己没有原样接触到的程序形式,也表现出通过融合训练集内不同出现频率的思路来引导开发方向的初步能力。只是这种能力目前还存在很大的局限性,而种种微妙的推理任务总会令大语言模型遭遇灾难性的失败。但必须承认,大语言模型已经代表着 AI 技术从诞生至今最伟大的成就,这一点应该成为所有讨论的前提。
既愚蠢,却又通晓古今
此言不假:大语言模型最多只能进行最基本的推理,这种推理还不够准确,很多时候充满了事实层面的幻觉和捏造。但它们同样拥有着渊博的知识。
以编程领域及其他能够获取高质量数据的场景为例,大模型就像那种通晓古今的愚蠢学者。与这样的合作伙伴进行结对编程并不明智(当然,在我看来哪怕是跟人做结对编程也不明智):它们往往会抛出荒谬的想法,而我们则需要在开发中不断努力强调自己的思路。
但反过来,如果把这个博学的傻瓜当成可支配的工具、由它提出问题以作为我们激发灵感的素材,那么效果将完全不同。目前的大模型还无法引领人类跨越知识的鸿沟,但如果我们想解决某个自己不太熟悉的问题,它们往往可以帮助我们从一无所知快速前进到具备完全自学能力的程度。
在编程领域,之前二、三十年间的程序员们可能对大模型的这种能力评价不高。毕竟那时候我们只需要掌握几种编程语言、特定的经典算法和那十来套基础库,余下的就纯粹是自我表达、发挥才智、运用专业知识和设计技能的部分了。只要拥有这种能力,我们就是当之无愧的专业程序员,具备了解决一切难题的潜质。
但随着时间推移,各种框架、编程语言和库开始轮番上阵,爆发式的增长令开发难度激增,也给程序员的日常工作带来了既无必要、又不合理的诸多困扰。在这样的现实和背景之下,大模型这样一位通晓古今的白痴队友就成了最宝贵的前进指引。
举个例子:我自己的机器学习实验在整整一年间都是靠 Keras 完成的。后来出于种种原因,我转而使用 PyTorch。当时我已经学习了什么叫嵌入和残差网络,但我实在不想逐字逐句去研究 PyTorch 文档(当初我在学 Keras 时就是这么硬啃下来的,如果能有 ChatGPT 肯定可以帮我回避很多痛苦的回忆)。如今有了大语言模型,我可以非常轻松地编写出使用 Torch 的 Python 代码,唯一的前提就是对想要组合的模型拥有清晰的思路、同时能够提出正确的问题。
用案例说话
请注意,我这里说的可不是那些简单的需求,比如'X 类是怎么实现 Y 的?'如果只是这类场景,那大语言模型的作用其实相当有限,甚至可以说跟搜索引擎和技术论坛区别不大。相反,复杂模型能做到的要多得多,包括那些短短几年前我们还无法想象的功能。


