告别Python,用神经网络编写的软件走向2.0时代

有时人们把神经网络称为“机器学习工具箱中的另一种工具”。有时你可以用它们来赢得Kaggle的比赛。但是,这种解释完全见木不见林。神经网络不只是另一种分类器,它们代表了我们如何编写软件的根本性转变的开始。可以说是软件的2.0时代。下文简称软件2.0。

我们所熟悉的软件1.0的“经典堆栈”是用Python、C++等语言编写的,它包含了程序员编写的计算机的显式指令。通过编写每行代码,程序员可以通过一些可取的行为来确定程序空间中的某个特定点。

相比之下,软件2.0是用神经网络的权重来编写的。没有人参与编写这段代码,因为有很多权重(典型的网络可能有数百万个),并且直接在权重中进行编码是很困难的。反而,我们指定了一些约束程序的行为(例如,一个输入输出对示例的数据集),并使用可自行支配的计算资源来搜索满足约束条件的程序空间。在神经网络的例子中,我们把搜索限制在程序空间的一个连续的子集上,在这个空间中,搜索过程有些出乎意料地可以使用反向传播和随机梯度下降算法。

事实证明,在现实世界中,收集数据要比明确地编写程序容易得多。过段时间以后,大部分程序员不会维护复杂的软件库,编写复杂的程序,或者分析它们的运行时间。但他们会收集、整理、操作、标签、分析和可视化馈送神经网络的数据。

软件2.0不会取代1.0(实际上,需要大量的1.0基础架构来进行“编译”2.0代码的训练和推测),但是它将会接管越来越多的软件1.0的责任。让我们来看看一些正在进行的过渡的例子,以使其更加具体:

视觉识别曾经是由一些带有机器学习的工程特性组成的(例如,SVM)。从那时起,我们开发了机器,以发现更强大的图像分析程序(在卷积架构中),并且最近我们也已经开始搜索架构。

语音识别曾经涉及大量的预处理、高斯混合模型和隐藏的马尔可夫模型,但目前几乎完全由神经网络组成。

语音合成一直以来都有各种各样的拼接(stitching)机制,但是现在,艺术模型的状态是产生原始音频信号输出的大的卷积(例如WaveNet)。

  • WaveNet地址:https://deepmind.com/blog/wavenet-launches-google-assistant/

机器翻译通常是采用基于短语的统计技术的方法,但神经网络很快就会占据主导地位。我最喜欢的架构是在多语言环境中进行训练的,其中一个模型可以从任何源语言转换为任何目标语言,并且在弱监督(或完全不受监督的)环境中进行。

机器人技术将问题分解为感知、姿态估计、规划、控制、不确定性建模等,使用显式表示和算法多于中间表示。我们还没有完全做到这一点,但加州大学伯克利分校和谷歌的研究表明,软件2.0或许能够更好地代表所有这些代码。

软件2.0的好处

为什么我们更喜欢将复杂的程序移植到软件2.0中呢? 很明显,答案是因为它们在实践操作中表现得更好。但是,还有很多其他的方便的理由来选择这个堆栈。让我们来看看软件2.0(一个卷积神经网络)与软件1.0相比(一个生产级别的C++代码基数)的一些好处。软件2.0:

计算均匀:一个典型的神经网络,首先,由两个操作组成:矩阵乘法和在零点(ReLU函数)的阈值。将其与经典软件的指令集进行比较,后者明显更具有异构性和复杂性。因为你只需为少量的核心计算原语(例如,矩阵乘法)提供软件1.0实现,就可以更容易地做出各种正确的/性能的保证。

简单设置为硅 作为一个推论,由于神经网络的指令集相对较小,因此更容易实现将这些网络更靠近硅,例如自定义ASIC芯片,神经形态芯片等等。当低动力的智能变得无处不在时,情况又会发生变化。例如,小而便宜的芯片可以使用预先训练过的卷积神经网络、语音识别器和WaveNet语音合成网络,它们都集成在一个小的、可以连接到任何东西上的“原始大脑”中。

恒定的运行时间 典型的神经网络正向传递的每一次迭代都采用同样数量的FLOPS(即“每秒浮点运算次数”,“每秒峰值速度”)。零可变性基于你的代码的不同的执行路径,是可以通过一些庞大的C++代码库来实现的。当然,你可以拥有动态计算图,但是执行流通常仍然受到很大的限制。这样,我们几乎可以保证永远不会发现自己的操作在无意地进行无限循环。

持续的内存使用 与上面相关的是,在任何地方都没有动态分配的内存,因此也不大可能交换到磁盘,或是你必须在你的代码中追踪的内存泄漏。

