说出来你可能不信,有一种从软件开发领域诞生的思维方式,自诞生以来就一直深远地影响着我们日常的工作和生活。这就是“敏捷方法”,即软件开发领域的“敏捷软件开发”(Agile Software Development)。
2001年初,十几位来自美国各个软件开发的细分领域的代表们共同签署了一份名为《敏捷软件开发宣言》(Manifesto for Agile Software Development)的文件,标志着这一全新的软件开发方式的诞生(或者也可以称其为一种思维方式)。
敏捷开发包含的内容十分丰富,总体上要求客户参与到整个的开发中,开发者需要根据客户的需求灵活变更代码,采用迭代、循序渐进的方法持续集成,提供持续可用的版本。事实证明,随着软件规模和复杂度的升高,在现实生活中成功应用于工厂生产的那一套瀑布式流程并不适合于软件开发。而敏捷开发正是为了解决瀑布式开发带来的诸多问题而提出的。
事实上,敏捷开发自提出以来就一直在进行演变,而且目前正向着自动化的方向演变。随着这种自动化的引入,所谓“持续集成”和“持续开发”的概念将得以真正做到“持续不间断”。换句话说,当人们清楚地认识到究竟哪些环节适合于自动化实现,并成功地将自动化过程应用于强化人类的日常工作,敏捷方法才能发挥其最大的优势。
就好像对于初创公司来说,敏捷方法几乎已经成为了他们的必修课。正是基于敏捷方法的核心理念,越来越多的创业公司开始尝试在一次又一次的商业计划迭代中,过滤那些潜在客户最感兴趣的反馈,然后基于这些反馈灵活调整公司的发展方向,从而获得商业的成功。也就是说,针对那些缺少发展规划的初创公司来说,这种“精益求精”的取巧过程显然是更明智的做法。
如果说敏捷方法已经遍及所有的开发过程,那么将深度学习应用于现实场景的关键就变成了:了解它在敏捷开发环境中具体的适用位置。也就是说,要把深度学习应用在一个具体流程中,开发者应该清楚地认识到原本的人工流程具体是怎样的,然后寻找其中可以进行自动化的部分进行强化,而不是简单粗暴地追求所谓取代人类。在反复的迭代中,当所有的流程都被自动化之后,完全取代人类才具有实际意义。
例如,深度学习作为与人类沟通的媒介就得到了很好的应用,目前已经成功应用在语音识别和手势理解。在这种情况下,深度学习本质上成为了一种全新的用户界面(UI),一个允许用户灵活调度当前任务的UI环境。这就是一个典型的例子,将深度学习应用在一个具体的环节,而不是完全取代人类。
然而,目前许多企业还停留在将深度学习(甚至机器学习和人工智能)简单地看成一种预测工具的阶段,他们认为深度学习只是一种数据科学家们用来辅助研究的工具。但事实上,深度学习的现实应用场景要宽泛得多。雷锋网雷锋网
目前,基于持续集成的敏捷方法,大体可以将深度学习的能力分为以下两种类型:辅助型和生产型。前者将自动化应用在了某些特定的环节,而后者近乎取代了人类。
其中辅助型的能力目前可以说已经非常普遍了。例如输入法的自动更正和建议输入,有些相机具有的智能背景虚化功能,以及软件开发环境中对代码的自动更正、错误检查、代码质量评估甚至漏洞检测等。
可以看到,这种辅助型能力可以实时得到结果或者在后台运行。在这种类型的应用里,深度学习可以帮助我们执行重复的和耗时的任务,例如对照片进行排序和分类等。在某些特定领域,这种信息的组织和分析能力非常重要。通常可以将海量信息分解成易于分析的小体量信息块来强化训练这一能力。
相对于辅助型能力,生产型是一种更全面的自动化,并且正在变得越来越普及。近期,传播非常广泛的Prisma就是一个例子(如下图所示,Prisma软件能够将照片重新渲染为不同艺术家的风格)。
这就是生产型能力的典型示例。就像“头脑风暴”那样,我们可以利用深度学习的这种能力遍历一个设计空间的所有可能性。例如应用在规划和执行领域时,就可以依靠这种能力遍历所有的可选项,然后向用户提供一个详细的选择列表。目前,针对这一能力的应用具有非常广阔的探索空间。例如此前报道的利用深度学习来进行工业设计,或者利用深度学习来设计游戏,就是几种未来可能的发展方向。
来源:medium