如何从一名软件工程师转行做人工智能
人工智能是一个令人兴奋、不断变化的领域,一名软件工程师如果打算转行做人工智能,需要掌握哪些技能呢?以下是小编为你整理的转行做人工智能所需技能,希望能帮到你。
将机器学习作为一项技能
作为软件工程师关键在于要紧跟框架、标准以及范式的最新状态。软件工程师不停地努力学习,希望把最好的工具运用到工作中。机器学习在当今诸多的应用程序中找到了立足点,很自然地它就变成了许多工程师想要掌握的一项技能。
但是,相比于新框架机器学习更难掌握。作为一个高效的实践者,你需要充分理解该领域的理论、广泛掌握当前最尖端的知识,并且有能力以不确定的方式塑造问题。
网上很多的指南只会简单地教你如何在一个策划好的数据集上训练可以立即使用的模型,并达到一个不错的准确度,然后就结束了。事实上,要成为一个优秀的机器学习工程师必须掌握更加广泛的技能。
转行人工智能需掌握的技能
1.统计学
为了理解机器学习,坚实的统计学基础知识是必须的。这包括:
评估模型成功的不同方法(精确度、召回率(recall)、特征曲线下的面积等)。你选择的损失函数和评估指标如何测量你的模型输出的偏差。
如何理解过拟合(overfitting)和欠拟合(underfitting),以及偏差/变量权衡。
模型的结果与置信度之间有什么联系。
2.机器学习理论
当你在训练神经网络时,实际上发生了什么?是什么使这些任务可行而其它的不行呢?对待该问题的好方法是,在深入理解理论之前,首先通过图和实例理解机器学习。
需要理解的概念有不同的损失函数工作的方法,反向传播有用的原因,以及计算图究竟是什么。深入理解构建函数模型并且与团队其他成员有效地对其进行沟通非常关键。
另一个基础技能是有能力阅读、理解和实验研究论文。起初看上去这似乎是一个艰巨的任务,所以一个不错的方法是从一篇后面附有代码的论文开始,并深入理解其实现。
3.数据整理(Data Wrangling)
问任何一个数据科学家,他们会告诉你其 90% 的工作是数据再加工(data munging)。它对于应用人工智能的重要性就如同你的模型的成功与你的数据的质量(和数量)高度相关一般。数据在许多方面起作用,可分为以下几个类别:
(1)数据获取(找到好的数据源,精确测定数据的质量和分类,获取并推理标签)。
(2)数据预处理(补全缺失值(missing data)、特征工程、数据增强、数据归一化、交叉检验拆分)。
(3)数据后处理(使模型的输出有用,去除人为数据,处理特殊情况和异常值)。
熟悉数据整理的最好方法是掌握原始的数据集,并尝试使用它。网上有很多的数据集并且许多社交媒体和新闻媒体网站都有着很好的应用程序接口。
4.调试/调节模型
对一些不收敛或者包含与调试代码非常不同的过程但是给出合理结果的机器学习算法进行调试。同样地,找到正确的架构和超参数需要坚实的理论基础,良好的基础建设工作可以测试不同的配置。
由于该领域在向前发展,调试模型的方法也在不断进化。以下是从我们的讨论和部署反映了 KISS 理论和软件工程师之间的熟悉度的模型的经验中得来的「合理性检查(sanity checks)」。
尽快从已被证明可以在类似数据集上工作的简单模型入手,掌握基线。古典统计学习模型(线性回归、最近邻等)或者简单的启发式方法或规则会让你明白 80% 的方法并且更快地进行实现。入门的时候,以最简单的方法去解决问题(查看谷歌机器学习规则的第一点)。
如果你决定训练一个更加复杂的模型以在基线上有所提升,不妨从数据集的一小部分入手,在分数据集上训练模型使其过拟合。这保证了你的模型最起码的学习能力。不断地在模型上迭代直到你可以过拟合 5% 的数据。
一旦你开始在更多的数据上训练,超参数就开始变得更重要了。理解这些参数背后的理论从而理解什么是要探索的合理值。
使用理论方法调节你的模型。写下你使用的最低限度的配置并总结其结果。理想情况下,使用自动超参数搜索策略。在最开始,随机搜寻可能就足够了。尽可能地去探索更多理论方法吧。
许多步骤都能被你的开发技能加速,这引出了最后一个技能。
5.软件工程
许多应用型机器学习允许你充分利用软件工程技巧,有时需要做些变换。这些技巧包括:
测试转换线路的不同方面(数据预处理和增强、输入和输出清除、模型推理时间)。
构建模块化的代码和可重复的实验加速方法。
在训练的不同阶段备份模型(检查点)。
建立一个分布式基础架构来运行训练、超参数搜索或者更有效地推理。