它具有高度的可移植性 与经典的二进制文件或脚本相比,在任意计算配置上运行一个矩阵乘法序列要容易得多。

它非常敏捷 如果你有一个C++代码,并且有人想让你把它以两倍的速度为代价获得(如果需要的话),这将是非常重要的调优系统新规范。然而,在软件2.0中我们可以把我们的网络删除一半的通道,然后再次训练,——它完全是运行速度的两倍,并且运行的有些糟糕。相反地,如果你恰好得到了更多的数据/计算,你可以通过增加更多的通道和重新训练来让你的程序更好地工作。

模块可以融合为一个最优的整体 我们的软件经常被分解为通过公共函数,API或端点进行通信的模块。然而,如果两个最初训练的软件2.0模块相互作用,我们可以很容易地在整个过程中进行反向传播。想想看,如果你的web浏览器能够自动重新设计底层系统指令10个堆栈,直到加载web页面时获得更高的效率,那该多好。而对于2.0,这是默认的行为。

软件2.0的局限性

2.0堆栈也有一些自身的缺点。在优化的最后,我们剩下的是大型网络,它们运行得很好,但是我们很难知道它是如何运作的。在许多应用领域,我们将会选择使用我们所理解的90%的精确模型,或者99%的准确模型。

2.0堆栈可以以不直观和令人尴尬的方式失败,例如,通过在训练数据中默默地采用偏差,当它们的大小在数百万的大多数情况下,是很难正确地分析和检查的。

最后,我们还发现了这个堆栈的一些特殊属性。例如,对抗样本的存在突出了这个堆栈的不直观的本质。

  • 对抗样本:https://blog.openai.com/adversarial-example-research/

如果你把神经网络看作是一个软件堆栈,而不仅仅是一个很好的分类器,那么很快就会发现,它们拥有大量的优势和很大的潜力来转换软件。

从长远来看,软件2.0的未来是光明的,因为越来越多的人认为,当我们开发了AGI时,它肯定会写入软件2.0中。

原文发布于微信公众号 - ATYUN订阅号(atyun_com)

原文发表时间:2017-11-13

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏TEG云端专业号的专栏

全国知识图谱与语义计算大会 - 实体发现与链接比赛总结

一 背景 互联网大数据时代中,随着机器语义理解需求的日益增长,知识图谱,即各类实体、概念及其之间的语义关系,日益成为大数据时代知识表示的主要形态之一,并在学术界...

4317
来自专栏Albert陈凯

如何高效地学习编程语言

这是Clojure好书《Clojure for the Brave and True》作者 Daniel Higginbotham 写于2017年4月16日的博...

3356
来自专栏AI科技评论

深度 | 清华大学博士生涂锋斌:设计神经网络硬件架构时,我们在思考些什么?(上)

基于神经网络的人工智能近年取得了突破性进展,正在深刻改变人类的生产和生活方式,是世界各国争相发展的战略制高点。 神经网络作为实现人工智能任务的有效算法之一,已经...

2616
来自专栏机器之心

教程 | 利用达尔文的理论学习遗传算法

选自sicara 机器之心编译 参与:黄小天、路雪 本文借助生物学中达尔文的进化理论来介绍遗传算法,并展示了通过简短的 Python 教程实现遗传算法的案例。 ...

3347
来自专栏数据魔术师

干货 | 到底是什么算法,能让人们如此绝望?

BOSS最近强迫小编学Tabu Search(TS) 听到这么高大上的词语后 当然是 ...... 一脸懵逼 ? 开始各种Google、度娘 搜索中却无奈发现 ...

4315
来自专栏达观数据

技术干货 |“搜你所想”之用户搜索意图识别

人类自诞生以来就伴随着各种信息的生产和获取,如今这个信息爆炸的 DT 时代,人们更是被各种信息所包围。我们知道,人获取信息的方式主要有被动获取和主动获取两种,其...

3016
来自专栏人工智能头条

解读Etsy如何利用热力学帮你找到适合“极客”的东西

1415
来自专栏ATYUN订阅号

Uber开源Atari,让个人计算机也可以快速进行深度神经进化研究

Uber近期发布了一篇文章,公开了五篇关于深度神经进化的论文,其中包括发现了遗传算法可以解决深层强化学习问题,而一些流行的方法也可替代遗传算法,如深度Q-lea...

884
来自专栏CSDN技术头条

解读Etsy如何利用热力学帮你找到适合“极客”的东西

Etsy的用户喜爱这个市集,货品丰富且数量繁多。不过对于那些自己也不清楚要找什么的用户来说,东西太多太杂反而更让人困扰。7月份,我们更新了UI界面,将搜索的热门...

1808
来自专栏木东居士的专栏

数据仓库中的模型设计

1702

扫描关注云+社区