如何从一名软件工程师转行做人工智能?

转自:http://36kr.com/p/5089937.html

一名软件工程师如果打算转行做人工智能,需要掌握这 5 项技能

编者按:本文由微信公众号“机器之心”(ID:almosthuman2014)编译,选自insightdatascience,参与:王宇欣、黄小天;36氪经授权发布。

近日,Insight AI 发布了一篇题为《Transitioning from Software Engineering to Artificial Intelligence》的文章,提出一名软件工程师如果打算转行做人工智能,需要掌握这 5 项技能:统计学、机器学习理论、数据整理、调试/调节模型、软件工程。

如何从一名软件工程师转行做人工智能?

Chris Lesniewski-Laas 正在与 Insight AI 员工讨论 Dropbox 的机器学习问题

关于将机器学习作为一项技能

作为软件工程师关键在于要紧跟框架、标准以及范式的最新状态。软件工程师不停地努力学习,希望把最好的工具运用到工作中。机器学习在当今诸多的应用程序中找到了立足点,很自然地它就变成了许多工程师想要掌握的一项技能。

但是,相比于新框架机器学习更难掌握。作为一个高效的实践者,你需要充分理解该领域的理论、广泛掌握当前最尖端的知识,并且有能力以不确定的方式塑造问题。

网上很多的指南只会简单地教你如何在一个策划好的数据集上训练可以立即使用的模型,并达到一个不错的准确度,然后就结束了。事实上,要成为一个优秀的机器学习工程师必须掌握更加广泛的技能。

以下是我们与超过 50 个湾区和纽约顶尖的机器学习团队对话的精华部分,他们来到 Insight AI,准备好解决其问题并加速实现人工智能应用的普及。

为什么机器学习不只是「另一个工具」

部署机器学习的解决方案不仅仅是在你的数据集上随意训练一个模型。它需要理解以下内容:

  • 你拥有的数据类型、它的统计学分布方式、它含有什么偏差。

  • 适用于你的特定数据集的统计模型,以及这些模型成功的可能性。

  • 相关指标的优化以及你的模型输出的意义。

换句话说,为了整合、部署以及调试模型,除去工程学的知识,你还需要有统计学、线性代数和优化理论的基础知识。

为一个问题搭建特定的机器学习解决方案,你需要考虑从数据的获取、标记和预处理到构建、更新并服务一个推理模型以及中间的一切等问题。

最终,我们认为可以提前为标准的网站搭建一个数据接口(REST API)。我们不能保证机器学习模型总是收敛或产生有用的输出。学习如何审视和传递有效的机器学习产出的最佳方式是理解其理论基础与数据分类之间联系的方式。

转行人工智能你需要掌握这 5 项技能

1.统计学

为了理解机器学习,坚实的统计学基础知识是必须的。这包括:

  • 评估模型成功的不同方法(精确度、召回率(recall)、特征曲线下的面积等)。你选择的损失函数和评估指标如何测量你的模型输出的偏差。

  • 如何理解过拟合(overfitting)和欠拟合(underfitting),以及偏差/变量权衡。

  • 模型的结果与置信度之间有什么联系。

2.机器学习理论

当你在训练神经网络时,实际上发生了什么?是什么使这些任务可行而其它的不行呢?对待该问题的好方法是,在深入理解理论之前,首先通过图和实例理解机器学习。

