Software 2.0 • Andrej Karpathy 2017
本文中 Andrej Karpathy 提出了一个革命性的观点:神经网络不仅仅是机器学习工具箱中的另一个工具,而是软件开发方式的根本性转变,即从传统的“Software 1.0”过渡到“Software 2.0”。Software 1.0 依赖于人类编写的明确指令,而 Software 2.0 则基于数据集和神经网络架构,通过训练来生成程序。Karpathy 认为这种转变不仅提高了软件性能,还改变了编程范式,使得数据集的管理和优化成为软件开发的核心。 ➡️ Software 1.0 vs. Software 2.0 Software 1.0: 由人类程序员使用编程语言(如 Python、C++)编写明确的指令,逐行代码确定程序行为。 Software 2.0: 使用神经网络的权重表示程序,由数据集和神经网络架构定义,训练过程将数据集“编译”成最终的神经网络。 ➡️ 转变实例 视觉识别: 从工程化特征和机器学习模型(如 SVM)转变为使用大规模数据集和卷积神经网络(CNN)。 语音识别和合成: 从预处理和传统模型(如高斯混合模型和隐马尔可夫模型)转变为完全依赖神经网络(如 WaveNet)。 机器翻译: 从基于短语的统计技术转变为神经网络模型,特别是在多语言和弱监督环境中。 游戏: 从手工编码的程序(如围棋程序)转变为神经网络模型(如 AlphaGo Zero)。 数据库: 使用神经网络替代传统数据管理系统组件,提高速度和节省内存。 ➡️ Software 2.0 的优势 计算同质性: 神经网络主要由矩阵乘法和 ReLU 组成,简化了实现和优化。 易于硬件实现: 简单的指令集使得神经网络更容易在定制 ASIC 和神经形态芯片上实现。 恒定运行时间和内存使用: 每次前向传递所需的 FLOPS 和内存使用量是恒定的。 高度可移植: 矩阵乘法序列比传统二进制文件或脚本更容易在不同计算配置上运行。 灵活性: 可以通过调整网络结构和重新训练来快速适应新的性能需求。 模块融合: 可以通过反向传播优化相互交互的模块,提升整体性能。 ➡️ Software 2.0 的局限性 可解释性差: 大型神经网络的工作原理难以理解。 潜在的失败模式: 可能出现非直观和尴尬的错误,或“静默失败”,如训练数据中的偏见。 对抗样本和攻击: 反映了这种技术堆栈的非直观特性。 ➡️ 编程范式的变化...