Deeplearning4j 是一个为 Java 和 Scala 编写的开源分布式神经网络库。它也是 Gitter 上最活跃的社区之一, Gitter 是我创建的聊天服务。 对他们如何建立一个蓬勃发展的开源社区感兴趣, 我联系了他们,想了解他们从中学到的经验教训。也许你会在我对 Adam Gibson 和 Chris Nicholson 这两位创始人的采访中找到一些对你的项目有用的技巧。 (Josh Patterson 也是创始人。)
请介绍一下您自己和 Deeplearning4j 社区。这一切是如何开始的?
我们于 2013 年底开始构建 Deeplearning4j。当时 Adam 已经参与机器学习大约四年了,深度人工神经网络看起来越来越有前景。 Deeplearning4j 中的第一个网络是受限 玻尔兹曼机,因为那是 Geoff Hinton 在 2006 年提出的网络,那是该领域的转折点。我当时在另一家初创公司工作,负责公关和招聘,之前曾担任记者,所以我负责文档编写(现在仍然如此)。
我们认为适当的沟通是使开源代码有价值的关键。
您使用哪些数字工具来帮助管理和发展您的社区?
代码位于 GitHub 上,对话位于 Gitter 上。现在 Gitter 频道上大约有 1,360 名开发人员,因此它可能是地球上最活跃的神经网络对话之一。我们的网站托管在 GitHub 上,因此内容也位于那里。
我们使用 Javadoc 生成大量自动文档(始终在进行中)。我们要求人们使用 Maven 作为他们的自动化构建工具。任何软件的最大问题之一是安装,而 Maven 帮助使安装更容易一些。您需要不断尝试清除障碍,以便人们可以只使用您的代码,而不用担心其他事情。
Deeplearning4j 在 Gitter 频道上的大多数讨论是关于什么的?
过去讨论的主要问题是关于安装。社区中的工程师教会了我们很多关于如何编写更清晰的说明以及如何使代码和体验更好的知识。如果我们没有得到那种反馈循环,Deeplearning4j 就不会是今天的样子。开源社区在质量控制方面非常出色。您越早解决问题,您从社区收到的关于该问题的需求就越少。这是快速行动的巨大动力。
现在主要问题是加载数据和神经网络调优。我们正在努力更好地沟通这方面,并改进框架,以便 ETL 和调优变得更容易。还有很多关于机器和深度学习的基本问题。许多软件工程师已经意识到深度学习和机器学习是非常强大的工具,所以他们正在努力掌握新思想。我们编写了大量入门材料,并将他们指向解释这些思想的各种网页。
您和您的社区有哪些共同目标?
社区围绕 Deeplearning4j 和我们的科学计算库 ND4J 展开,ND4J 为神经网络提供动力。因此,我们回答有关如何使用库的问题,并在过程中帮助人们更多地了解深度学习。不幸的是,这不是深度学习热线,因此有些问题我们往往不回答。但我们确实帮助 DL4J 社区的工程师构建应用程序并了解神经网络的工作原理。
共同目标是学习深度学习,并构建很酷的东西。在深度学习可以做什么方面,我们只看到了冰山一角。到目前为止,我们在图像识别、机器翻译、机器转录和时间序列预测方面看到了巨大的进步。通过许多指标,机器感知现在等于或超过人类感知,这将以难以想象的方式改变社会。这些变化尚未实施。因此,社区的次要目标是将这种狭隘形式的人工智能带入世界,使其能够发挥作用。
哪些因素促成了您社区的成功?
创建和维护社区需要大量的时间和精力。您必须随时待命,并且必须尝试理解其他人的想法。他们并不总是非常了解术语,无法提出精确的问题,因此您必须有耐心与他们一起弄清楚他们想要问什么,或者他们卡在哪里。我们并不总是像我们应该的那样有耐心。随时待命,付出努力,并为像这样的强大工具提供支持是建立社区的好方法。
当一个大型项目的创建者可以回答关于其工作原理的深奥问题时,这会产生很多信任,因为人们知道您具有权威性,并且如果某些东西真的坏了,它将会得到修复。社区和项目创建者之间存在紧密的反馈循环。
在管理社区时,您遇到的一些挑战是什么?
挑战之一是:我们关心哪些问题,以及人们需要自己回答哪些问题? 如果有人对 Java、像 IntelliJ 这样的 IDE 或像 Maven 这样的构建工具提出了非常基本的问题,那么大多数时候他们需要自己弄清楚。我们的 Gitter 频道不是讨论这些问题的合适场所,尽管我们在特殊情况下会提供帮助,因为有时您需要扩大堆空间才能使神经网络工作。
您还必须在构建社区和构建产品之间找到平衡。理想情况下,您会有一个大型团队,包括专职支持工程师和团队的其余成员致力于代码库。但大多数开源项目的团队都很小。只有少数人能够提供支持,而他们也是应该修复错误和添加功能的人。
您如何鼓励社区的承诺和贡献?
您在社区中创建一个聪明、友好的环境。您提醒他们您感谢贡献,并且您尽可能地向他们展示需要完成的工作。我们创建了顶层文件来表彰我们的贡献者,向人们展示如何贡献,并制定社区规则。我们还编写了 devguide,现在我们将所有问题标记为 bug、增强功能或文档,以便人们可以快速扫描 队列 并探索他们可以在哪里添加内容。
请介绍一下建立和确立社区所需的时间投入。持续维护社区需要多少?
Skymind 是一个分布式团队,在澳大利亚、欧洲和美国都有工程师,Deeplearning4j 社区成员几乎遍布每个时区。可能在每个工作日的 12-16 小时内,都有一位 Skymind 工程师在关注 Gitter 队列。这是一个非常认真的承诺,因为我们不到 10 个人。这不是他们的全职工作,但他们可能会在空闲时间运行单元测试并在 Gitter 上回答问题。
根据您的经验,您是否觉得开源社区在过去几年中发生了变化和发展?
开源正在赢得企业堆栈,因此它比过去重要得多。世界上最大的组织都在运行开源软件。Linux 赢得了操作系统,Hadoop 赢得了大数据存储,开源之所以获胜,是因为当您做对了,您会得到更好的代码。更多的关注意味着更长的正常运行时间。因此,开源软件社区的规模以及软件工程师对开源项目带来的关注质量多年来都在增加。
对于想要从头开始创建一个在线开源社区的人,您有什么建议?
首先,构建一些有趣的东西。一些您关心的东西。专注于构建一个可以工作的东西。然后,与人们分享它。他们将帮助您改进它,他们可能会帮助您思考下一步要构建什么。不要做太多的前期开发。尝试将其范围限定为可以在合理的时间内交付。比如说几周。开源之所以有价值,是因为它是一种对话,而对话会将您带到您无法预料的地方,从而使您和项目不断发展。此外,通过尽早开源,您正在增加您的曝光率,从而增加获得帮助的机会。我们有很棒的开发人员加入社区和 Skymind 团队。
您能否分享一个社区成员因参与您的频道而发生的成功案例?
对于大多数故事,您只需要在那里。但总的来说,许多数据科学家和 Java 工程师来了,他们只是为他们的公司构建了一些可以工作的东西。他们稍后会回来并说:“当我们使 DL4J 成为推荐系统的一部分时,我们看到广告覆盖率增加了 200%。”
另一个人用 DL4J 构建了一个应用程序,然后一位投资者看到了它,他筹集了资金。所以这一切都很酷。使用开源,您就像向海洋中扔一块石头,您并不总是听到它击中水面。您甚至看不到涟漪。因此,当人们回来并说“谢谢”并告诉我们它如何帮助他们时,这令人鼓舞。这让它更有意义。
评论已关闭。