@Lenciel

LLM 调研(4)- 开发实践

本系列是,LLM 调研…说一下它能做什么不能做什么,能做的部分怎么做比较好。

上一篇讲完历史,本来应该接着讲 LLM 到底取得了什么进展。但因为:

  • 在我心里 LLM 并没有取得「范式转换」级别的进展,更谈不上任何真正的「智能」1
  • 比较好的中文综述已经有几篇了(比如 Mike 船长的这篇,或者张俊林的一些专栏文章),英文材料就更不用说了,论文都摆在那里;
  • 我们主要是结合自己的数据和需求做应用,既不会训练自己的 Base Model 也不会搭建相关的基础设施;

所以迟迟没有动笔。几周下来,能感觉身边聊 ChatGPT 的人明显少了。但行业里仍然热闹,每天都有新模型,新产品,新消息。我自己各种小规模的折腾还保持着,还去参加了老白的 AGIA ,获得了更大规模炼丹的资源。

FITURE 内部对 AIGC 的探索也在稳步推进:周博他们用 ChatGPT + Stable-Diffusion 做了一些设计方面的工作;Edward 他们借鉴微软 semantic kernel sdk 里一些 Prompt Engineering 的思路,实现了基于对话选课的场景…

这篇就讲讲,在使用 LLM 搭建应用的过程中一些感受和遇到的问题,可能对大部分人来说,这比讲 LLM 的一些技术细节更有用。

目录

做什么

2011 年,Andreessen Horowitz 说「软件在吞噬整个世界」。2023 年,没有 AI 的软件都不好意思出来见人了2

但只要是软件,它就会有结构,有抽象,有分层。比如数据怎么获取、处理和存储,比如模块之间怎么通信,比如怎么保障安全。LLM 相关的软件系统也不例外,并且因为还在相对早期,前面说的每个部分都有待解决的问题,也都是机会。

不过,有些机会是普通公司特别是创业公司根本没法追逐的,比如提供芯片和算力,比如训练基底模型。有些机会则是适合创业公司去搞的,比如解决存储或者数据管道等基础设施(做矢量数据库的 Pinecone 就属于这类)。

更多的公司,应该跟我们一样,只是「利用」这项技术,来给自己的用户创造更多的价值。要达到这个目的,我觉得应该拆成下面几个部分:

  1. 寻找合适的 LLM 作为基底模型;
  2. 以较小的成本(包括时间成本)将自己业务相关的领域知识和数据作为输入,扩充 #1 选择的基础模型的能力;
  3. 从工程角度结构化地提高这个过程的安全性和可控性;

从而最终迭代出在垂直领域商业化的 LLM 应用。

那么具体怎么做呢?

怎么做

基底模型与扩展

选择什么样的基底模型,很大程度上决定了你能如何扩展它。

比如,如果直接用 OpenAI 的闭源模型——无论是 GPT-3.5 还是 GPT-4——你就只能使用它提供的 API 做 Fine-tuning 或者 Embedding 或者是直接 Prompt Engineering

相对应的,如果你是用 LLaMA, Falcon, StableLM 或者 ChatGLM-6B 这样的开源模型,那扩展它们的方式就大不一样了。

我自己的建议是,你得花些时间好好试用 OpenAI 的各种服务(ChatGPT 的各个版本)和接口,同时也花些时间手搓一些开源模型,具备手感后,结合下面说的可控性和安全性相关的考量,结合自己的用户需求,最终做出决策

可控性与安全性

可控性

我们在前面讲连接主义与神经网络时说过,它有可解释性不足的问题。

这造成一系列和传统意义上的软件开发不同的特点,特别在可控性方面。

首先是输入的可控性差。自然语言编写 prompt 可能对于终端用户的感受不错,但是在开发过程中,是很痛苦的:不要说基于它「写代码」,连提炼出可以培训员工的最佳实践都很困难。

然后是输出的可控性差。一方面,LLM 究竟以什么样的格式响应一个 prompt 是非常不固定的;一方面,LLM 究竟以什么内容响应一个 prompt 也是不固定的3

