人工智能的编程语言,大家可能第一时间想到Python,但是人工智能的算法落地应用主要还是依赖于C/C++。因为人工智能是计算密集型,需要非常精细的优化,还需要GPU、专用硬件之类的接口,这些都只有C/C++能做到,所以某种意义上来说,其实C/C++才是人工智能领域最重要的语言。除此之外,深度学习模型在训练时使用Python,但在嵌入式或者服务器端部署时,大都是C/C++。
超过90%的自动驾驶、人工智能领域的职位需要申请者了解或精通C++,超过70%的职位需要了解C。
C 和 C++ 编程语言都以速度而闻名。许多实时应用程序或使用并行架构的应用程序都是用 C/C++ 编写的。例如,看这个招聘,看到需要 RTOS、CUDA、计算机视觉。所有这些都应该以 C/C++ 的形式出现。另外,快速浏览一下这个。看到ROS了吗?好吧,我打赌这将是带有 C/C++ 编程接口的 ROS。也看看这个。看到实时限制了吗?是的,那就是 C/C++。
这只是一个示例集,但它概括得很好。自动驾驶汽车工程师使用 C/C++ 尽可能提高机器的速度。请记住,自动驾驶车辆中的所有处理都是实时完成的,有时甚至是在并行架构中完成的,因此您不仅必须学习为 CPU 编写代码,还必须学习为 GPU 编写代码。对于您来说,提供能够每秒处理大量图像(考虑常见的 fps — 15、30 甚至 60)的软件至关重要。
现在,仅仅了解语言是不够的。顶级 C/C++ 开发人员经常说,编写得不好的 C/C++ 代码的性能可能比编写得好的 Java 代码还要差。然而,如果您学习一些好的优化技术,您应该能够编写高质量、高性能的代码。如果您想获得自动驾驶汽车工程师的职位,这应该是您的目标。
现在我已经阐述了为什么学习 C/C++ 是个好主意的一些原因,让我们更详细地了解您最有可能使用这种语言进行编码的工具和库。请务必查看参考资料部分,了解我最近读过的以及我推荐的书籍列表。
机器人操作系统(ROS)不是操作系统。我知道,很奇怪。ROS是一个由用于编写机器人软件的工具和库组成的框架。ROS框架可以轻松地安装在Ubuntu上,并且可以立即启动并运行。
ROS 用于开发自动驾驶汽车的原因之一是它的设计惯例。ROS 通过使用发布者和订阅者架构帮助您实现模块化和分布式代码。此外,ROS 是在开源的基础上创建的,因此机器人技术中最常用算法的许多实现都可以随时供您使用或修改。您可以找到卡尔曼滤波器、粒子滤波器、车道检测管道等。
实际上,您可以使用其他编程语言来利用 ROS 库、包和工具,但大多数生产代码将用 C/C++ 编写,因此请务必对其进行审查。
大多数时候,代码都是为 CPU 编写的来进行计算。然而,有时是 GPU(图形处理单元)进行计算。事情是这样的,CPU 非常擅长执行顺序工作,即一次只处理一件事,即使有多个线程也是如此。他们的速度非常快。如此之快,以至于给人一种同时处理多个事物的错觉。然而,还有一个针对并行处理进行优化的其他处理单元。很长一段时间以来,很少有伟大的公司能够满足游戏需求,每年创造更快、更清晰的游戏体验。我们几乎不知道,经过优化以同时更新许多像素以创建逼真的游戏体验的相同处理单元稍后将用于加速深度学习算法。是的,谢谢各位玩家!
CUDA 是一个可用于创建并行代码的库。同样,还有其他编程语言可以利用 CUDA 和 GPU 的强大功能,但是,进入实时系统的将是 C/C++。确保学习一点 CUDA C。还记得大学里的矩阵乘法吗?嗯,可以使用 CUDA C 将其制作成并行代码。实际上,许多图像预处理技术以及深度学习计算都可以利用 GPU 的强大功能。
当有人提到 RTOS 时,常常会产生混淆。RTOS 字面意思是实时操作系统,但是,人们通常指的是必须在数据传入时响应事件的应用程序。这些系统的响应通常需要时间限制,例如 10 毫秒、50 毫秒或 100 毫秒多发性硬化症。然而,这通常不需要限制于特定的操作系统。这么说吧,Linux不是一个实时操作系统,但是它经常用于实时应用程序。
话虽这么说,还有其他被认为是实时的操作系统,例如 QNX 和 VxWorks,并且在实施时间要求非常紧张的解决方案时,您可能想了解一些架构决策和编码原则。
为了提高您的 RTOS 技能,我会推荐两件事。首先,去找一本有关 Linux 内核的书。我可以推荐 Robert Love 的《Linux 内核开发(第 3 版)》。这将帮助您总体了解操作系统。进程管理与调度、定时器、内存管理等,对于实时应用的速度非常重要。然后,去找一本关于实时系统的书。我可以推荐 Phillip A. Laplante 等人的《实时系统设计和分析:实践者工具第 4 版》。本书不仅将向您展示 RTOS 的基础、架构和细节,还将介绍与 RTOS 相关的编程最佳实践、需求工程和其他软件开发过程。
我使用过很多 OpenCV,但我经常使用 Python 而不是 C/C++。了解 OpenCV 还具有 C/C++ 绑定对您来说很重要。因此,作为自动驾驶汽车工程师,一个很可能的工作流程是使用 Python 和 OpenCV 制作图像预处理管道的原型,对其进行完善,然后将其转换为 C/C++ 代码。确保在参加面试之前至少使用几次 OpenCV C/C++ 绑定。
我知道,深度学习这个词不是一个库。但我只想在这里提到这一点,因为大多数深度学习库都是用 C/C++ 编码的,并且只有API可供您用其他一些语言(例如 Python)调用。可能会出现这样的情况:您会被要求使用 Keras 之类的工具对深度学习管道进行原型设计,然后将其转移到 TensorFlow C++ 甚至 CUDA C,尽管最后一个可能有点牵强。所以,在申请之前先学会使用 TensorFlow C++ API!
自动驾驶汽车已经越来越近,不要浪费时间。每天努力工作,成为最好的 C/C++ 软件工程师,你就会离成为自动驾驶汽车工程师更近一步。
C++在人工智能中的六大优势。首先在性能优势方面,C++一向以快著称,作为编译型语言,相比于Python等解释性语言,其执行效率更高,对于需要推理大量模型训练的人工智能应用,如机器学习或深度学习模型,这种性能优势非常非常重要。接着在并行和并发方面:C++支持并行和并发编程,可以有效地利用多个处理器核心,进一步提高计算效率,这对于需要大量计算的人工智能任务非常有用,例如,C++可以使用OpenMP或MPI等并行计算库,以在多个处理器核心上同时运行代码。在内存管理层面。C++通过手动内存管理,能够精确控制程序的内存分配和释放,从而有效地利用内存资源,提高程序的执行效率,而手动内存管理,可以更直接地与底层硬件进行交互,充分利用硬件资源,这和人工智能的生产需求非常匹配。
在库和框架支持方面,C++有大量的库和框架支持,如TensorFlow、Caffe等深度学习框架,都为C++提供了接口,这些库和框架使得开发人工智能应用更加高效。在与硬件交互方面,C++允许直接与硬件交互,这在处理如GPU等特定硬件上的计算密集型任务时非常有用,这种交互性可以提高计算效率,是实现高性能人工智能应用的关键。在算法优化方面,由于C++提供了更底层的控制,因此它更适合进行算法优化,在人工智能中,往往需要对算法进行精细优化以提高性能,C++提供了这种可能性。以上就是C++在人工智能中的六大优势。总之,只要在人工智能中涉及到高性能,底层控制,以及并行计算的任务,那肯定是离不开C++。
C++是一门广泛应用于程序开发的编程语言。在人工智能应用中,C++可以通过使用高效的计算机指令来处理大量的数据。因此,C++通常作为实现基于神经网络模型的人工智能系统的一种很好的语言选择。此外,C++的可扩展性与高效性也使它成为了许多大型的人工智能项目中的首选。
同时,为了更好地掌握和运用人工智能技术,还需要懂得数据库、数据分析、数据可视化等相关技能。
做训练实现想法或者复现别人的算法用tf或者torch是可以的,但是一旦涉及到产品落地部署,一定要用c++的,比如使用tf 的c++版。
AI是计算密集型,需要非常精细的优化,还需要GPU、专用硬件之类的接口,这些都只有C/C++能做到,所以某种意义上来说,其实C/C++才是人工智能领域最重要的语言。
Python是API binding,使用Python是因为CPython的胶水语言特性,能够把用其他语言制作的各种模块很轻松的连接在一起,比如3D游戏中的图形渲染,性能要求特别高就可以用C/C++重写,而后封装为Python可以调用的扩展类库。
就落地来说,C++是肯定需要的,但是没有必要花费太多精力在精通C++上。
术业有专攻,一个人不可能完全掌握从算法研发到优化调优、落地部署的整个流程,此处的优化调优不仅仅指调参,还有加快模型速度、减小模型体量的多种尝试。工作中,一般都是负责某一个环节,把这个环节做精做强,做的独一无二就可以了。一套流程要掌握,但没有必要花费大量时间。
目前算法的精度提升日趋缓慢,并且模型结构也摸索的差不多了,可以落地的场景也探查殆尽。我觉得寻找算法与场景瓶颈,解决目前落地难或者突破新的研究方向是重要的,起码相对于精通C++来讲。
做出东西,有一个好的想法,并用Python做出一个吸引人的demo,剩下的会有专门人员来帮助落地。
C++在AI算法开发中的应用较为广泛。
首先,C++是一门高性能语言,它可以通过优化内存管理、代码结构等方面来提升程序的执行效率,这对于处理大量数据和复杂计算任务的AI算法非常重要。
其次,许多AI框架和库(如TensorFlow、Caffe等)都使用了C++作为底层实现语言,因此熟练掌握C++可以帮助工程师更好地理解和使用这些框架。
另外,在一些场景下(如嵌入式系统、移动设备等),由于硬件资源有限,需要使用较为轻量级的语言来进行开发。而C++恰好具备高效、低功耗的特点,在这些场景下表现尤为突出。
总之,虽然Python在AI领域中应用广泛且易学易用,但对于那些追求更高性能和更深入底层技术实现的工程师来说,熟练掌握C++也是必不可少的。
C++是一种高效的编程语言,具有出色的性能和可靠性。在人工智能领域,C++仍然是一种非常重要的语言。人工智能算法的核心仍然是C++,因为人工智能是计算密集型,需要非常精细的优化,还需要GPU、专用硬件之类的接口,这些都只有C++能够做到。因此,C++在人工智能领域仍然具有非常重要的地位。
尽管Python在人工智能领域的应用越来越广泛,但是C++仍然具有许多优势,使得它在某些方面比Python更加适合。以下是C++的一些优势:
企业对于人才的要求越来越高,仅仅掌握python 开发ai demo项目,远远不足以胜出,ai算法大多数基于深度学习算法模型,通常在模型训练和验证阶段会采用python语言。而在实际应用阶段则必须采用C++开调用模型和性能优化,从而提高算法运行效率。
人工智能,就是让机器可以像人一样思考问题。典型的场景有:图像识别、自然语言处理、语音处理、动态物体跟踪、可运动的机器人,等等。
智能,就是人类可以很容易作出判断,但是却根本描述不清楚为什么是这样。比方说,一张人脸,人类盯上不超过一秒钟,然后几乎不需要思考,就立刻认出这是谁。但是人类却根本无法用文字作出该脸特征的描述。读文章,有“语感”,听音乐,有“乐感”。为什么某首乐曲听上去悲伤?感觉,乐感,真的说不清楚悲伤的原因。开车,也是讲“感觉”。只有学驾照的时候,教练才教很多公式,教很多特殊点(雨刷铆钉,右边玻璃的右下角等等)。AlphaGo为什么是人工智能?对了,就是“棋感”。
而早期的深蓝下国际象棋,胜过人类,就不能叫智能。因为它基本上是以穷举为主,深蓝的每一步操作都是精确可描述的,是“可知”的,是机器思维而不是人类思维。相反,AlphaGo就连开发者都搞不清楚这机器是怎么运作的。它就是个“黑匣子”。它模拟的是人的“感觉”而不是一堆人类发明的精确围棋算法公式。感觉是无法用语言描述的。
简单算术运算也不是智能,因为人类列算式计算的每一步都是可精确描述的。同样电子计算器在算术运算时的每一个步骤同样也是如此(虽然它用的是二进制计算,数字电路,泰勒级数展开等与人类不太一样的方法)。
人工智能要模拟人的“感觉”,就必须训练,也可以叫做“学习”。比如让它区分猫和狗,就给它几万张猫和狗的图片,让它自己去慢慢学习。在学习前,人类只需要告诉它某张图是猫或是狗,其他信息一概不用多说。比如完全没有必要提醒它有胡子的就是猫。
从目前的技术来看,训练是非常考验技术和花费时间的。以致于大家一提到人工智能,就是以为在说机器训练(机器学习)。
训练是个反复迭代的过程,就是说需要不断地探索,此路不通,就换一条路,非常艰辛。现实中,往往是不断地调整神经网络的参数,不断地对比训练结果。多数时候还要数据预处理,以及辅助传统的机器学习、传统图像处理、模式识别等技术。
那么,上述过程,谁最擅长?现在公认的就是Python。
Python是解释性语言而,弱类型,用起来很方便,开发效率大大高过C 、JAVA等语言,而且有很多现成的机器学习、深度学习、科学计算库,这些都是它作为人工智能语言的优势。AlphaGo的顶层代码大部分是用的Python,AlphaGo的成功,也对Python起了很大的推动作用。
数据的训练还可以细分为两类。一是前期的算法探索和小样本数据训练,二是后期正式的大规模数据训练。比如实验的1万个样本,可能要训练1个小时才能得到理想的网络。而最终的100万个样本时,可能就需要100个小时。这已经很长了。这时候,C 的作用就体现出来了。可以用C 花很多的人力成本投入去优化算法。概括说来就是,前期用Python进行算法探索,待算法和相关参数确定,后期用C 重写算法实现生产环境的真实的正式的训练。
训练是人工智能的很难的一部分,但是绝对不是人工智能的全部。人工智能还包括前期的数据获取、数据预处理和后期的实际应用。
训练得到的只是一个巨大的神经网络,有了它以后就可以预测了。预测所需要花的时间远远短于训练。比如训练花100个小时,而用训练好后的网络预测可能只需要5秒。可别小看这5秒的短时间。我们仍然有必要优化,比如是否可以1秒就完成,0.1秒完成?试想,设计一个无人驾驶系统,那可是分秒必争啊!稍微反应迟缓就可能酿成事故。
这时候,C 的作用又一次体现出来了!
这还没完。人工智能的载体可能会很精简。比方说嵌入到人体,嵌入到汽车,这么小的系统,不是Python的天下。还有机器人,是可以运动的,如何驱动机器动,这不还是C 的强项嘛。
另外,还涉及到前期的数据采集和预处理。比如图像、音频、视频,需要实时感知,包括必要的预处理(比如灰度化、关键部位快速定位)。这就要用到音频视频的高效处理,数据通信,物联网等技术。这不还是C 的强项吗?
总之,在人工智能开发的整个过程中,Python主要处理算法模型部分,而具体的前期数据获取和后期与外部设备部分的交互则可以用C 来实现。
说个最夸张的例子。假如我们已知X要预测Y,Python做的工作就是找到Y=aX b这测关系式,特别是a和b的具体数值最值钱。而除此之外的所有工作,从数据采集,软件架构设计,数据库设计与读写,后台运作,分布式处理一直到前端展示可能都是用的Python以外的技术(比如C )来实现。Python的工作仅仅是得到a和b,仅此而已!
不过,从目前来看,人工智能最主要和最难的部分依然是由Python来实现的。
谷歌的搜索引擎源自Page和Brin的博士论文,当时他们的程序就是用Python写的,当日他们两就决定让谷歌投入做AI时,首选的语言就是Python。在收购DeepMind之后,谷歌开始发布大量的论文,放出的代码也基本上是基于Python的,所以自然而然……
02
这是由于Python的优点决定的,它具有多平台兼容性,代码简洁、可读性强,丰富的开源库等等。
C++在人工智能方面毫无用处?
恰恰相反,C++在人工智能方面的用处很大。目前机器学习的底层框架和所以来的支持库,几乎都是在使用C++。只是相比之下,Python的需求量更大,并不代表C++就没有市场了。
如果你写的是底层的库,那么C语言是最佳的选择,如果是代码量巨大,且有大量底层库支持,保证速度不至于慢到不能接受的程度,Python还是最佳的选择。
为什么招聘的需求不同?
再看一个例子,你就明白了。来自腾讯人工智能职位的招聘。
招聘岗位有:语言识别/合成研究员,机器学习研究员、自然语言处理研究员、计算机视觉研究员、语音识别开发工程师……
阅读一下这些岗位要求,你会发现一条几乎通用:至少精通一种技术语言,包括但不限于Java、C/C++、C#、Python等。
另外,要么就是要求你同时精通C++和Python。
结合上面对C++和Python的阐述,你应该知道为什么有些企业会招聘C++,有些企业会招Python了吧。
自动驾驶汽车相关工作求职技能:C、C++、Python最重要