程序员应该投身机器学习领域,因为他们具备独一无二的技能,能够做出巨大的贡献。
在本文中,您将了解到作为一名程序员,很容易忽视自己拥有的技能,并过分看重自己不知道的东西。您将了解到,程序员几乎可以立即在机器学习领域产生影响的四个机会。
专业开发实践
专业软件开发(如果您喜欢这个术语,也可以称之为软件工程)的宗旨是设计、实现和维护可靠的软件系统以解决问题。您作为开发者的技能非常有价值,可以将其应用于机器学习领域。
这里有一些例子
- 结构:在开发软件时,您会构建项目的结构。例如,有一个用于源代码的目录,一个用于资产,一个用于文档,如果您使用的是编译型语言,还有一个用于二进制文件的目录。为软件开发项目使用明确定义的结构是一种最佳实践,它引入了分离和一致性,从而支持协作。项目中的任何人都会知道在哪里为项目做出贡献,当跨项目采用相同的约定后,组织中的任何人都可以快速导航项目。
- 自动化:在软件项目中,您会使用构建系统来自动化项目的常见任务。无论您使用的是 Make、Ant、Rake 还是任何类似的构建系统,将常见的开发任务作为目标,以便可以随时重复执行,并组织成递增杠杆作用的层次结构,这都是很自然的。
- 可重复性:您应用于项目的基于约定的结构以及通过构建系统实现的自动化,使得给定项目中的任务可以 100% 可重复。任何人都可以检出项目并构建它。任何人都可以遵循发布流程构建二进制文件或部署更新到网站。在开发软件系统时,可重复性是默认存在的。
- 可测试性:一个类只有一个职责,一个函数只做一个功能。简化系统可以创建小型模块化代码,这些代码可以进行测试。您编写自动化测试来衡量质量控制,以明确无误地证明代码能够按预期工作,并检测您在进行更改时引入的任何回归。
- 可维护性:上述行为导致了专业软件开发最重要的因素之一,即可维护性。一个成功完成的软件项目的大部分生命周期将用于维护。开发只是软件整体生命周期的一小部分,维护才是常态。我们通过使软件结构化、自动化、可重复和可测试来使其可维护。

