欢迎来到云栖网

免费注册

软件 3.0:人工智能驱动下的未来

云栖网 2023-05-15 14:38 来源:CSDN

作者 | Div Garg  译者 | 弯月 

云栖网随着 GPT 等大型 AI 模型的热度持续不减,网上涌现了很多关于软件的发展方向以及未来的讨论。我们可以为 AI 模型提供简单的文本提示,然后就可以生成人眼无法区分的文本、超现实主义图像、功能代码、鼓舞人心的音乐等等。这些就是软件 3.0。

软件 3.0 代表了软件工程和开发的根本性转变,而新的编程语言就是“英语”。

在本文中,我将通过半导体芯片和早期的计算机来做个类比,看看软件 3.0 的发展。注意,这篇文章是在 GPT-4 发布之前写的。

软件 1.0,即“经典的技术栈”,这是我们都非常熟悉的编程范式。这类软件开发需要使用 Python、C++ 等语言编写源代码,然后编译成指令供计算机执行。在软件 1.0 中,程序员需要编写每一行代码,才能实现想要的行为。

多年来,这种范式一直是软件开发的基础,虽然如今仍然被广泛使用,但重要的是要注意,新出现的范式与软件 1.0 有很大的不同。它们就是软件 2.0 和软件 3.0。

软件 2.0,即“神经网络技术栈”,这是用更加抽象的语言编写的,人类不太容易理解这些语言,例如神经网络的权重。这种代码不是由人写的,因为大量的权重需要使用优化,通常是通过反向传播和梯度下降,使用所需的输入以及输出数据集。在软件 2.0 中,代码通常由定义理想行为的数据集和提供代码粗略框架的神经网络架构组成,但有许多细节(权重)需要填充。训练神经网络的过程是将数据集编译成包含所需行为的程序,也就是最终的神经网络。

相比之下,软件 3.0 是用简单的自然语言编写的,程序是通过查询大型AI模型获得的,这种AI模型可以完成各种任务(又叫做基础模型),你只需要通过自然语言将一些输入以及输出示例传递给模型即可,不需要人工编程或优化。在软件 3.0 中,编程主要是“提示工程”,即设计格式良好的自然语言提示来查询模型以获得所需的输出。

查询通用 AI 模型(软件 3.0)的难度远低于收集数据并训练神经网络(软件 2.0)或编写程序(软件 1.0)。鉴于这种易用性以及软件 3.0 的许多其他优势,我们将会看到整个软件行业发展的新趋势,许多 1.0 和 2.0 的软件都将被 3.0 取代。

AI(软件 2.0)正在吞噬软件,而如今人类可解释的 AGI(软件 3.0)正在吞噬 AI。

软件 3.0:人工智能驱动下的未来

向软件 3.0 过渡:人工智能的新时代

从软件 2.0 到软件 3.0 的持续转变为各个领域带来了重大进步。这种新范式不是为某个任务专门训练的神经网络,而是一个大规模的 AI 模型,可在各个领域的一系列任务中有出色的表现,而且还可以有效地整合到 3.0 的技术栈中。下面,我们来探索一些具体的例子,看看这种转变的影响:

●自然语言处理。以前,于不同的任务需要使用不同的模型,比如翻译、理解和汇总。然而,如今该领域已经融合为单一的大型 AI 模型,比如 GPT-3,这种模型能够处理所有的任务。

●图像合成。早期的图像合成技术依赖于生成式对抗网络(Generative Adversarial Networks,简称 GAN)以及专业的神经网络模型,用于生成特定风格或类别的图像。然而,稳定扩散模型(Stable Diffusion Model)为这个领域带来了重大转变。这些模型基于自然语言,能够针对任何场景和风格合成高质量、多样化的图像。

●视觉理解。计算机视觉领域在软件 3.0 时代得到了迅速发展。以前,卷积神经网络 (Convolutional Neural Network,简称 CNN)是这一领域的主导,这种神经网络通常需要在 ImageNet 等大型数据集上进行预训练,并在较小的自定义数据集上进行微调。然而,最近的技术突破引入了更强大且可扩展的架构,例如 Vision Transformers(ViTs)、CLIP 等方法以及 Flamingo 等视觉大型模型(Visual Large-Models,简称 VLM),它们可以实现零样本视觉问答、识别新对象或场景,而且还可以理解自然语言。

●语音识别。针对特定语言和语音训练多个神经网络架构的日子将一去不复返,该领域将整合为 Whisper 之类的单一大型模型。这种统一的方法提供了卓越的多语言识别能力。