需要理解的概念有不同的损失函数工作的方法,反向传播有用的原因,以及计算图究竟是什么。深入理解构建函数模型并且与团队其他成员有效地对其进行沟通非常关键。以下是一些资源,以高层概述开始,逐渐深入。

  • 谷歌的深度学习课程是一个优秀的入门课程(https://www.udacity.com/course/deep-learning--ud730)。

  • 李飞飞的计算机视觉课程(http://cs231n.stanford.edu)和 Richard Socher 的自然语言处理课程(http://cs224d.stanford.edu)中包含更多专门的方法。

  • Goodfellow 的深度学习书(http://cs224d.stanford.edu)特别好,对基础进行了全面概述。

另一个基础技能是有能力阅读、理解和实验研究论文。起初看上去这似乎是一个艰巨的任务,所以一个不错的方法是从一篇后面附有代码的论文开始,并深入理解其实现。

3.数据整理(Data Wrangling)

问任何一个数据科学家,他们会告诉你其 90% 的工作是数据再加工(data munging)。它对于应用人工智能的重要性就如同你的模型的成功与你的数据的质量(和数量)高度相关一般。数据在许多方面起作用,可分为以下几个类别:

  • 数据获取(找到好的数据源,精确测定数据的质量和分类,获取并推理标签)

  • 数据预处理(补全缺失值(missing data)、特征工程、数据增强、数据归一化、交叉检验拆分)

  • 数据后处理(使模型的输出有用,去除人为数据,处理特殊情况和异常值)

熟悉数据整理的最好方法是掌握原始的数据集,并尝试使用它。网上有很多的数据集并且许多社交媒体和新闻媒体网站都有着很好的应用程序接口。遵循以下步骤是一个不错的学习方法:

  • 掌握一个开源的数据集并对其进行检测。它有多大(观测值和特征值的数量)?数据是如何分布的?是否有缺失值或者不含异常值?

  • 开始在原始数据和有用数据之间构建一条转换的通道。你是如何回填丢失值的呢?处理异常值最合适的方法是什么?你如何归一化数据?你可以创造更具表现力的特征吗?

  • 检查你的转换数据集。如果一切看上去都不错,进行下一步吧!

4.调试/调节模型

对一些不收敛或者包含与调试代码非常不同的过程但是给出合理结果的机器学习算法进行调试。同样地,找到正确的架构和超参数需要坚实的理论基础,良好的基础建设工作可以测试不同的配置。

由于该领域在向前发展,调试模型的方法也在不断进化。以下是从我们的讨论和部署反映了 KISS 理论和软件工程师之间的熟悉度的模型的经验中得来的「合理性检查(sanity checks)」。

  • 尽快从已被证明可以在类似数据集上工作的简单模型入手,掌握基线。古典统计学习模型(线性回归、最近邻等)或者简单的启发式方法或规则会让你明白 80% 的方法并且更快地进行实现。入门的时候,以最简单的方法去解决问题(查看谷歌机器学习规则的第一点)。

  • 如果你决定训练一个更加复杂的模型以在基线上有所提升,不妨从数据集的一小部分入手,在分数据集上训练模型使其过拟合。这保证了你的模型最起码的学习能力。不断地在模型上迭代直到你可以过拟合 5% 的数据。

  • 一旦你开始在更多的数据上训练,超参数就开始变得更重要了。理解这些参数背后的理论从而理解什么是要探索的合理值。

  • 使用理论方法调节你的模型。写下你使用的最低限度的配置并总结其结果。理想情况下,使用自动超参数搜索策略。在最开始,随机搜寻可能就足够了。尽可能地去探索更多理论方法吧。

许多步骤都能被你的开发技能加速,这引出了最后一个技能。

5.软件工程

许多应用型机器学习允许你充分利用软件工程技巧,有时需要做些变换。这些技巧包括:

  • 测试转换线路的不同方面(数据预处理和增强、输入和输出清除、模型推理时间)。

  • 构建模块化的代码和可重复的实验加速方法。

  • 在训练的不同阶段备份模型(检查点)。

  • 建立一个分布式基础架构来运行训练、超参数搜索或者更有效地推理。

想要知道更多我们推荐的成为优秀机器学习工程师的软件技能,请查看我们的推文

在工作中使用工具

上述资源会帮助你处理切实的机器学习问题。但是应用人工智能领域变化的特别快,最好的学习方式是动手实践并且真正尝试构建一个完整方案解决实际的问题。

待办事项:

  • 找一个你可以构建的产品应该会很有意思。什么可以让你的人生更高效呢?什么是可以提升使用数据完成的方法的工具?什么是解决一个有趣问题的数据驱动的方法?

  • 寻找与问题相关的数据集。对于如今大多数容易处理的问题,你应该寻找标注数据。如果对于你的问题不存在标注数据集,那么你就应该变得有创造性一点。什么是寻找相似数据或者高效标注数据的方法?

  • 从探索数据入手,看看你尝试完成的任务在你所拥有数据的数量和质量下是否可行。在你开始 TensorFlow 之前,网上搜索人们解决过的相似问题是一个不错的主意。哪些是你可以阅读的相关博文与论文,有助于你加快探索新方法?

找一些灵感,然后深入研究吧!记住,尽管机器学习工程的核心是构建产品,但是它还包含一个不可或缺的理论层面。你会探索一些模型和范式,这些东西在未来也许被证明是不成功的,但是这非常好,因为它会使你更好地了解问题的复杂性。

附言

人工智能是一个令人兴奋、不断变化的领域,它对机器学习工程师的需求很大,铺天盖地的新闻都在围绕这个主题进行报道。我们建议听取一些可靠的资源和新闻,从而将与该领域密切相关的一些创新中分离 PR 和抽象研究。以下是一些有所帮助的资源。

  • Hacker News:这是一家关注计算机科学、数据科学和创业精神的社会新闻网站。由 Y Combinator 运营—一家著名的公司孵化器。别被名字骗了!「hacker」这个单词最初的用法与网络罪犯没什么关系,而是指一些通过编程技巧聪明地解决问题的人。

  • Import AI :由 OpenAI 的 Jack Clark 运营的一家不错的简报,在行业内保持领先地位。

  • Insight Blog:我们时刻在进步。在我们 AI blog 中有一些推文关于之前的不同工程,并且可以为有趣的问题的结局提供不错的灵感。


<think>好的,用户想了解单片机软件工程师的职业发展路径和未来规划。首先,我需要明确用户的需求,他们可能是一名刚入行的工程师,或者正在考虑转行到这个领域,想要了解未来的发展方向和如何规划自己的职业生涯。 接下来,我需要整理现有的信息。根据用户提供的引用内容,特别是引用[3]提到的嵌入式软件开发的职业规划,可以推测单片机作为嵌入式系统的一部分,其发展路径可能与嵌入式相关。需要结合这些引用内容,同时补充单片机特有的内容。 首先,职业发展阶段。通常,工程师的发展会分为初级、中级、高级、专家或管理岗位。每个阶段需要掌握的技能不同。比如,初级阶段需要熟悉基础硬件和编程语言,中级则需要项目经验和系统设计能力,高级阶段可能涉及架构设计和团队管理,专家或管理层则需要战略规划能力。 然后,核心技能提升。单片机工程师需要掌握C语言、硬件知识、RTOS、通信协议等。同时,软技能如问题解决和团队协作也很重要。需要强调持续学习新技术,比如AIoT、低功耗设计等趋势。 接下来是发展方向。除了技术纵深发展,还可以横向扩展,比如向嵌入式Linux、物联网,或者管理、产品经理等角色。创业或教育也是可能的路径。 行业前景方面,结合引用[1]和[2],新能源和汽车电子领域对单片机需求大,特别是新能源汽车的智能控制。工业自动化和消费电子也是重要领域。需要指出这些行业的增长点,帮助用户了解未来机会。 职业规划策略部分,引用[3]提到的长期规划,分阶段目标,技术深度与广度的平衡,以及建立个人品牌。可以建议用户制定1-3年的短期目标,比如掌握特定技能,中期参与复杂项目,长期成为专家或管理者。 最后,生成的相关问题需要覆盖职业路径的各个方面,比如技能学习、行业选择、型挑战、认证作用等,方便用户进一步探索。 需要确保回答结构清晰,分点明确,使用正确的中文和LaTeX格式,同时自然融入引用内容。例如,在提到硬件工程师前景时引用[^1],嵌入式职业规划引用[^3],新能源行业引用[^2]。 检查是否所有数学公式都用$...$,独立公式用$$...$$,但可能单片机内容中数学公式较少,注意是否有需要的地方。比如可能在提到算法或通信协议时涉及数学表达式,需正确格式化。 最后确保回答真实可靠,引用来源恰当,问题相关且具有针对性,帮助用户深入理解职业发展的各个方面。</think>### 单片机软件工程师职业发展路径及规划分析 #### 一、职业发展阶段与核心能力要求 1. **初级阶段(1-3年)** - 核心技能:掌握$C/C++$语言编程、单片机外设驱动开发(如GPIO、ADC、PWM等)、基本硬件电路调试能力。 - 典型任务:完成模块级功能开发,例如通过$SPI/I2C$协议实现传感器数据采集。 2. **中级阶段(3-5年)** - 能力提升:熟悉实时操作系统(RTOS)如$FreeRTOS$,掌握低功耗设计(如动态电压调节公式$P = CV^2f$)、复杂通信协议(如CAN总线、LoRaWAN)。 - 项目经验:主导完整产品开发,例如基于$STM32$的智能家居控制器。 3. **高级阶段(5-10年)** - 技术纵深:精通嵌入式系统架构设计,优化代码效率(如时间复杂度的分析$O(n)$ vs $O(n^2)$),掌握跨平台开发能力。 - 管理能力:带领团队完成车载ECU或工业控制器等大型项目[^2]。 4. **专家/管理阶段(10年以上)** - 战略方向:定义技术路线(如选择$RISC-V$架构替代传统单片机),参与行业标准制定,或型为CTO/技术顾问。 --- #### 二、未来发展方向 1. **技术纵深发展** - 深入嵌入式AI:在单片机部署轻量级模型(如TinyML),实现边缘计算功能。 - 专攻安全领域:满足物联网设备的安全需求,研究加密算法(如$AES-256$)在资源受限芯片上的实现。 2. **横向扩展领域** - 向嵌入式Linux:开发高性能应用(如使用$Yocto$构建定制化系统)。 - 跨入汽车电子:参与新能源汽车的BMS(电池管理系统)开发。 3. **管理/创业路径** - 技术管理:协调软硬件团队,管理从需求分析到量产的全流程。 - 硬件创业:开发细分领域专用控制器(如农业物联网终端)。 --- #### 三、行业前景与机遇 1. **新能源与汽车电子** - 新能源汽车的电机控制、充电桩管理等场景需要高可靠性单片机方案,相关岗位需求年增长约15%。 2. **工业自动化** - PLC、工业机器人控制器等设备依赖实时性强的嵌入式系统,例如使用$Modbus$协议实现设备组网。 3. **智能硬件与AIoT** - 智能穿戴设备(如健康监测手环)要求超低功耗设计(静态电流$\leq 1\mu A$),推动技术迭代。 --- #### 四、职业规划策略 1. **技能树构建** - 基础层:数字电路(如CMOS逻辑门特性)、模拟电路(运放电路设计)。 - 工具链:掌握$Keil/IAR$开发环境、版本控制工具(Git)。 - 扩展能力:学习Python脚本自动化测试(如用$pytest$框架)。 2. **发展路线图示例** | 阶段 | 目标 | 里程碑 | |--------|-------------------------------|---------------------------------| | 短期 | 精通STM32 HAL库开发 | 独立完成带无线通信的物联网终端 | | 中期 | 掌握Zephyr RTOS | 主导工业级控制器开发项目 | | 长期 | 成为汽车电子系统架构师 | 定义符合ISO 26262标准的ECU方案 | 3. **持续学习机制** - 技术跟踪:关注RISC-V生态发展(如$GD32V$系列芯片)。 - 社区参与:在GitHub贡献开源项目(如$Arduino$核心库优化)。 --- §§ 1. 单片机工程师如何平衡硬件与软件技能的学习权重? 2. 在新能源行业中,单片机开发有哪些高价值应用场景? 3. 从单片机向Linux嵌入式开发需要克服哪些技术壁垒? 4. 如何通过认证考试(如ARM认证工程师)提升职业竞争力? 5. 35岁以上的单片机工程师如何规划型路径? [^1]: 硬件工程师在汽车电子等领域的深度技术要求 : 新能源汽车对控制系统的特殊需求 : 嵌入式工程师的长期职业发展策略
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值