照片鸣谢 xJason.Rogersx,部分权利保留
这些专业软件开发的实践可以被引入机器学习领域。它们可以在机器学习项目的早期阶段产生最大的影响。三个例子包括:
- 当数据从原始源提取并转化为适合给定学习方法的格式时。此过程可以实现自动化和可重复,并将派生数据存储在与原始源分开的目录结构中。
- 当测试不同的机器学习方法以确定哪种方法最适合该问题时。方法的测试可以自动化,从而使结果可重复,并且可以在测试协议中发现(或假设有)错误时重复执行。
- 当选择并实现一种方法来解决复杂问题时。它可以被设计成针对问题进行定制,并实现为可测试和文档齐全,以确保它满足项目更广泛的要求,包括性能和算法准确性的验收标准等非功能性要求。
生产级实现
一种新颖的机器学习方法通常由一名机器学习研究员或一个研究团队提出。研究人员通常会提供该算法的prototype或演示实现。
问题在于,代码是由可能受过软件开发学科训练也可能未受过训练的研究人员编写的。尽管如此,实现的目标是展示该方法的一个工作 prototype。
如果企业或其他组织希望利用这些强大的工具之一,他们的选择是有限的。他们可能会决定在生产系统中改编和运行 prototype 代码。研究代码通常在没有明确许可的情况下发布,有时会使用宽松的开源许可证。代码将针对示例问题编写,以用于演示目的,系统的编程质量可能参差不齐,尽管在某些情况下可能仅足以展示概念验证。
唯一的实际选择是使用良好的软件工程实践重新实现该方法。开发人员有机会实现市场上需求旺盛的强大机器学习方法的生产级实现。除了获得相关工作外,您还可以开发组织可以用来解决他们问题的生产质量软件工具、库和 API。
推广出去
机器学习方法以研究的语言呈现,例如枯燥的研究论文、学术演示、专著、讲座和教科书。有一些强大的工具有效地隐藏在主流软件开发甚至主流应用机器学习之外。这是一个事实。有用方法从研究迁移到实际应用可能需要几十年。
对于了解一些机器学习知识的程序员来说,这是一个机会,可以了解哪些方法是有效的,并帮助推广出去。您只需要学到足以识别这些“瑰宝”的程度,并且有想象力去思考这些方法可以在商业或在线领域如何应用,并具备沟通甚至实现这些想法的能力。您甚至不需要成为开发人员才能承担这项工作。
将机器学习应用到应用程序中
作为一名程序员,您已经知道如何为用户创建应用程序。它们可以是 Web、移动或桌面应用程序,甚至是更特殊的应用程序。也许像您这样的程序员最大的机会是将机器学习方法应用到您正在开发的应用程序中。
这不像您最初认为的那么宏大和令人畏惧。请记住,机器学习方法解决的是特定的决策问题。融合机器学习意味着识别应用程序中可以通过机器学习适当地解决的复杂问题,或者更可能围绕一个合适的问题构建应用程序。它还意味着您需要学习足够的机器学习知识才能实现这一点,但您已经开始了这段旅程。
在本文中,您了解到程序员应该进入机器学习领域,因为程序员具备独一无二的技能,能够做出巨大的贡献。程序员可以为机器学习领域做出四项贡献:
- 为机器学习项目带来专业的软件开发实践。
- 构建机器学习方法的生产级实现。
- 推广新颖的机器学习方法
- 将机器学习方法应用到应用程序中。
您认为哪些软件开发实践在尝试和测试机器学习算法时会产生重大影响?请留言。
机器学习算法需要更高的设备资源。对于智能手机,我认为将规则从学习过程中提取出来并插入应用程序中,比插入整个分类器代码更有用。
软件开发人员开发软件来解决问题。对于固定问题,我们可以用固定公式解决;但对于存在许多不确定性的问题,固定公式无法处理。机器学习可以解决这个问题。
说得好,Sofwan。
是的,机器学习问题没有一个“正确答案”,只有大量需要发现的可行解决方案。
非常好的文章,是的,在机器学习中并非总有唯一的明确解决方案,每次运行您都会得到不同的答案!
确实如此。
我认为,从软件开发背景出发使用机器学习的最佳方式是将其作为应用程序的模块或组件。Netflix 就是一个很好的例子。许多东西构成了应用程序,但推荐系统是使其成为优秀软件产品的模块之一。
另外,我认为了解何时使用机器学习很重要。作为程序员,我们往往对新技术充满热情,并渴望尽快将其应用到任何地方。有些问题乍一看似乎非常适合机器学习,但实际上,简单的启发式方法就足够了。
在您的工作中(除了这个博客之外),您会在哪里或在哪里应用机器学习?我很想知道!🙂
非常好的观点!
我曾在 SaaS 客户数据分析中使用过 ML,并且更普遍地用于为气象学家开发的飓风预测系统。
好文章,我同意。机器学习确实需要熟练的程序员来实施算法等等。
谢谢。
好文章。我自己已经用 Java 编程了 20 年,主要从事业务应用程序开发。最近,我一直在考虑将机器学习集成到我们的会计信息系统解决方案中,但我仍然不清楚在什么程度上以及在哪个部分。
谢谢。
也许这个框架可以帮助您思考如何将您系统中的问题构建为监督学习。
https://machinelearning.org.cn/how-to-define-your-machine-learning-problem/
我认为机器学习旨在解决特定、非常具体的问题,而不是将其泛化为所有解决方案。我认为将其纳入我的业务和编程方法将非常有益。
这个框架可能会有帮助
https://machinelearning.org.cn/how-to-define-your-machine-learning-problem/
机器学习是现在和未来的热门话题。为了推动技术进步,每个人都在这个平台上努力。感谢分享这篇关于 ML 的信息性帖子。
谢谢。