为什么C ++在AI中似乎没有得到广泛使用?


15

我只想知道为什么机器学习工程师和AI程序员使用python之类的语言来执行AI任务,而不使用C ++,尽管从技术上讲C ++是比python更强大的语言。


2
答案会有所帮助
Ugnes

欢迎使用AI!我对问题的标题进行了略微编辑。高级别的Python语法简洁,是一种解释型语言,这意味着无需编译即可进行调整和测试。Python还允许按位操作
周四

Answers:


16

您不需要强大的语言来编写AI。大多数开发人员都在使用Keras,Torch,Caffe,Watson,TensorFlow等库。这些库经过高度优化,可以处理所有工作,它们是使用高性能语言(如C)构建的。Python就是用来描述神经网络层,加载数据,启动处理并显示结果。相反,使用C ++几乎不会提高性能,但对于非开发人员而言,因为它需要关心内存管理,因此会变得更加困难。另外,几个AI人可能没有非常扎实的编程或计算机科学背景。

另一个类似的例子是游戏开发,其中引擎是用C / C ++编码的,并且通常所有游戏逻辑都是用高级语言编写的。


1
如果我感兴趣的开发,并与机器学习和自然语言处理的硬件领域工作的..所以我可以使用C ++的AI
马克ellon

1
@AnishGupta:是的,可以,只要硬件支持必要的处理(具体来说,神经网络会占用大量处理器)。TensforFlow实际上是本地C ++(增加了Python绑定),以下是API:tensorflow.org/api_docs/cc
Neil Slater

“大多数AI配置文件都来自数据科学领域”。数据科学甚至不是一个定义明确的领域,因此您的句子可能不会被理解或误解。
nbro

1
“相反,使用C ++几乎不会提高性能,但是对于非开发人员而言,因为它需要关心内存管理,因此会更加困难。” 如果编写得当,则无需关心使用C ++进行的内存管理。
杰里米·布兰(JérémyBlain)

AI编程不仅涉及使用Keras和Torch之类的现有库。可以从头开始对神经网络进行编程,而无需外部依赖。Internet上提供了3层感知器的示例,并且S型激活功能适合4行代码。我想说,在没有现有库的情况下实现神经网络是理解该主题的更简单方法。
Manuel Rodriguez


5

这取决于它所需要的灵活性:如果您有一个成熟的系统可以投入生产,并且不需要太多调整,那么C ++(甚至C)可能就可以了。您需要花很多时间来构建软件,但是随后它应该运行得很快。

但是,如果您仍在尝试设置和参数,并且可能需要调整体系结构,则使用C ++将很笨拙。您需要像Python这样的语言来简化更改。更改代码更容易,因为通常可以使用Python之类的语言更快地进行编码。您所付出的代价是该软件通常无法正常运行。

您需要确定这种权衡如何最适合您。通常最好花更少的时间在编码上,而不必担心更长的运行时间。如果您花费一天的时间来完成代码,那么C编码版本需要大量时间来赶上。在大多数情况下,这是不值得的。

混合系统是一种常见的方法,在该系统中,核心库是在C / C ++中实现的,因为它们不需要太多更改,而前端/胶水/接口是在Python中,因为那里需要灵活性,而速度却不是如此关键。

顺便说一下,这不是AI特有的问题,而是解释型和编译型语言的一般问题。有了AI,许多系统仍然专注于研究而不是应用程序,这就是开发速度胜过执行速度的地方。


1
如果我使用C ++做到这一点,那么我能否获得比python更快的执行速度,以及性能水平又如何呢?因为据称:C ++比python快400倍
Mark ellon 18-4-27的

1
这个一般数字没有任何意义-它实际上取决于确切的应用程序。我认为对于大多数情况而言,400次可能太乐观了。但是要点是,如果您花费500倍的时间来编写(和调试!)软件,那么即使将速度提高400倍,也仍然会更慢!显然,这些数字是随机的,但是请不要低估正确设置程序所需的时间。通常,您会发现速度的提高被更快的开发时间所抵消。
奥利弗·梅森

1
我尝试使用python和C ++中的tensorflow库对神经网络进行编码。我发现:用C ++编码的神经网络算法的运行速度比使用相同库和相同算法的python快
280倍

1
那么,为什么不使用C ++来实现机器学习算法而不是使用python
Mark ellon