●语音合成。以前,我们采用 WaveNet 之类的大型神经网络生成普通人类语音的原始音频信号输出,无论是语调还是口音都很有限。如今,VALL-E 等模型可以根据 3 秒钟的录音合成个性化的人类语音。

这些领域的核心主题是用一个能够处理多个任务的、且具备零样本泛化能力的大型 AI 模型,替换针对某个任务量身定制的特定模型。这一主题不仅限于人工智能领域,还扩展到了机器人、物理科学、医学、金融等其他领域。向软件 3.0 的过渡正在彻底改变我们解决问题的方式,同时也在拓宽人工智能的应用范围。

构建软件 3.0:AI 驱动计算的未来

在软件 3.0 的世界里,GPT-3 之类的大型 AI 模型将成为新的计算范式的支柱。这些模型受到上下文长度大小的限制,例如 4096 个 Token(词语)。为了用一种自然的方式来思考软件 3.0,我们拿 32 位的 CPU 芯片做个类比:

●自然语言就是新的机器代码(类似于汇编语言)。

●GPT 就是“神经计算单元”(Neural Compute Unit,简称 NCU),带有 4096 个自然语言 Token 的指令集(类似于计算机处理器 CPU)。

软件 3.0:人工智能驱动下的未来

图:一个简单的 MIPS32 处理器指令示例

在传统计算中,高级程序代码会被编译成大小固定的机器语言指令,然后发送到处理器,执行预期的操作。这种大小固定的指令中继到计算处理器的过程与为软件 3.0 中的 GPT 等 AI 模型提供 4096 个 Token 的自然语言指令非常相似。

在这个范式中,4096 个 Token 的指令包含一个输入提示、一些上下文的示例数据,以及供神经计算单元(GPT)输出的空白空间(类似于早期的打孔卡)。在这个类比中,GPT 充当着神经计算单元,那么问题来了:我们可以利用 GPT 构建一个完整的神经计算机吗?

在软件3.0中构建神经计算机

为了构建神经计算机,首先我们需要创建传统计算机的基本组件,例如内存、缓存、变量寄存器等。

●指令集:我们需要结合使用强大的指令集与 GPT 等神经计算单元。这些指令对 AI 模型的输入和输出格式进行了编码,一般需要通过中间步骤来实现强大的交互。早期也出现过此类的指令集,比如思维链和 REACT。

●变量寄存器:在与 AI 模型交互的过程中,我们需要加载输入变量并存储输出变量。这就需要用到检索等技术。

●缓存:输入和输出的缓存是一个重要的环节。例如,对话缓冲区可以被视为软件 3.0 中的一种缓存方式。

●逻辑:逻辑看似很简单,而且似乎可以证明软件 1.0 将继续存在,但必须作为工具由软件 3.0 的代码运行。举一些简单的例子,比如计算器、日历以及其他基本功能。

●内存:存储数据是计算机不可或缺的一部分。我们可以利用嵌入等机制有效地存储或读取向量数据库中的数据,这些数据库就相当于内存。

上述只是构建完整的神经计算机所需组件的部分示例,将来我们会看到更多新的发展。在有了底层组件后,接下来我们还需要构建用户界面来与这样的神经计算机进行交互,当然还有操作系统,只不过这里的操作系统可以作为 AI 助手来安排任务和管理神经计算机的状态。

如何构建软件 3.0 的程序?

在准备好神经计算机的所有组件后,下面我们来考虑如何编写程序。我们可以按照传统计算机的方式,将高级编程语言(如 Python)编译为机器代码。

因此,我们可以构建可处理任意长度的输入和输出的高级抽象,并将它们编译成 4096 个 token 的指令,这些指令可以提供给神经计算,并与内存检索、缓存、逻辑等机制相结合。

为了构建这种高级抽象,我们需要定义存储自然语言的对象。

自然语言索引(对象)

这些对象是结构化存储,用于存储任意长度的自然语言结构。举一个例子,一本书:封面就是根节点,第一层对应每一章,第二层对应每一页,第三层对应每一个段落,依此类推。通常,我们可以定义索引结构,以线性、分层或其他结构组织自然语言。LLamaIndex 就是在软件 3.0 中实现此类操作的一个例子。

同样,我们也可以定义函数来操作自然语言结构。

自然语言函数