最后是调试的可控性差。在构建其他软件的时候,如果对于给定的输入,输出是预期外的,你可以通过断点调试甚至单步调试来搞明白究竟发生了什么,但使用 LLM 基本上只能靠猜。

因此,整个研发过程如何变得更可控,是一个系统工程,涉及如何对 prompt 做版本化管理,更高效的 evaluation ,更及时的 optimization 等等问题,并且至今应该没有特别好的解法。

安全性

LLM 相关的业务是数据密集的,因此它的安全性至少包含:

  • 数据如何安全地「获取」、「处理」和「存储」;
  • 如何防止包括 Prompt Injection 在内的各种攻击;

同时,也包括你自己团队的「安全」:比如基于 OpenAI 开发如何合规,基于开源模型它们的 license 是否有坑等等。有一些问题看起来是创业阶段不用考虑的,其实你的服务上线第一天就有可能面临包括注入在内的各种挑战。

架构与核心决策

当你从原理到工程化有了足够多的手感,仍然考虑围绕 LLM 开发一个自己的应用(放弃说不定才是正确的选择),核心的决策因素有哪些?我自己觉得包括下面这些。

C 端还是 B 端

LLM 生成的不是「答案」,而是「答案应该大概长成啥样」。所以不太能够用来作为交付物直接向 B 端提供服务。

同理,对 C 端提供服务,应该也不能直接用在真正「严肃」的场景:比如看病、心理咨询等等。顶天了,作为某个人类的辅助和参考,提供一点建议。

是否「全生成式模型」

「全生成式模型」指用户所有的请求都用 LLM 进行响应。与之对应的是,通过意图识别对用户的请求进行分类和分流,让生成式模型和判别式模型一起来响应请求。

全生成式模型,首先成本是比较高的。背后如果调用 OpenAI,还有时延、QPS 和合规等一系列问题。而我们提供的大部分服务都是有限场景下的,因此,结合传统的 NLP 解决方案,比如知识库,解决用户大部分真实请求,对不在上下文的请求判定并拒绝响应,仅仅对少量有用户价值且知识库解决不了的场景通过生成式模型来响应可能是最现实的做法。

当然这样做其实也考验系统架构的能力。

具体选择哪种扩展方案

排名靠前的模型,都做了强化学习。但是成本高,而且方法还不稳定。

大部分公司的数据量,可能搞个百亿参数的 base model,结合精标数据做 SFT,效果就差不多了,还更容易控制结果。

排除掉自己做模型,你仍然有很多条路可以选。

比如 FITURE 的应用场景是搜索和推荐。它很适合用 「Embeddings+矢量数据库」的方案来做。

总结

除开模型本身和相关基础设施,目前LLM 「周边产品」,主要是两个大类:某个领域的智能助手,或者某种风格的聊天机器人。

前者,如果没有某个领域长期的 NLP 的积累4,并且找到了客户愿意支付溢价的场景,就没有必要做。而有这些数据,往往需要行业地位,所以,基本上不是初创公司的机会。

后者,它更偏娱乐化而不是功能性,目前最好的示例应该是 character.ai。不过,这种项目的商业化成功与否,可能主要看金主们聊擦边球话题时,接得怎么样吧。

  1. 一个观察,好像愿意认真写综述的,都认为 LLM 具备「智能」,这可能也是他们洋洋洒洒几万字综述的核心动力吧。大家观点虽然不同,还是很感谢他们。 

  2. 也难怪 Sam Altman 提出了所谓的「新摩尔定律」:宇宙中的「智能」每 18 个月翻一番。 

  3. 虽然你可以通过调整参数,比如设置 temperature = 0 来对输出做一定的控制。 

  4. 这里的积累不仅仅是技术,更主要的是结构化的数据和模型。 

LLM 调研(3)- 历史

本系列是,LLM 调研…说一下我对它的看法,以及它能做什么不能做什么

