算法实现太难了?机器学习也需要开源软件
作者 | Soren Sonnenburg等
译者 | 刘畅
出品 | AI科技大本营(ID:rgznai100)
导读:开源工具已经趋于成熟,这使其能构建大规模的自然场景下的系统。与此同时,机器学习领域为各种应用开发了大量强大的学习算法。但是,由于没有公开共享现有的实现方式,去真正的利用这些方法,从而导致软件的可用性和互操性较弱。
本文作者认为,可以通过提高研究人员在源代码模型下发布软件的动机来明显改善这种情况。此外,本文概述了作者在尝试发布机器学习算法的实现时所面临的问题。作者认为,经过同行评审的软件资源以及简短的文档对机器学习和整个科学界非常有价值。
概述
机器学习领域发展迅速,为不同的应用提供了各种各样的学习算法。这些算法的最终价值在很大程度上取决于它们在解决实际问题中的成功。因此,将算法进行复制并应用于新任务对于该领域的进步至关重要。
但是,目前很少有机器学习研究人员发布与其论文相关的软件和/或源代码。这与生物信息学界的做法形成了鲜明对比,后者的开源软件已经成为进一步研究的基础。缺少公开可用的算法实现是我们这一学科进步的主要障碍。
我们相信,机器学习软件的开源共享可以在消除障碍方面发挥非常重要的作用。
开源模型具有许多优势,这些优势将带来更好的实验结果重现性:更快地检测错误,创新性应用以及在其他学科和行业中更快地采用机器学习方法。但是,目前缺乏完善和发布软件的动机。已发布的软件本身在我们领域中没有标准的,可接受的引用方式。
目前引用它的唯一方法是引用与代码相关联的论文,或者通过引用以某种技术报告的形式发布的用户手册。为了解决这一难题,本文提出了一种正式发布机器学习软件的方法,类似于ACM Transactions on Mathematical Software提供的用于数值分析的方法。
注:本文作者随后简要解释了开源软件背后的思想,然后介绍了广泛采用开源的模型将产生的一些积极影响。接下来,本文讨论了当前主要的阻碍,并提出可能的改变以改善这种情况。最后,作者为JMLR(JMLR-MLOSS)中的机器学习开源软件提出了一个新的、单独的track。
开源背后的思想
开源软件的基本思想非常简单;程序员或用户可以阅读,修改和重新分发软件的源代码。尽管有各种开源软件许可,但它们都有一个共同的出发点,那就是允许自由交换和使用信息。开源模型更注重贡献者的协作。每个贡献者都可以利用网络中其他人所做的工作,从而最大程度地减少“重新造轮子”所花费的时间。
开源的软件主要有下面的10个属性:
1.免费重新使用
2.源代码
3.衍生作品
4.作者源代码的完整性
5.不歧视个人或群体
6.不歧视工作领域
7.许可证的分配
8.许可不得用于特定产品
9.许可不得限制其他软件
10.许可必须是技术中立的
开源的积极影响
这一部分主要是简要概述开源软件及其与科学活动(特别是机器学习)的关系。读者可能会认为我们对开源的好处过于乐观,而没有讨论负面影响。事实是,要获得专有系统与开源软件之间抄袭的确凿证据是极其困难的。
本文从道德,伦理和社会基础三个方面进行阐释,开源应该是机器学习研究的首选软件发布选项,并向读者介绍开源软件的许多优点。在这里,本文将重点放在用于机器学习研究的开源软件的特定优势上,该优势结合了科学进步以及软件生产者和消费者的需求和要求。作者从以下7点说明了开源的优势:
1.科学结果的可重复性和算法的合理比较;
2.发现问题;
3.利用已有资源(而不是重新实现);
4.不断获得科学的工具;
5.优势结合;
6.在不同学科和行业中更快地适用某方法;
7.出现协同标准。
最后,作者使用一个表格总结了开源会带来的优点,一共有11条,分别如下:
1.提高了科学研究的可复现性
2.有助于公平比较在相同框架中实施的算法
3.可以更快地发现问题
4.可以修复bug和扩展外部来源的错误
5.方法可以被其他人更快地采用
6.可以使用高效的算法
7.能利用现有资源来帮助新研究
8.广泛的使用算法会使其得到广泛的认可
9.可以开发更复杂的机器学习算法
10.可以加速研究进展
11.对新研究者和较小的研究小组非常有帮助
开源社区当前主要的障碍
尽管根据开源模型发布实现方式具有许多优点,但是当前很少采用此选项。作者认为,有六个主要的原因,总结起来概括如下:
1、发布软件不能够被视为一种科学贡献
2、公开与商业利益存在根源上的冲突
3、发布开源软件的激励措施没有足够高
4、机器学习研究人员不是一个优秀的程序员
5、这种松懈能掩盖新方法的问题,并降低会议和期刊的接收难度
6、存在一种习惯,对质量相似的论文采用相同的处理方法
建议
作者给出了提交高质量机器学习开源软件实现的描述。提交的内容至少应包括:
1、一封书面信,说明该提交内容适用于机器学习开源软件部分,发布该软件的开源许可证,项目的网址以及要查看的软件版本。
2、最多四页基于JMLR格式的描述。
3、包含源代码和文档的zip或tar压缩的归档文件。
结论
综上,作者认为,采用共享信息的开源模型来实现机器学习软件对整个领域都非常有帮助。开源模型具有许多优势,例如提高了实验结果的可重复性,更快地检测错误,加速科学进步以及在其他学科和行业中更快地采用了机器学习方法。由于当前发布开源软件的动机不足,本文概述了一个发布用于机器学习的软件平台。
此外,本文讨论了机器学习软件的理想功能,这些功能最终将产生一个高度可用,灵活和可扩展的软件。本文邀请所有开发机器学习算法的机器学习研究人员提交机器学习软件的JMLR track。定义精心设计的界面对于提高交互操作至关重要,这将使社区能构建一套高质量的机器学习软件。
推荐阅读
华为麒麟将成“绝版”,造芯为什么这么难?
用Bi-GRU语义解析,实现中文人物关系分析
图解Transformer,读完这篇就够了
马小峰:金融科技界的区块链博士
2019年中国IaaS公有云市场排名及份额出炉
相关文章:

