Answers:
您不需要强大的语言来编写AI。大多数开发人员都在使用Keras,Torch,Caffe,Watson,TensorFlow等库。这些库经过高度优化,可以处理所有工作,它们是使用高性能语言(如C)构建的。Python就是用来描述神经网络层,加载数据,启动处理并显示结果。相反,使用C ++几乎不会提高性能,但对于非开发人员而言,因为它需要关心内存管理,因此会变得更加困难。另外,几个AI人可能没有非常扎实的编程或计算机科学背景。
另一个类似的例子是游戏开发,其中引擎是用C / C ++编码的,并且通常所有游戏逻辑都是用高级语言编写的。
实际上,C ++是AI / ML领域中使用最广泛的语言之一。Python通常可能会更流行,但是正如其他人所指出的,使用混合系统实际上是很常见的,在该系统中,CPU密集型数字运算是使用C ++完成的,而Python用于更高级别的功能。
只是为了说明:
这取决于它所需要的灵活性:如果您有一个成熟的系统可以投入生产,并且不需要太多调整,那么C ++(甚至C)可能就可以了。您需要花很多时间来构建软件,但是随后它应该运行得很快。
但是,如果您仍在尝试设置和参数,并且可能需要调整体系结构,则使用C ++将很笨拙。您需要像Python这样的语言来简化更改。更改代码更容易,因为通常可以使用Python之类的语言更快地进行编码。您所付出的代价是该软件通常无法正常运行。
您需要确定这种权衡如何最适合您。通常最好花更少的时间在编码上,而不必担心更长的运行时间。如果您花费一天的时间来完成代码,那么C编码版本需要大量时间来赶上。在大多数情况下,这是不值得的。
混合系统是一种常见的方法,在该系统中,核心库是在C / C ++中实现的,因为它们不需要太多更改,而前端/胶水/接口是在Python中,因为那里需要灵活性,而速度却不是如此关键。
顺便说一下,这不是AI特有的问题,而是解释型和编译型语言的一般问题。有了AI,许多系统仍然专注于研究而不是应用程序,这就是开发速度胜过执行速度的地方。
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是更好的选择。
你声称
从技术上讲,C ++是比python更强大的语言。
但是,这种说法是错误的(或意义不大)。请记住,编程语言是一种规范(通常是一些用英语编写的文档)。例如,n3337是C ++规范的最新草案。我不喜欢Python,但是它确实比C ++强大(即使C ++ 实现通常比Python更快):一个优秀的Python程序员可以在Python中很好地编写代码,另一个优秀的C ++程序员可以在C ++中很好编写,反之亦然反之亦然。
从理论上讲,C ++和Python都是图灵完备的(有目的的)编程语言。
Python和C ++一样具有表现力。我无法命名Python具有但C ++没有的编程语言功能(与反射相关的功能除外;另请参阅此答案并注意dlopen
-请参阅我的manydl.c程序-,LLVM,libgccjit,libbacktrace和考虑一些meta -programming方式与他们点菜Bismon或类似J.Pitrat的博客主张它)。
也许您认为编程语言就是实现它的软件。然后,Python与C ++一样具有表现力(并且似乎更易于学习,但这是一种错觉;有关该错觉的更多信息,请参见http://norvig.com/21-days.html)。Python和C ++具有非常相似的语义,即使它们的语法非常不同。它们的类型系统非常不同。
可悲的是,实际上,许多最新的主要机器学习库(例如TensorFlow或Gudhi)实际上在Python中比在C ++中更易于使用。但是您可以从C ++代码中使用TensorFlow或Gudhi,因为TensorFlow和Gudhi大多数都是用C ++编码的,并且都提供并记录了C ++ API(而不仅仅是Python)。
C ++支持多线程编程,但是通常的Python实现具有其GIL(按字节编码),因此比C ++慢得多(C ++通常是通过优化编译器(如GCC或Clang 编译的;但是您可以找到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 ++代码)。