软件2.0 - Andrej Karpathy
Software 2.0 (source: Andrej Karpathy, 2017)
传统指令式编程是严格受控的,需要程序员思考问题的解决方法,并转换为程序指令。下一代的程序则是指定问题目标及程序骨架,由计算机自动搜索问题的解决方法。对应于当前的神经网络:问题目标对应损失函数;程序骨架对应网络结构,用于限制(缩小)程序搜索空间,加快收敛速度;而搜索过程则对应梯度下降的模型训练过程。
以神经网络为代表的新一代程序,可以执行视觉识别、声音合成、语言翻译以及数据库管理等复杂任务,而其基础仅为矩阵乘法和阈值门(ReLU)两个操作,这也使得针对神经网络的硬件相比通用程序的处理器更易设计。类似传统程序通过API交流,新一代程序可直接通过梯度传递交流,同时在可移植性及处理复杂任务的时空复杂度上都有优势。
传统程序有提供代码高亮、调试器、分析器、版本管理器等辅助功能的集成开发环境,有GitHub等开源社区,有Conda, Docker等开发部署环境管理工具。类似的,未来将会出现针对新一代程序的,方便数据收集整理、分享协作、开发部署的工具。原文发表于2017年,现在来看针对深度学习的可视化调试、数据分享、部署工具等都已有不少发展。
Pre-software: Design the hardware
Software 1.0: Design the algorithm
Software 2.0: Design the dataset
Software 3.0: Design the prompt
The hottest new programming language is English