[编程开发] AI 算法工程师需要学习C++吗?(含学习路线图)

[复制链接]
风雨路人 发表于 2023-11-8 21:27:26|来自:北京 | 显示全部楼层 |阅读模式
你以为的算法工程师的工作流程是这样的:



实际上的算法工程师的工作流程是这样的:



说道这里肯定就会有人疑问到了,这个和 C++有什么关系?
请往下看

高性能低延迟永远的神

就拿目前比较热门的搜广推来说吧,互联网的每个用户都需要得到其个性化的推荐或搜索结果,这就不得不让你的推荐方法面向用户,让他们使用。
一个实时推荐系统的平均响应时间在 100ms 左右,而最低响应时间在 200ms 内,否则就会让用户觉得推荐等待时间过长,带来不好的体验。因此,对于搜广推三者而言,不仅仅考验的是模型复杂程度、推荐准确性、更重要的是响应时间能不能达到要求。
这就导致许多大厂在面对服务架构的时候选择使用 C++来提供服务。如果不会一个 AI 算法工程师不会 C++那么你的模型,可能就卡死在上线结果验证这一步就死翘翘了。
这个时候觉得这个工作可以让做工程的小伙伴来帮你上线,那么你可要想好,最后的模型带来的收益到底是算在谁的头上呢?
目前更火热的就是实时推荐,直接面向用户,对响应延迟的要求更高。根据用户的实时行为秒刷推荐结果,虽然可能会借助数据库或 Redis 事先计算好用户特征和物品特征,但是还是需要通过模型召回、排序等一些列操作,这种低延迟实时工作不依靠 C++确实难以完成。
是不是不接触搜广推这种面向用户的算法工程师就能远离 C++了呢?我的回答只能是不行
调包侠也要有梦想

尝试过 Python 的简短、灵活丰富的工具包后,大多数会对 C++嗤之以鼻吧,同样的工作 Python 的开发时间也远远小于 C++的开发时间,Python 的上手难度同样远远小于 C++,更何况 Python 在深度学习越来越火热,为什么还需要 C++呢?
不可否认 Python 在深度学习、机器学习领域大杀特杀,但是别忘记了许多深度学习和机器学习的工具的底层都是 C++在实现,C++通常与 CUDA 和 OpenCL 结合使用,从而使用 GPU 的强大功能进行通用计算的编程框架来加快深度学习任务的速度。
当然学会了 C++你还可以直接操作 NPU 或 GPU 交互并进行低级控制,利用这些来加快你的运算。
还有一点就是在工业深度学习领域,需要与硬件结合的底层逻辑同样需要 C++来实现,在嵌入式平台上进行预训练的微调还是需要通过 C++实现,或者实现模型更新、梯度下降等等步骤。
其他一些说不明的好处

在招聘的时候,C++的好坏程度可以从侧面反映一个应聘者对计算机底层逻辑理解的程度。另外 C++作为一种学习曲线较高的学习语言,同样可以反应一个应聘者对于知识的钻研程度。
还有就是,理解了 C++对于其他语言的理解也有帮助。
当然算法工程师肯定不会单学会一门语言的,你可能会操作预处理写 SQL 或者通过 Spark 来实现数据预处理, 这里可能会使用到 Python、Scala 或者 Java 等等,所以千万不要惧怕学习一门新的语言,毕竟工作久了就知道,面对各种各样的场景就需要使用不一样的编程语言来应对。
对了,作为一个算法工程师还必须紧紧关注技术发展,比如最近特别火的 AGI 大模型技术,可以参加知学堂推出的《程序员的 AI 大模型进阶之旅》一共 2 天的课程,可以帮助你梳理大模型领域的学习框架。


最重要的是这个课程是完全免费的,不需要钱就可以和大牛对话,更能体验自主训练的机器学习模型,实践理论相结合。上面的链接就是公开课的链接!另外,添加课程之后一定一定一定要添加助教小姐姐的微信,可以私聊助教领取今年最火最热的大模型学习资源!
给一份学习路线吧

经历过的同学懂得都懂,99% 的同学对 C++ 的评价往往都是 「复杂且难学」,但是在你的程序是计算密集型或者内存密集型的时候,就不得不感叹 C++的优点。时至今日, C++ 依旧是解决性能问题的利器,短时间里在市场上没有真正的竞争对手,对 C++ 的需求会在相当长的时间里一直存在。如果有时间不如按照下面的学习路线开始你的 C++之旅。
按照整个流程来看,可以将 C++开发流程分为四个整体的模块,从而贯穿整个 C++学习职业生涯,包括 C++语言基础,C++编译工具,C++系统设计以及其他计算机基础和软技能。
C++语言基础

不用说这部分是 C++语言基础,在这个阶段从基本运算开始逐步扩充函数、结构体,指针和引用、类和结构体等基本操作应该了然于胸。这个阶段的学习建议学习 《C++ Primer》这本书,虽然这本书十分耗时,但是建议在有时间的情况下,还是把这 800 多页的内容慢慢理解,毕竟 C++绝不是简简单单可以学习精通的一门语言。在学习阶段最好有一些小项目进行联手,加深对 C++的理解才是重中之重。
C++ 编译工具

这里面要提到的一点就是,如何利用好 C++的库还有 CMake 的用法。C++ 程序员社区中最大的问题之一就是缺乏标准化,这意味着要使用许多不同的工具和流程来实现相同的目标,但往往会产生不同的结果和令人头疼的问题,不过目前绝大多数依旧采用 CMake 的方式来处理。CMake 还是跨平台的。无论你使用的是什么操作系统(Linux、MacOS、Windows),都不需要任何特定配置。你可以跳过 Makefile、Visual Studio 项目设置和批处理文件。CMake 会自动处理一切。如果需要使用 C++撑起一个项目的话,不简简单单是一个逻辑更重要的是学习C++的编译过程。
C++ 系统设计

如果想要在 C++领域走的更远,还需要有着架构思维。这个阶段可以从设计模式开始,再到架构设计。
总体来说设计模式分为三大类
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
利用 C++实现这些设计模式并牢记于心重中之重。
通用技能

这里阐述以下操作系统的重要性,对于程序员来说,程序员创造的不是硬件,而是各种应用程序,但是如果程序员只做应用不懂硬件层面的知识的话,是无法成为硬核程序员。
C++本身就是较为接触底层的语言,更优很多时候需要直接使用操作系统的接口功能,这就造成了 C/C++ 语言繁、难的地方。也就是因为这些原因,想要学习好 C++一定要学习好操作系统。当然,计算机从业者都应该打好计算机基础的能力,这也就是称之为通用能力的原因。


本文作者:@TopGeeky
全部回复0 显示全部楼层
暂无回复,精彩从你开始!

快速回帖

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则