东亚银行、岚图汽车带你解锁 AIGC 时代的数字化人才培养各赛道新模式! 了解详情
写点什么

手动编写机器学习算法的若干理由

  • 2015-12-30
  • 本文字数:1389 字

    阅读完需:约 5 分钟

随着开源思想的逐渐兴起,很多机器学习领域的算法都已经实现为开源的库、包或代码。如何在这些已有资源的基础上进行高效开发,是最近几年热议的话题。那么,是不是公司或个人就不需要再对这些算法进行手动实现了呢?近日,Quora 网站发起了对于以下问题的讨论:为什么有这么多API 还要手动编写机器学习算法呢?

首先,Quora 的工程副总裁 Xavier Amatriain 从公司的角度回答了该问题。Xavier 表示,作为一个公司,选择自己开发机器学习算法的原因可以归结为以下几点:

  1. 性能。很多公开的算法实现的效率并不高。如果项目对于该算法的执行效率有一定的要求,自己进行重新实现不失为一个好的选择。
  2. 正确性。很多开源的算法实现是存在功能缺陷的。它们很多只是针对简单的测试集进行了部分验证,并不能保证很多边界情况或者大规模测试的正确性。事实上,很多算法包 / 库并没有进行很好的单元测试和功能测试。因此,算法本身存在 bug 也不足为奇。公司也可以选择在此基础上进行完善,然后再反馈给社区。但是,在多数情况下,重新实现算法的代价更低一些。
  3. 编程语言。以 Libsvm 为例,它只存在 C++ 和 Java 的开源版本。如果希望用 Python 或其他语言实现,公司只能自行开发。
  4. 系统集成。更多情况下,算法只是整个系统的一部分。系统需要集成很多的库和资源。如果这些库或资源分别来自 scikit-learn、Tensorflow、Theano 以及 Ranklib 等不同的地方,系统集成势必要花费大量的时间和精力。相比而言,自己开发这些算法可能要高效很多。
  5. 版权。对于公司而言,即使采用开源算法,也可能存在版权问题。因此,自己开发要安全很多,可以有效避免版权纠纷。

接下来, Charles Gee 则站在个人的角度上,分析了手动实现机器学习算法的好处。

  • 作为一个初学者,自己实现算法有助于帮助理解算法的工作原理及其实现细节。直接使用现成的包的确有助于加速产品研发,但却阻碍了工程师对其内部的理解。
  • 作为一个研究人员,自己实现算法可以掌握和修改所有的细节。在研究过程中,工程师难免需要修改算法的一些内部实现细节,或者输入接口。现成的库或包未必能够满足这些需求。
  • 作为一名老师,自己实现算法有利于教学任务的深入浅出。老师可以将算法的具体运行过程呈现给学生,便于学生一步步慢慢理解。
  • 作为用户,自己实现算法可以方便调试或完善功能。

Simon Maby 表示,一般需要自己实现算法的情况包括:
特殊的性能需求、Q-learning 和定制化的代价与功能、特殊的应用领域等。此外, Chomba Bupe 将原因归结为创新、不同的项目目标、代码安全、兼容性以及深度理解五个方面。 Shehroz Khan 则主要从理解和掌控代码的角度出发,认为手动实现算法有助于进一步删减或扩展部分功能以及开发新的相关算法。最后,多年从事有限元分析(Finite Element Analysis,FEA) Debiprasad Ghosh 预测,机器学习社区未来会出现与 FEA 社区类似的分化:绝大部分成员要么为用户,要么为专家。用户主要了解商用软件和产品;而专家主要关心不同的开源代码和 FEA 的内部细节,用于进一步的研发。因此,机器学习领域也需要一批掌握算法细节的专家,来指导算法未来的发展。


感谢杜小芳对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群(已满),InfoQ 读者交流群(#2))。

公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2015-12-30 18:002416
用户头像

发布了 268 篇内容, 共 118.0 次阅读, 收获喜欢 24 次。

关注

评论

发布
暂无评论
发现更多内容

parallels desktop18新许可证和升级

茶色酒

parallels desktop18

泼辣修图2023永久版安装包下载

茶色酒

泼辣修图2023

Java学习路线阅读计划时间线

kcodez

后端开发 Java 开发

软件动力学:我理解的可演进架构

agnostic

可演进架构

支持30+,这款文档提取工具太好用了!

Jackpop

为什么放弃Vim而选择Neovim?

Jackpop

Go应用服务疑似内存泄露问题排查

SFLYQ

Go 容器 内存溢出

2023汉化和谐版camtasia电脑屏幕录制软件

茶色酒

Camtasia Studio2023

毕业项目 - 设计电商秒杀系统

in9

响应式操作实战

老周聊架构

响应式编程 2月月更

编程界的劣驱良现象有哪些? 圆桌收录 用代码构建世界

Jackpop

效率倍增!VS Code瞬间好用多了

Jackpop

软件测试/测试开发 | web前端的HTML浅析

测试人

软件测试 自动化测试 测试开发 web测试

JUC 常用 4 大并发工具类

鱼找水需要时间

Java spring JUC

C/C++ 操作注册表与服务

20K+ Star!一款开源免费B站视频下载工具

Jackpop

为什么字节跳动选择使用 Go 语言?

Jackpop

管理者既要安定内部,也要团结外部

石云升

极客时间 2月月更 技术领导力实战笔记

架构训练营模块六作业-拆分电商系统为微服务

张Dave

后GameFi时代下的新宠Umi'Friends,能否成为下一个Axie Infinity?

股市老人

寄存器和移位寄存器分析与建模

timerring

FPGA

这才是机器学习正确高效的学习路线!

Jackpop

软件测试/测试开发 | 测试环境搭建

测试人

软件测试 自动化测试 测试开发 测试环境

基于Magma构建灵活、低成本无线接入网

俞凡

架构 网络 通信

parallels desktop2023汉化版虚拟机下载

茶色酒

parallels desktop2023

第九期-毕业设计

wuli洋

Nginx unexpected end of file 配置证书遇到问题,如何解决?

程序员泥瓦匠

nginx

从技术专家到总经理,在不确定中探索和成长

石云升

极客时间 2月月更 技术领导力实战笔记

Nostr 协议详解(科普篇)

Rayjun

分布式 nostr

设计模式之模板模式

程序员大彬

设计模式

开源免费!一款性能和体验超棒的编程IDE

Jackpop

手动编写机器学习算法的若干理由_语言 & 开发_张天雷_InfoQ精选文章