前面的两篇聊完,有些同学觉得我很不待见 LLM。其实在使用各种 AIGC 产品的过程中,我还是觉得惊喜不断的:它的确是会造成深远影响的技术进展(大部分这类技术会符合所谓的「阿拉玛定律」1,即「短期被高估,长期被低估」)。

只不过,目前看到的很多讨论落入了我们讨论这类问题反复落入过的陷阱:

  • 语言本身的歧义和模糊带来的理解和交流上的困难——这就是「人工智能之父」明斯基说的「Suitcase Words」问题2
  • 今天各个领域的 AIGC 能做的事情非常「窄」,用一些「指标」的提升去证明类似于逻辑、思维等「泛化能力」的涌现3,这种论证方法是错误的,认为它带来 AGI 更是无稽之谈;
  • 还有一部分人根本没有研究过 LLM ,连误解都谈不上,只是在跟风吆喝——这就是我的偶像费曼调侃过的「Cargo Cult」问题4

这篇我们就来回顾一点 AI 的历史,这样才好看清楚 LLM 究竟取得了什么进展,还有什么样的局限。

目录

历史

人工智能(Artificial Intelligence)

写过一点人工智能的历史:这个术语被正式落到纸上,是 1956 年的达特茅斯会议的提案

今天看这个寥寥数页的提案,仍能感觉各种壮志,但也能看到各种壮志仍然未酬。

  • 比如 John McCarthy 在导言里就讲了要通过模拟「神经元」让机器学会使用人类语言;
  • 比如 Allen Newell 和 Herb Simon 在里面就提出了让机器下棋、证明数学定理、具备人类的学习和解决问题能力等课题;

Allen Newell 甚至在会议后不久预测,十年内计算机就能下棋超过人类——我们现在知道,其实花了四十年,才有了深蓝。

而且,在达特茅斯会议前,虽然没有「AI」的提法,学界已经有一些关于「机器与智能」的讨论。

其中最著名的,是图灵在 1950 年 10 月发表的论文《Computing Machinery and Intelligence5。图灵琢磨这个是因为他在 Intelligent Machinery 里提出了「discrete controlling machines」6之后,就开始思考如何造出一台在运动和思维上都能全面模仿人的机器7

今天看这篇 73 年前的论文,仍能感觉各种壮志,但也能看到各种壮志仍然未酬。

比如图灵认为到了 2000 年,会有像人一样思考的机器8。他甚至给出了这个机器的开发工作量是 36000 个人月——我们现在知道,2000 年又过去了二十多年,花在上面的人月应该是图灵说的几万倍了,我们还没有摸到边。

大牛们的估计出现这么大的偏差,是因为当时对人工智能涉及的两个主要领域,计算机和人,很难有正确的认知。

认知的不同,导致人工智能研究者分裂成了以「符号主义」和「连接主义」为主9的数个阵营:

  • 「符号主义(Symbolicism)」,又称逻辑主义,主张用符号、公理和逻辑体系搭建一套人工智能系统;
  • 「连接主义(Connectionism)」,又叫仿生学派,主张模仿人类的神经元,用神经网络的连接机制实现人工智能;
符号主义与专家系统
优势

「符号主义」里的「符号」,就是表示客观事物或者事物间关系的「字符串」。通过它们对人类的「认知」进行编码,形成可逻辑演算的系统,是「符号主义」的核心思想。

因此,「符号主义」的核心特点在于:

  • 推理的过程是可解释的;
  • 出现错误,是可以追溯和定位的;
  • 符号化方法对于知识的表达能力强,能够应对较复杂的知识推理;

这些优势让「符号主义」在 AI 领域长期一枝独秀,被广泛地运用于「自动定理证明」和「专家系统」的构建。尤其是「专家系统」的成功开发与应用,为人工智能走向工程应用做出了杰出贡献。

不足