我们可以这类函数视为接受任意长度的自然语言输入,并输出任意长度的自然语言输出的函数或操作。举几个简单的例子,生成摘要、修改措辞、自动补齐。我们还可以混合更复杂的机制,比如检索,这方面的例子包括搜索、使用[工具]等,而且还包括方法论,比如通过 Toolformer API 调用外部工具。我们还可以定义递归函数,包括推理跟踪、中间链、验证以及纠错机制等。

这个函数的当前实现仅限于 4096 个 token 的单个指令,但高级实现可以处理任意大小(通过编译创建 4096 个 token 的指令序列,并根据需要提取和存储指令),以完成大型任务,例如总结一本完整的书,甚至编写一个完整的系列小说。

在为软件 3.0 编程构建好对象和函数后,我们就可以将它们组合起来形成复杂的软件 3.0 程序。

理想情况下,软件 3.0 的程序应将状态存储在对象(索引数据结构)中,这样就不会有丢失信息的风险,而且还应该利用神经计算函数来转换状态并达到预期结果。

编译与解释

我们无需将高级抽象编译成非结构化自然语言的 4096 个 Token 的指令,我们可以转化为结构化且可以验证的中间语言。这些中间语言可以提供更好的验证、安全执行和可移植性,而且允许相同的 3.0 代码在不同的神经计算上运行,例如 Cohere 或 Anthropic AI 模型。这样就无需依赖将中间语言转换为低级指令所需的特定提示技术或机制,类似于相同的 Python 代码可以在不同的机器上运行。

除了神经计算以外,这些中间语言还可以在任意平台上运行,例如编译成 Python 等编程语言在常规计算芯片上运行,或者是 CUDA 在 GPU 上运行,或者是全新的语言和命令连接到不同的系统。

软件 3.0 的发展前景

在构建神经计算机时,我们可以看到我们似乎是在构建一个生物大脑,其中结合了许多相似的机制,比如长短期记忆、神经处理、逻辑电路……尽管是以语言的形态。

因此,构建神经计算机可以视为通往拥有人类智能水平的 AGI 系统的正确道路。

软件 2.0 适用于哪些领域?

在全新的软件范式中,软件 2.0 可以作为“微调”过程,无论是通过监督学习还是通过人工反馈的强化学习,都可以利用软件 2.0 自定义神经计算单元,以适应特定的用例和数据集。

因此,神经计算的处理能力保持不变,但这种能力可以调整,比如移除不相关的功能等,从而在特定用例上发挥更好的作用。与传统计算相比,这种学习和反学习能力是人工智能驱动的神经计算的最大优势。

移植到软件 3.0 的好处

为什么我们要将复杂的程序移植到软件 3.0?一个很大的原因是我们可以利用自然语言的固有属性。这样不仅可以大幅降低编写软件的难度,而且还可以让软件更好地服务于不同的任务和领域。下面是一些具体的优缺点:

优点:

●方便人类理解。软件 3.0 可以被人类理解,而且易于编写,因为输入和输出都采用自然语言,与软件 2.0 相比,软件 3.0 提供了更高的透明度和可解释性。此外,在软件 3.0 中,AI 模型保持不变,可以通过 API 通信,大多数用户都无需在意模型的训练和实现细节。

●通用性和简单性。软件 3.0 可以捕获早期范式中难以全部覆盖的边缘情况。在传统的软件 1.0 中,捕获一个简单用例(例如识别图像中的对象)的所有功能就需要编写 1000 行 if-else 条件语句;在软件 2.0 中,我们需要收集包含 1000 多张图像的数据集并训练神经网络;而到了软件 3.0,我们只需为大型 AI 模型输入一个提示即可!

●不依赖于框架。软件 3.0 的一大优势是只有一个简单的英语界面,尽管底层有大量架构(例如编程语言)。

●不需要基于梯度的优化。在软件 2.0 中,训练一个神经网络可能需要数百个  epoch 以及几天的时间,通过反向传播和梯度下降优化网络权重。而软件 3.0 无需进行梯度优化,只需调用一次大型 AI 模型。

●降低难度。软件 3.0 可供更广泛的用户使用,无论他们的技术力如何,因此软件 3.0 可以成为不断发展的软件开发世界中更易于访问且更通用的解决方案,从而可以节省软件工程整体的时间和预算。在软件 3.0 中编程几乎是一种语言练习,你只需要编写简洁明确的英语,新一代的程序员可能更多是语言学家,而不是传统的程序员。

缺点:

