计算同构。一个典型的神经网络,首先,是由一个只有两个操作的三明治构成的:矩阵乘法和零点阈值(ReLU)。将其与显得更为异构和复杂的经典软件指令集比较下。由于你只需为少数核心计算原语(例如矩阵乘法)提供 Software 1.0 的实现,这就可以更容易地进行各种正确性/性能的保证。
更易于硅芯片上的实现。作为推论,因为神经网络的指令集相对较小,所以要实现这些非常适用于硅芯片的网络是非常容易的,例如,可定制的 ASIC 、 仿生芯片 等等。当低能耗的智能在我们周围变得普遍时,世界将会改变。例如,小巧便宜的芯片可以附带一个预训练的 ConvNet ,一个语音识别器和一个 WaveNet 语音合成网络,所有这些都集成在一个小的原生生物体中,这样你就可以附加到任何东西上。
执行时间是常量。典型的神经网络正向传递的每一次迭代都需要完全相同的 FLOPS 量。根据你的代码可能通过一些庞大的 C++ 代码库所采用的不同执行路径将是无变化的。当然,你可以有动态的计算图,但执行流程通常仍然受到很大的限制。这样,我们也几乎可以保证永远不会陷入无意识的无限循环。
内存使用是常量。与上述相关的,在任何地方都没有动态分配的内存,所以交换到磁盘以及那些你必须在代码中查找的内存泄露的可能性也很小。
它非常便携。与传统的二进制或脚本相比,矩阵乘法的序列在任意的计算配置上运行起来要容易得多。
这是非常敏捷的。如果你有一个 C++ 代码,并且有人希望你做两倍的执行速度提升(如果需要的话,以牺牲性能为代价),为了新标准而调整系统是非常有意义的。但是,在 software 2.0 中,我们可以利用我们的网络,删除一半的通道,重新训练,而且就这样- 运行速度是两倍,但工作起来更糟。这是惊人的。相反,如果你碰巧得到更多的数据/计算,只要增加更多的渠道和重新训练,你就可以立即使你的程序更好地工作。
模块可以融合为一个最优的整体。我们的软件经常被分解成通过公共函数、API 或端点进行通信的模块。但是,如果两个最初被分别训练的 2.0 版本的模块交互,那么我们可以很容易地整体上实现反向传播。想一想,如果你的网络浏览器能够自动地重新设计底层的系统指令 10 堆栈以达到更高的网页加载效率。这是多么惊人啊。在 2.0 中,这是默认的行为。
拾取起来很容易。我喜欢开玩笑说深度学习是浅薄的。这并不是核物理学,其中在你做任何有用的事情之前必须是 PhD 学位。基础的概念需要基本的线性代数、微积分、Python 和 CS231n 的一些课程。当然,随着时间的推移,人们可以获得大量的专业知识和直觉,所以更精确的说法是,software 2.0 堆栈很容易拾取,但不是很容易掌握。
它比你做得好。最后,也是最重要的一点,神经网络是一个比像你或我的任何人能提出的在大部分有价值的垂直线上的更好的代码,目前这至少涉及与图像/视频,声音/语音和文字。
Software 2.0 的局限性
2.0 的堆栈也有其自身的一些缺点。在优化结束时,我们剩下的大型网络运行良好,但很难解释清楚。在许多应用领域,我们将会选择使用我们能理解的 90% 精确模型,或者我们无法理解的 99% 精确模型。
2.0 的堆栈可能会以 不直观的和难以置信的 方式失败,或者更糟糕的是,他们可能会“静默式失败”,例如,静默地在训练数据中使用偏见,而在数据量大小达到几百万时的大多数情况下这些数据很难被正确地分析和检查。
最后,我们仍然发现这个堆栈的一些特殊属性。例如, 对抗样本 和 攻击 的存在凸显了这个堆栈的非直觉性。
最后几个想法
如果将神经网络看作是一个软件堆栈,而不仅仅是一个很好的分类器,很显然,它们具有大量的优势,并且有很大的潜力来改造软件。
从长远来看,software 2.0 的未来是光明的,因为在我们开发 AGI 时越来越多的人更清楚这一点:AGI 必然需使用 software 2.0 来编写。
那么 software 3.0 呢? 这完全取决于 AGI 。
免责声明:科技狗对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。 本网站转载图片、文字之类版权申明,本网站无法鉴别所上传图片或文字的知识版权,如果侵犯,请及时通知我们,本网站将在第一时间及时删除:yzl_300@126.com