数据库备份定期删除程序的开发。
第一.最近客户的服务器数据库备份每天都在进行,随着数据量的不断的增加,备份也在不断的进行变大。 第二.于是一些问题就出现了客户的服务器的磁盘的空间有限,定期数据库备份文件太大而导致无法进行保存问题。 第三.从而导致了服务器宕机以及服…

Repeater控件的分页问题
作者:zhoubinmail.sdu.edu.cn以前做ASP的时间不算短,可是做ASP.NET我是个新手。前几天做项目,遇到一个问题,要求比较复杂的数据格式显示,用DataGrid非常难实现,后来改用了Repeater控件来实现。不过这样就带…
华为昇腾AI全栈知识深入解读,师资培训沙龙深圳场圆满落幕!
头图 | 视觉中国极度缺乏AI人才,已成为中国人工智能产业发展道路上的瓶颈。在国家政策的支持下,众高校初建AI专业者甚多,但高校教师应掌握哪些知识储备来传道授业,大家都是“摸着石头过河”。将高校AI人才培养教学大纲与厂商成熟落…

[转载] 信息系统项目管理师考试论文写作要点
来源:信管网 网址:http://www.cnitpm.com/pm/4323.html (1)在论文写作之前,先不要急着动笔,认真把题看清楚,选择自己熟悉的论文(考试时,一般是二选一)&#x…

POM.xml 标签详解
pom作为项目对象模型。通过xml表示maven项目,使用pom.xml来实现。主要描述了项目:包括配置文件;开发者需要遵循的规则,缺陷管理系统,组织和licenses,项目的url,项目的依赖性,以及其他…

DataRow的序列化问题
来源:CSDN 作者:kroll 在.net里,DataRow类型的对象是不支持序列化的,那么如果在一个需要序列化的对象中含有DataRow类型的字段该怎么办呢?呵呵,幸好Datatable是支持序列化的。因此,我们可以自定…

