我有时看到人们把神经网络称为机器学习工具箱中的另一个工具。他们有一些优点和缺点。他们在这里或那里工作。有时你可以用它们来赢得比赛。不幸的是,这种解释完全忽略了森林中的树木。神经网络不仅仅是另一个分类器,它代表着我们编写软件的方式发生根本变化的开始。他们是软件2.0的时代。
软件1.0的经典堆栈我们很熟悉——它是用python和c ++等语言编写的。它由程序员编写的显式指令组成。通过编写每一行代码,程序员识别了程序空中的一个特定点,并使其具有一些必需的行为。
相比之下,软件2.0是用神经网络权值编写的。没有人参与编写这个代码,因为权重很多(一个典型的网络可能有几百万),所以很难直接用权重来编码(我试过)。相反,我们对理想程序的行为指定一些约束(例如,在示例中,数据集与输入和输出成对出现),并使用我们的处理计算资源在程序空中搜索满足约束的程序。在神经网络的情况下,我们将搜索限制在程序空之间的连续子集,在那里可以有效地使用反向传播和随机梯度下降(有点令人惊讶)。
事实证明,大多数现实世界的问题比显式编写程序更容易收集数据。在未来,大多数程序员不会维护复杂的软件库,编写复杂的程序,也不会分析其运行时间。他们收集、清理、操作、标记、分析和可视化提供给神经网络的数据。
Software2.0不会取代1.0(其实需要大量的1.0基础设施来训练和编译2.0代码),但它会占用软件1.0今天负责的越来越多的部分。让我们看一些正在进行的过渡的例子,更具体地说:
在过去,视觉识别是由工程特征组成的,这些特征与最终顶层的机器学习(例如,svm)有一定的关系。从那以后,我们开发了一种机制来发现更强大的图像分析程序(在convnet架构中),最近我们开始在其中寻找架构。
语音识别过去涉及很多预处理、高斯混合模型和隐马尔可夫模型,但现在几乎完全由神经网络组成。
在历史上,语音合成已经通过许多拼接机制进行了处理,但最先进的模型是产生原始音频信号输出的大型虚拟网络(如wavenet)。
机器翻译通常使用基于短语的统计技术,但基于神经网络的翻译正迅速占据主导地位。我最喜欢的架构是在多语言设置下训练的,其中一个模型可以从任何源语言翻译成任何目标语言,而这个架构是在弱监督(或者无监督)设置下训练的。
机器人领域的一个悠久传统是将问题分解为传感、姿态估计、规划、控制和不确定性建模等模块,并在中间表示中使用显式表示和算法。我们还不知道,但加州大学伯克利分校和谷歌的研究表明,软件2.0可能能够更好地代表所有这些代码。
游戏。游戏已经存在很久了,但是alphago zero(一种观察象棋和纸牌下棋初始状态的卷积神经网络)现在已经成为世界上最好的棋手。我预计在其他领域也会看到类似的结果,比如dota 2或者星际争霸。
你会注意到上面列出的所有链接都涉及谷歌的工作。这是因为谷歌目前正处于重写自己的代码块以转换成软件2.0代码的前沿。一个模型来统治他们所有人提供了软件2.0代码的早期形式,也就是说,它将来自各个领域的统计数据结合成对世界的一致理解。
软件2.0的优势
为什么我们更喜欢把复杂的程序移植到软件2.0上?显然,一个简单的答案是,它们在实践中效果更好。然而,选择这种堆栈还有许多其他方便的原因。我们来看看软件2.0(比如一个convnet)相对于软件1.0(比如一个产品级c++代码库)的一些优势。软件2.0是:
标题:[科技资讯] Software 2.0 时代,你准备好了吗?
地址:http://www.heliu2.cn/xw/3919.html