如何区分 AI 建模和实现?

人工智能 楷模 比较 执行
2021-11-04 15:38:27

引用此Eric关于建模和实现的元帖子:

它们并不完全相同,尽管密切相关。这是数学家和早期程序员学习的一个非常困难的课程,尤其是在 70 年代(数学证明可能需要大量非平凡的编程工作以使其“可计算”,就像在计算机上运行一样)。

如果它们不一样,有什么区别?

当我们谈论 AI 实施和建模时,我们该如何说?上面建议这不是一件容易的事。那么当我们谈论它时,我们可以在哪里划清界限?

我问的是一般问题,不是专门针对这个网站的,这就是为什么我没有在 meta 中发布问题

2个回答

区分建模和实现的一种好方法是考虑模型占据更高级别的抽象。

继续这个数学例子:尽管实验数学可能依赖于计算,但该程序可以被认为是更抽象的存在证明的必要条件的一种可能实现。

在过去的 25 年中,软件工程方法论在分离模型和实现方面已经变得相当出色,例如,通过使用接口/类型类/抽象基类来定义对通过派生类的实现具体实现的行为的约束。

人工智能一直是“整洁与邋遢”之间的战斗。Neats 倾向于从干净的抽象中“自上而下”工作,“scruffies”喜欢“自下而上”工作,并将实现的“部分”结合在一起,看看会发生什么。

当然,在实践中,两种风格之间的相互作用是必要的,但是当我们将机制从特定实现抽象为最通用(因此可重用)的形式时,人工智能作为一门科学就会进步。

在人工智能(但总的来说,我相信)中,简化是建模更类似于数学(以及相关的硬科学,如物理和......计算机科学),以及软件工程的实现。

让我们举一个真正在 AI 之外的具体示例:找到给定多项式的最小值(如果存在)。

数学家将推导多项式,找到零点,并检查凸性以找到最小值(如果有零的话)。这个程序非常标准——有人会说直截了当。它依赖于知识体系和适合手动证明的抽象级别。

软件工程师的方法实际上解释起来要长得多,我将跳过它。关键是知识体系是相关的,但又是不同的:我们现在必须找到一个逐步的过程,让计算机达到结果。数学家可以直接在 MathLab 中实现,几乎是逐字逐句,但我们假设是 MathLab。为了构建 MathLab,我们又回到了制作计算机可以执行的程序的问题上。例如,我们可以基于 Euler 的方法来寻找根(一种“简单”的方法,一步一步地关闭根)等。

在计算机上实现简单的数学运算可能非常复杂。也许最著名的是随机数生成在数学上,这个概念是纯粹而清晰的。生成一个实际的随机数比看起来更难以捉摸,以至于它需要新模型和新实现......

历史上的一个具体例子:神经网络。在 80 年代和 90 年代,NN 是加权图,可以使用图形库或类似的基础库在计算机上执行。选择权重是一项挑战。有一天,引入了反向传播学习模型来自动选择权重。该模型依赖于专用于 NN 的过程,使用偏导数、梯度下降、链式规则等术语。后来,聪明的工程师创建了库来自动化反向传播过程。这些库可能与原始模型有些距离,因为工程师学习如何使其可计算,甚至更快(即优化、近似/截断)。