mass Framework event模块 v4
event.js // // 事件模块(包括伪事件对象,事件绑定与事件代理) // $.define("event",document.dispatchEvent ? "node" : "node,event_fix",function(){// $.log("已加载target模块")var rhoverH…
美国 AI 博士:什么都不会怎么学 Python?
我见过市面上很多的 Python 讲解教程和书籍,他们大都这样讲 Python 的:先从 Python 的发展历史开始,介绍 Python 的基本语法规则,Python 的 list, dict, tuple 等数据结构,然后再介绍字符串处理和正则表达式࿰…

puppet 初识
【puppet初识】学习目录 领导说saltstack太慢 机器量一旦上来,saltstack就力不从心,所以要将saltstack转向puppet。【安装背景】系统centos 6.5软件地址:http://downloads.puppetlabs.com/puppet/master: 192.168.100.10agent: 192.168.100.13因为puppe…

ColorMatrix 彩色矩阵
选择自 hbzxf 的 Blog 首先对装配脑袋给出上两片文章的友好回复,还有网友Fisherman一起探讨ColorMatrix话题表示感谢!ColorMatrix (彩色矩阵) 类位于System.Drawing.Imaging命名空间 先看看下面的代码 ColorMatrix cm newColorMatrix(newfloat[][]{ n…
一个参数一张Excel表,玩转Pandas的read_excel()表格读取
作者 | 黄伟呢来源 | 数据分析与统计学之美我觉得很有必要讲述这个文章,进行数据处理的第一步就是Python数据读取。但是你可能没想到,在进行数据读取的同时,我们其实可以配合相关参数做很多事儿,这对于后续的数据处理都是极其有帮…

Android 设计模式:(三)装饰者模式 —— 装饰对象
*利用组合(composition)和委托(delegation)可以在运行时实现继承行为的效果,动态地给对象加上新的行为。*利用继承扩展子类的行为,是在编译时静态决定的;利用组合的做法,可以在运行时…

润乾报表永久授权说明
永久授权是什么? 永久授权是运行润乾报表的带有机器特征码的没有时间限制的正式授权文件 2 机器特征码是什么? 机器特征码是为了制作永久授权,由润乾公司提供程序从用户的服务器上获取硬件和操作系统信息,生成的一个数字串&#x…
维度爆炸?Python实现数据压缩如此简单
作者 | 萝卜来源 | 早起Python(ID: zaoqi-python)用Python基于主成分分析常见的三个应用场景中,其中有一个是「数据描述」,以描述产品情况为例,比如著名的波士顿矩阵,子公司业务发展状况,区域投…

深入剖析C#的多态
作者: 天雨一、什么是多态 面向对象程序设计中的另外一个重要概念是多态性。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。可以把一组对象放到一个数组中,然后调用它们的方法,在这种场合下,多态性作用…

/usr/local/lib/libz.a: could not read symbols: Bad value(64 位 Linux)
/usr/bin/ld: /usr/local/lib/libz.a(crc32.o): relocation R_X86_64_32 against a local symbol can not be used when making a shared object; recompile with -fPIC /usr/local/lib/libz.a: could not read symbols: Bad value 一般是64 位 电脑才会出现。 解决方法如下&am…

关于BIO | NIO | AIO的讨论
关于BIO | NIO | AIO的讨论一直存在,有时候也很容易让人混淆,就我的理解,给出一个解释: BIO | NIO | AIO,本身的描述都是在Java语言的基础上的。而描述IO,我们需要从两个层面: 编程语言实现原理…

NYOJ-49 开心的小明
开心的小明 时间限制:1000 ms | 内存限制:65535 KB难度:4描述小明今天很开心,家里购置的新房就要领钥匙了,新房里有一间他自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间…

两个硬盘和文件相关的小技巧 (C#)
取系统的硬盘分区的盘符,用API函数:GetDriveType [DllImport("kernel32.dll", EntryPoint"GetDriveType")] public static extern int GetDriveType (string nDrive); 调用:string [] dirs Environment.GetLogicalDri…
从数百个Excel中查找数据,一分钟用Python搞定
作者 | 陈熹来源 | 早起Python今天分享一个真实的办公自动化需求,大家一定要仔细阅读需求说明,在理解需求之后即可体会Python的强大。需求说明首先我们来看下今天的需求,有一份档案记录总表的Excel工作簿, 每天会根据当天日期建立…

namenode如何存储复本?
2019独角兽企业重金招聘Python工程师标准>>> namenode如何选择在哪个datanode存储复本?这里需要对可靠性,写入带宽和读取带宽进行权衡。例如,把所有复本都存储在一个节点损失的写入带宽最小,因为复制管线都是在同一节点…

EBS-使用 fnd_user_pkg API 创建用户,添加职责,修改用户
比如有一个外围支持系统,用户需要在外围系统登录之后点个link就可以登录到Oracle ERP系统中,那么我们需要先把外围系统的用户创建在Oracle ERP中,并且分配职责给他。 DECLARE a BOOLEAN; BEGIN---------------------------------------------…
万字长文总结机器学习的模型评估与调参 | 附代码下载
作者 | Sebastian Raschka翻译&整理 | Sam来源 | SAMshare目录一、认识管道流1.1 数据导入1.2 使用管道创建工作流二、K折交叉验证2.1 K折交叉验证原理2.2 K折交叉验证实现三、曲线调参3.1 模型准确度3.2 绘制学习曲线得到样本数与准确率的关系3.3 绘制验证曲线得到超参和准…

[百万级]通用存储过程.分页存储过程
/* 名称:spAll_ReturnRows 输入: 输出: 调用: EXEC spAll_ReturnRows SELECT * FROM 表名, 页号, 返回记录数, 主键, 排序字段 spAll_ReturnRows SELECT * FROM all_Categories,2,10,[ID],[ID] 说明:[百万级]通用存储过程.分页存储过程..返回指定返回条数、指定页数的记录 …

Unsupported major.minor version (jdk版本错误)解决方案
2019独角兽企业重金招聘Python工程师标准>>> 如果你遇到了 Unsupported major.minor version ,请认真看一下,说不定会有帮助。 我花两个小时总结的经验,你可能10分钟就得到了。 ^**^ 一、错误现象: 当改变了jdk版本时…

The key of C# 学习笔记I-II
作者 :Kemins booootLog http://blog.csdn.net/keminlau/ Sunday, October 3, 2004 微软提出的CLS(Common Language Specification, 通用语言标准)对能被用来编写dotNET程序的语言的最小功能集做出了规定。 就拿C#来说,它是目前程序设计语言“以效率换安…

分布式平台下的HS(High-Security) --Apache Shiro API(介绍)
在尝试保护你的应用时,你是否有过挫败感?是否觉得现有的Java安全解决方案难以使用,只会让你更糊涂?本文介绍的Apache Shiro,是一个不同寻常的Java安全框架,为保护应用提供了简单而强大的方法。本文还解释了Apache Shiro的项目目…
豪赌 ARM 梦碎:63 岁孙正义的「花甲历险记」
来源 | HyperAI超神经这几天,传出 NVIDIA 将以 400 亿 英镑的价格收购 ARM 的消息,不少媒体在争相报道收购进度的同时,也将整起交易的幕后推手 —— 孙正义,放到了聚光灯下。软银 CEO,传奇投资人,冒险家&am…

Java 集合 — HashMap
HashMap 无序(每次resize的时候都会变)非线程安全key和value都看可以为null使用数组和链表实现查找元素的时候速度快几个重要属性: loadFactor:用来计算thresholdthreshold:决定map是否需要扩容,threshold …
赠书 | 人工智能识万物:卷积神经网络的前世今生
来源 |《Python人工智能开发从入门到精通》作者 | 杨柳、郭坦、鲁银芝责编 | 晋兆雨深度学习在技术与应用上的突破引发了第三次人工智能浪潮,获得了空前成功。在前述章节的基础上,本章将主要介绍训练卷积神经网络和深度神经网络的重要方法与技巧…