作为一名软件工程师,我们应该活到老学到老,时刻与不断发展的框架、标准和范式保持同步。同时,还要能活学活用,在工作中使用最合适的工具,以提高工作效率。随着机器学习在越来越多的应用程序中寻得了一席之地,它成为了广大工程师迫切希望掌握的一门课题。
机器学习比一个新的框架更难掌握。要成为一名高效的实践者,你需要深入理解该领域相关的理论,广泛了解这个行业的现状,以及具备以非确定性的方式构建问题的能力。
你可以在网上找到很多教程来教你如何在一个精心挑选过的数据集上训练一个现成的模型,并使之达到不错的准确性。事实上,具备更多的相关技能是成为一个高效机器学习工程师的关键。
以下是我们与50多个顶尖机器学习团队的一些对话,他们来自海湾地区和纽约,这次来到Insight公司是为了探求人工智能从业者需要共同面对的问题,并希望能够加快自己融入应用人工智能领域的步伐 。
部署机器学习解决方案不仅仅是用数据对任意一个模型进行训练。你还需要了解:
换句话说,要对模型进行集成、部署和调试,除了要具备工程上的能力之外,你还需要了解统计的基本原理、线性代数和优化理论。
要针对某个问题构建一个定制化的机器学习解决方案,需要考虑的东西涵盖了从数据的获取、标记和预处理到模型的构建、更新和服务,以及这个过程中的所有一切。
最后,我们认为,为标准Web应用程序构建一套REST API是一个可以提前完成的任务。另一方面,机器学习模型不总是能保证收敛或者产生可用的输出。学习如何审视和交付有影响力的机器学习产品的最佳方法是了解其理论基础是如何与数据分类学相关联的。
要深入理解机器学习,必须要有扎实的统计学基础知识,这涉及到几个方面:
在训练神经网络的时候,实际上发生了什么?是什么使得某些任务可行,而其他任务不可行?要弄清楚这些问题,最好的方法不是深入研究理论知识,而是试着通过图形和示例来了解机器学习。
需要理解的概念范围包括:不同的**损失函数**的工作原理是什么、为什么**反向传播**是有用的、**计算图**是什么。而对于**如何建立一个功能模型**,以及**如何跟团队里的其他人员进行有效地交流**,这些都需要深入地理解。下面我给出了一些参考资料:
另一个基本技能是阅读、理解和实施论文的能力。这个一开始做起来可能会感觉比较困难,所以最好的方法就是阅读附带代码的论文(例如,研究GitXiv上的论文),并试着去理解它是如何实现的。
如果你去问任何一个数据科学家他们的主要工作是什么,他们会告诉你,90%的工作是数据处理。这与应用AI同样重要,因为模型的成功与否与数据的质量(和数量)强相关。数据工作包含多个方面,但可归纳为下面几类:
熟悉数据处理工作最好的方法是获取一个数据集并试着使用它。有很多在线数据集,以及很多提供API的社交媒体和新闻媒体网站。基于上面提到的几个步骤,我们可以这样进行学习:
调试机器学习算法(无法收敛,或者得到的结果不合理)与调试普通代码有着很大的区别。同时,要找出合适的架构和超参数则需要具备扎实的理论基础和完备的基础架构,以便对不同的配置进行彻底的测试。
由于目前机器学习领域发展迅猛,而调试模型的方法也在不断地发展。以下是从我们部署模型的讨论和经验中总结出来的“合理性检查”列表,这些条目也以某种方式反映了许多软件工程师熟悉的KISS原理。
你的开发能力越强,则这些步骤实现起来就越快,反之亦然。
许多的应用机器学习允许你充分发挥自己在软件工程方面的技能,虽然有时也会有一点小改变。这些技能包括:
有关一名优秀的机器学习工程师所需掌握的软件技能,请查看我们的专题文章“从学术界转行到应用AI”。
以上那些资源能帮你处理和解决实际的机器学习问题。但是,应用AI这个领域的变化非常快,因此,最好的学习方式是亲身实践,尝试构建一个端到端的方案来解决一个真正的问题。
行动项:
寻找一些灵感,然后深入研究!虽然你探索得到的模式和范例可能后来会被证明是错误的,但这对你也有好处,因为它能让你更深入地了解问题的复杂性。
人工智能是一个令人兴奋、不断发展的领域。机器学习工程师对于获取相关知识的需求非常强烈,但这很容易被相关的新闻所淹没。我们建议你只跟踪少量的信息来源和新闻信札,以便能够将公关和抽象研究与该领域的创新分离。这里有一些资料也许对你有所帮助:
文章原标题《Transitioning from Software Engineering to Artificial Intelligence》,作者:Emmanuel Ameisen,译者:夏天,审校:主题曲。
文章为简译,更为详细的你容,请查看:https://blog.insightdatascience.com/preparing-for-the-transition-to-applied-ai-d41e48403447?spm=5176.100239.blogcont180054.30.MJBuT4