●容错。目前,关于软件 3.0 的容错性以及可靠性是一个悬而未决的问题。使用黑盒 AI 模型的一个普遍问题是错误率很高,如果我们将自然语言 + 大型语言模型视为新的软件抽象,那么错误率将是一个不可忽视的问题,调用大型语言模型的次数越多,程序出错的可能性就越大。在某些情况下,一定程度的错误率是可以接受的。但这引发了一个问题,即软件 3.0 中有哪些好的自动纠错机制。

●专业知识的局限性。提示预先训练的模型可能不需要专家级的领域专业知识,但对于某些关键性的应用程序来说,我们需要继续采用软件 2.0 的方式对其进行微调,而且未来这些工作会变得很重要。

●提示的过分挑剔。软件 3.0 程序的行为可能会因为用词或语法的变化,而发生很大的不可预测的变化。能力越大,责任越大,只要有一个语法错误,使用软件 3.0 的系统就有可能全面故障。

●延迟和成本。软件 3.0 的另一个潜在缺点延迟和成本。假设我们通过远程 API 访问大型语言模型,并假设上下文窗口很大(例如 >=5 万 Token),用户可能需要仔细考虑如何在上下文窗口中输入 Token,而不是更加注意潜在的延迟/成本影响。编写任何软件程序都需要用户注意系统资源,例如 CPU、内存、磁盘空间等,这方面的影响仍然存在,只是用户的关注点有所不同。

未来的发展

软件 3.0 有望改变我们构建技术以及与技术交互的方式。这场革命的核心在于人工智能驱动的开发,以实现无缝的、类似人与人的软件交互。单个软件组件可能就像一个 AI 界面,内部包含程序状态,而自然语言将成为软件技术栈、数据库、前端、后端以及 API 调用的结缔组织。

人类将使用自然语言与 AI 交流,而 AI 将操作机器,从而实现更直观、更高效的操作。我们将看来 Web 浏览器出现越来越多这类的转变,MULTI·ON 和 Adept AI 就可以用户输入的自然语言自动浏览。同样,人工智能驱动的合成在各个创意领域得到了利用。音乐、视频、游戏和电影都在经历一场复兴,因为 AI 能够根据人类的输入生成复杂且引人入胜的内容,人类的创造力与机器生成的艺术之间的界限正变得越来越模糊。

我们应该将软件 3.0 视为一种新兴的编程范式,而不是简单地将 GPT 等大型 AI 模型视为强大的文本生成工具,当然目前我们还有更多工作要做。

当前的工具可帮助我们编写 1.0 和 2.0 的代码,例如能够高亮显示语法的 IDE、调试器、分析器以及代码和数据集版本控制。在软件 3.0 的技术栈中,编程的工作将变为编写和提炼自然语言提示。当 AI 模型生成的结果不符合需求时,你需要改进提示或上下文。将来可能会出现一款基于软件 3.0 的 IDE,帮助我们编写、测试和改进提示,同时还会建议替代方案或提供有关清晰度和有效性的实时反馈。

GitHub 和 Huggingface 在软件 1.0 和软件 2.0 的发展中取得了非常大的成功。但在软件 3.0 中,GitHub 有发展空间吗?其实,GitHub 的存储库可用于存储提示和模型配置,而提交可用于提交库的改进和扩展。

用于模型训练的 Pytorch 等库、用于数据收集和标签的 Scale AI 等服务促进了软件 2.0 的发展。即将推出的 Langchain 等库是否可以弥合这一差距,以及我们可以开发哪些额外的服务来简化软件 3.0 的编程,这些问题还有待观察。

对于软件 3.0 的部署和用户交互,最终产品不太可能是单一的聊天界面。我们将看到专门负责各种认知任务的助手,比如驾驶辅助、代理以及其他助手等等,以减少人类的负担。

在不久的将来,软件 3.0 将在每个领域中变得越来越普遍。当然对于这些领域来说,模型的准确性并不是很关键,而设计明确的算法有很大的难度。这为考虑整个软件开发生态系统以及如何适应这种新的编程范式提供了许多令人兴奋的机会。从长远来看,未来充满了希望,随着我们逐步接近 AGI,软件 3.0 将处于最前沿,甚至连 JARVIS 这样的虚构人工智能系统也有可能变成现实。

一些预测:

●我们将为软件 3.0(新一代的 x86)开发通用 token 语言,即定义 AI 驱动计算的新指令集架构:

○多模态:模态 token + 布尔逻辑 token +其他辅助 token。

○融合检索和工具:类似于通过 CPU 读写内存。

○推理以及可解释性跟踪。

●OpenAI 将成为“神经计算”制造商(新一代的英特尔),每年发布一个新的 GPT。