深度学习将我们带入 software 2.0 的时代

这是我参与8月更文挑战的第11天,活动详情查看:8月更文挑战

现在人工智能处于比较初级阶段—模式学习,还没有推理能力,我们人类经过不断学习会形成一个知识体系。我们结构化事物,进行认知,深度学习的出现,也会波及到 software 领域。

software 2.0

我们从空间角度上重新描述一下当下 software 1.0

在开始介绍什么是 software 2.0 之前,我们先来看一看 software 1.0。 software 1.0 中可以将理解为一个经典栈,在栈中将我们写的 Python、C++ 等编程语言编写代码压入栈。程序是由程序员写给计算机的明确指令组成。通过编写每一行代码,程序员在程序空间中确定了一个具有某种行为的特定点。这也可以看做一种映射关系。

008.png

这句话听起来有点抽象,什么是程序空间,我们不是在编程吗,其实我们可以将每条语句或者每块代码理解对应一段逻辑,语句可以理解特征的组合,这些特征的组合对应到程序空间(空间维度与特征对应)的一个点。

如果深度学习不算了解,听到上有点 confusing,我们程序是语言组成,这些语言每一个 token 简单理解一个语言特征,这些 token 按一定顺序组合具有一个一定含义,这些 token 组合可以看成采样又组成一个样本空间,我们要做就是在样本空间中找到组合来实现一定逻辑,这是我当下理解,可能是我肤浅了。

software 2.0 不是取代 software 1.0 而是一种补充或者是扩展

尽管在过去几十年里 software 1.0 取得了很大的成功,但进入深度学习时代后,人们逐渐发现,单纯的 software 1.0 模式已经不能够解决很多实际的问题,例如——图像识别。早期的图像识别(~2010年之前),工程师们需要写复杂的代码提取各式各样的特征(图像边缘、纹理特征等),也可以理解为工程师自己对例如 cat 理解,以及如何用于制定规则来描述一只猫,其实这种模式通过自己定义规则或特征工程并不会得到好的效果,神经网络好处就是可以通过学习来自己完成特征工程的学习。

015.png

为了明确地进行类比,在 software 1.0 中,人类工程的源代码,例如一些后缀为 cpp 的文件,被编译成一个能做有用工作的二进制文件。而在 software 2.0 中,最常见的源代码包括

  • 定义了目标行为或者想要逻辑的数据集
  • 神经网络架构,给出了代码的大致骨架,但还需要对很多细节如权重。

训练神经网络的过程将数据集编译成二进制–最终的神经网络。在今天的大多数实际应用中,神经网络架构和训练系统越来越标准化,成为一种产品,所以大多数主动的 “软件开发 “都是以策划、增长、按摩和清洗标签数据集的形式进行的。这从根本上改变了我们迭代软件的编程模式,因为团队一分为二:software 2.0 的程序员(数据标注者)编辑和增长数据集,而少数software 1.0 的程序员则维护和迭代周围的训练代码基础设施、分析、可视化和标注界面。

software 2.0 在 tesla 的最佳实践

005.jpeg

由于Tesla Autopilot Team是一个规模很小的团队,而庞大复杂的模型功能使得每个人经常负责不同的任务,因此一个标准的团队合作流程就成了如何调优模型同时不使得模型退化的关键。

因为Tesla FSD要处理复杂的任务,进行1000+项感知任务,因此即使FSD使用一个极其巨大的HydraNet模型,该模型的表达能力也是有限的(Finite Model Capacity),每个团队成员在优化自己任务的时候应选用正确的方法,而不损害已有的模型性能。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享