1
请参阅上面的答案...
Oliver Mason

2

AI应用程序的软件开发可以分为编程本身和原型制作。C / C ++是一种创建应用程序的好语言,因为它运行速度非常快,并且可以作为主流操作系统的库提供。如果有人要部署交钥匙设备,则预编译的C / C ++应用程序是黄金标准。

在可以使用GCC或LLVM编译器编译程序之前,C ++存在一个主要问题,有人需要知道他需要哪种算法。C ++可以执行给定的源代码,并提供有效的命令,但是尚不清楚以哪种方式填充数组以及代码中需要哪些for循环。这个问题适合应用程序编程之前的原型步骤。问题不是如何构建已编译的应用程序并将其作为操作系统软件包交付,而是要使用不同的AI算法,构建一些GUI原型并与团队成员讨论进度。

Guido van Rossum发明了基于脚本编程并提供近伪代码功能的第一类gui原型语言。它从未取代C ++,但创建了一种新的域。在软件实现之前,需要进行原型制作步骤,特别是在人工智能的创新领域。

为了解释为什么Python优于C ++,我们必须尝试使用​​C ++构建软件原型。是否可以使用该语言快速实现gui应用程序?没有C ++并非设计为具有快速编辑周期的原型语言,而是设计为系统程序员不可或缺的工具。这意味着,如果原型已经在工作,算法是否固定以及文档是否已编写,则可以使用C ++重新编程代码。这意味着,给定的Python原型将转换为C ++,并交付给现有的操作系​​统。但是对于与撰写论文,讨论替代方案和管理创新有关的前期准备,Python是更好的选择。


0

你声称

从技术上讲,C ++是比python更强大的语言。

但是,这种说法是错误的(或意义不大)。请记住,编程语言是一种规范(通常是一些用英语编写的文档)。例如,n3337是C ++规范的最新草案。我不喜欢Python,但是它确实比C ++强大(即使C ++ 实现通常比Python更快):一个优秀的Python程序员可以在Python中很好地编写代码,另一个优秀的C ++程序员可以在C ++中很好编写,反之亦然反之亦然。

从理论上讲,C ++和Python都是图灵完备的(有目的的)编程语言。

Python和C ++一样具有表现力。我无法命名Python具有但C ++没有的编程语言功能(与反射相关的功能除外;另请参阅答案并注意dlopen-请参阅我的manydl.c程序-,LLVMlibgccjitlibbacktrace和考虑一些meta -programming方式与他们点菜Bismon或类似J.Pitrat的博客主张它)。

也许您认为编程语言就是实现它的软件。然后,Python与C ++一样具有表现力(并且似乎更易于学习,但这是一种错觉;有关该错觉的更多信息,请参见http://norvig.com/21-days.html)。Python和C ++具有非常相似的语义,即使它们的语法非常不同。它们的类型系统非常不同。

可悲的是,实际上,许多最新的主要机器学习库(例如TensorFlowGudhi实际上在Python中比在C ++中更易于使用。但是您可以从C ++代码中使用TensorFlow或Gudhi,因为TensorFlow和Gudhi大多数都是用C ++编码的,并且都提供并记录了C ++ API(而不仅仅是Python)。

C ++支持多线程编程,但是通常的Python实现具有其GIL(按字节编码),因此比C ++慢得多(C ++通常是通过优化编译器(如GCCClang 编译的;但是您可以找到C ++解释器,例如Cling))。Python的一些实验性实现是JIT编译的,没有GIL。但是这些还不成熟:我建议投资100万欧元来提高TRL

还请注意,C ++比Python难学得多。即使拥有十二年的C ++编程经验,我也不能声称真正了解大多数C ++。

可悲的是,最近教AI软件工程的书籍(例如,这一本本)使用Python(而非C ++)作为示例。我实际上想要更多使用C ++的AI书!

顺便说一句,我使用AI技术编写了开放源代码软件(例如软件,或者已过时的GCC MELT),但它们不使用Python。我对AI应用程序的方法是开始在其中设计一些DSL

一些AI方法涉及元编程,例如,自己生成系统的一些(或大多数,甚至全部)代码。J.Pitrat(他于2019年10月去世)率先采用了这种方法。请参阅他的博客,他的CAIA系统和RefPerSys项目(其雄心是生成大多数(希望是全部)C ++代码)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.