但「符号主义」也有一些根深蒂固的困境。比如,哥德尔不完全性定理(证明了对于任何一个公理化系统,都存在此公理体系所无法判定真伪的命题),就让使用「符号主义」构建的系统面临泛化的问题。再比如,既然要用符号来表达事物和事物之间的关系,这里就有一个谁可以把客观世界抽象成这些符号,并解释给其他人的问题。家姐在第一篇文档里留言说的「中文屋」,其实就是针对这个困境的一个思想实验。

因为这些没法解决的问题,「人工智能」曾经有很长一段时间发展得并不算好。我读书的时候,国内的人工智能集中在自动化专业9。当时我感觉自动化专业主要有三拨人:

  • 搞控制理论的,主要是用数学工具在矩阵推导;
  • 搞应用系统的,主要是想要做出国产的工控机;
  • 搞算法的,主要是遗传算法、神经网络;

前面两帮人是主流,彼此不太看得上,但是他们一起看不上搞算法的。到了今天,人工智能在很多学校已经和计算机、自动化平起平坐,有自己的学院了。

这似乎全靠「神经网络」的大获全胜。

连接主义与神经网络
历史

我们基本上听不到「连接主义」,只听得到这个门派的代表作:「神经网络」,即通过模仿人类的神经元组网,实现人工智能。

需要注意的是,它说的神经元是 1943 年生理学家麦卡洛克(McCulloch)和数理逻辑学家皮茨(Pitts)创立的脑模型,即 MP 模型,跟今天我们对脑神经的认知有很大的不同。但报导 ChatGPT 的媒体好像很喜欢配一张现代科学理解下的大脑透视图,显得这套东西多么先进甚至科幻。

实际上,神经网络提出快 90 年了,并且曾多次被主流圈子抛弃。比如 Marvin Minsky,虽然他 1954 年的博士论文你看标题就知道很「连接主义」,但两年后参加达特茅斯大会时,他已经改旗易帜,成了「符号主义」领袖。

60 年代,虽然已经有学者搞出了单个神经元的简单模型,但 69 年,作为「符号主义」的领军人物,Marvin Minsky 和 ​​Seymour Papert 出版了一本书《Perceptrons》,从 下面这张图我们就知道,它对连 XOR 运算都不会的神经网络判了死刑:

Don't touch me...

到了 1980 年,有人在神经网络里面加入了一点反馈,也就是输出端检测到的错误向后传播给网络,被称为「Back-Propagating」。又过了 6 年,David Rumelhart、Geoffrey Hinton 和 Ronald Williams 发表了一篇论文《Learning Representations by Back-Propagating Errors》,重振了这个领域,但不久又变得无人问津。零零星星有人实验通过增加神经网络的层数来提升指标,但因为每层都是独立的,笨重且不可控,没有改变神经网络半死不活的状态。

直到 2006 年,Geoffrey Hinton 和 Ruslan Salakhutdinov 发表了《Reducing the Dimensionality of Data with Neural Networks》,通过使用「clamping」对每层进行增量化的训练,来大大减少了数据维数。此后,神经网络渐入佳境。

这里花这么多篇幅介绍这些历史,是想说,今天的神经网络,是曲折艰辛的理论研究,加上摩尔定律带来的硬件性能提升和互联网带来的海量数据等综合因素作用下爆发的,而不是我们真的对大脑神经网络的工作原理有了突破10

这也就造成了这种方法的一些先天不足。

不足

「连接主义」最大的问题是不具备「符号主义」的可解释性。

前面说了,AI 领域里面有很多 Suitcase Words,比如「学习」、「深度」或「智能」,很容易给不明就里的人造成误会,以为模型的输出是基于知识「深思熟虑」后做出的反馈。

其实,「机器学习」这个概念最早由 Arthur Samuel 1959 年在论文「Some Studies in Machine Learning Using the Game of Checkers」里明确提出11。文章里的「学习」主要是两个动作:

这跟通常意义下人类进行的「学习」12,有很大的不同。认为「机器学习」是说机器搞学习,和认为跟自己说下午会飞过来的朋友,是像孙悟空一样飞过来一样,核心问题是还没见过什么是飞机。

