最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

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

  • 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))。

公众号推荐:

跳进 AI 的奇妙世界,一起探索未来工作的新风貌!想要深入了解 AI 如何成为产业创新的新引擎?好奇哪些城市正成为 AI 人才的新磁场?《中国生成式 AI 开发者洞察 2024》由 InfoQ 研究中心精心打造,为你深度解锁生成式 AI 领域的最新开发者动态。无论你是资深研发者,还是对生成式 AI 充满好奇的新手,这份报告都是你不可错过的知识宝典。欢迎大家扫码关注「AI前线」公众号,回复「开发者洞察」领取。

2015-12-30 18:002418
用户头像

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

关注

评论

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

跟着卷卷龙一起学Camera--内存池浅析02

卷卷龙

ISP 9月月更

这些js手写题对我这个菜鸟来说写不出来

helloworld1024fd

JavaScript 前端

2022-09-24:以下go语言代码输出什么?A:1;B:3;C:13;D:7。 package main import ( “fmt“ “io/ioutil“ “net/

福大大架构师每日一题

golang 福大大 选择题

【编程基础】正则表达式基本使用及在Python中使用正则表达式匹配内容

迷彩

Python 正则表达式 9月月更

如何将 SAP 电商云 Spartacus UI 部署到 tomcat 上运行

Jerry Wang

angular SAP commerce Spartacus 9月月更

顺序、时钟与分布式系统

分布式 时钟

Dubbo 泛化调用引发的“血案”

Java-fenn

Java

Identity and Access Management

冯亮

DevOps security AWS Cloud

最近几周react面试遇到的题总结

beifeng1996

前端 React

后端打工人必知必会21个MySQL表设计的经验准则

程序员小毕

MySQL 数据库 程序员 程序人生 Java 面试

哪些vue面试题是经常会被问到的

bb_xiaxia1998

Vue 前端

面试官:这些js手写题你会吗

helloworld1024fd

JavaScript 前端

在家学习如何保持高度自律

大数据搬运工

学习方法

大数据调度平台Airflow(八):Airflow分布式集群搭建及测试

Lansonli

airflow 9月月更

数据库并发控制理论

数据库 postgresql 并发控制 database

SQL是什么?它能做什么?

乌龟哥哥

9月月更

从使用者,DBA,内核开发三个不同角度来分析SQL的性能问题

数据库 postgresql sql database

kubernetes“雪崩了”

Linux 云原生 #Kubernetes#

数据库路径选择理论与postgreSQL实现

数据库 postgresql 遗传算法

对领域驱动设计的理解与社交领域的实践

微服务 微服务架构 DDD

用了这个IntellijIDEA插件以后,我写代码快了10倍!

Java-fenn

Java

脑机接口照进现实:5位脑科学家带来的最新启示

脑极体

Javaweb核心之注解开发Servlet

楠羽

Servlet 笔记 9月月更

percolator的理解与开源实现分析

数据库 分布式 事务

OpenJDK 的原生 Wayland 支持正在取得进展

Java-fenn

Java

Java服务异常排查定位大图

慕枫技术笔记

后端 9月月更

工作笔记之 SELECT 语句在 SAP ABAP 中的用法总结(下)

宇宙之一粟

数据库 abap 查询语句 select 9月月更

RocketMQ&kafka消息队列性能优劣对比

程序员小毕

程序员 面试 RocketMQ 后端 消息队列

浮点, 让多少老司机折戟?

浮点数 计算机原理 计算机科学与技术

新书上市|听说你翻开数学书就眼睛疼?

图灵教育

数学 科普 教育

2022react高频面试题有哪些

beifeng1996

前端 React

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