再比如「深度学习」里面的「深度」,主要就是指神经网络的层数比较多,跟逻辑上或者思维上多么有「深度」完全没有关系。

所以,包括 LLM 在内的动辄几十个亿几百个亿参数的模型,在指标上,具有强大的功能和性能,但它们在逻辑上是不透明的,也是不可调试的。这就意味着我们要用它们做出一些严肃的决定,比如金融、医疗、军事、自动驾驶等方面的决定,风险是非常高的,并且有一些伦理上的问题。

了解完这些,我们就能真正聊清楚,作为神经网络在自然语言领域的有一个重大突破,LLM 到底有了什么样的进展。

  1. 阿玛拉定律」 是帕洛阿尔托未来研究所的总裁 Roy Amara 提出的:「我们往往会高估一项技术的短期影响,而低估其长期影响」。过去一些划时代的技术,如电脑、GPS 等,都出现过类似的高开低走,长期低迷,最后被普遍采用的几个阶段。 

  2. 这个术语的来源是对「行李箱」的类比,即一些词汇会将许多复杂的、不同的概念、过程和实体打包在一起,这种抽象使得我们在交流复杂思想和事物时更容易,但同时也可能导致理解上的困难和歧义,因为这些词汇并没有明确的指代。这个概念在认知科学、心理学和语言学领域都有应用,特别是在我们尝试理解和交流抽象和复杂概念时。 

  3. 「涌现(Emergence)」这个术语本身是一个跨学科概念,并不限于人工智能。它旨在描述由局部相互作用引发的全局性质的现象,被用于研究复杂系统,如物理学、生物学、社会科学等领域。 

  4. 「Cargo Cult」 是一种在南太平洋某些岛屿上的宗教运动。这些岛上的居民迷信地认为,如果他们模仿现代化国家的各种仪式和行为(如建立类似跑道的结构,制作木头喷气式飞机模型等),他们就可以吸引神秘力量,让现代化的科技和物资,从天而降到岛上。后来它被用作隐喻,指盲目地跟随和模仿,但却没有理解其中根本原因的行为。 

  5. 这篇论文介绍了「模仿游戏」,后来被当作一部纪念他的电影的名字,很多人不知道,其实这个游戏就是所谓的「图灵测试」。图灵估计,在 2000 年,一台拥有 128MB 内存(他表示为 10 的 9 次方)的计算机将有 70% 的机会可以骗过人类。 

  6. 他当时的结论是,传感器和运动系统会成为长期掣肘,所以应该从智能开始。并且他指出,最佳的突破口是密码学和游戏,其次是语言翻译和数学。 

  7. 但图灵在这篇文章的结尾说了「We can only see a short distance ahead, but we can see plenty there that needs to be done」,太厉害了。 

  8. 其实图灵在 1948 年英国国家物理实验室的内部报告中,就区分了「embodied intelligence」和「disembodied intelligence」,一个从统计学出发,一个从逻辑推导出发,为后来的分裂埋下了伏笔。另外这里省略了一些不那么被广泛讨论的分支,比如以研究机器人为主的「行为主义(Actionism)」。 

  9. 国外计算机软硬件怎么造,和造出来之后怎么用,一般放一个专业,都在计算机系。  2

  10. 实际上,对只有 302 个神经元的秀丽隐杆线虫,我们都还没有彻底整明白它的系统究竟是如何运行的。所以这样或者这样的研究才被看成突破。 

  11. 这兄弟的主业其实是做 IBM 的商用机,但是因为这个主业他获得了比当时绝大多数科研人员都丰富的一个资源:无限机时。他在上面编写下跳棋的程序,开创了很多今天 AI 的前沿性研究。如果再结合「强化学习」的先驱,图灵的同事 Donald Michie相关工作,可以说整个这方面的进步驱动力都是来自于大家觉得计算机「好玩」。 

  12. 实际上,人类自己的「学习」也很多元,学跑步和学围棋,完全不是一种「学习」。