Software 2.0

link: https://medium.com/@karpathy/software-2-0-a64152b37c35

这篇文章挺有意思的。软件1.0是通过复杂规则来构造的,而软件2.0则是通过目标以及约束来构造的。这个区别和:

  1. 命令式编程和声明式编程语言;
  2. 传统的机器学习和基于DL的深度学习

之间的差别非常类似。这篇文章分析了“软件2.0”的一些特点,列举了它的优势和劣势。非常有意思的一篇文章。

软件2.0是基于神经网络来构建的,而作者是深度学习方面的专家,难怪可以写出这么有深度的文章。


软件1.0和2.0之间的区别。软件2.0是基于深度学习来实现的。

I sometimes see people refer to neural networks as just “another tool in your machine learning toolbox”. They have some pros and cons, they work here or there, and sometimes you can use them to win Kaggle competitions. Unfortunately, this interpretation completely misses the forest for the trees. Neural networks are not just another classifier, they represent the beginning of a fundamental shift in how we write software. They are Software 2.0.

The “classical stack” of Software 1.0 is what we’re all familiar with — it is written in languages such as Python, C++, etc. It consists of explicit instructions to the computer written by a programmer. By writing each line of code, the programmer is identifying a specific point in program space with some desirable behavior.

In contrast, Software 2.0 is written in neural network weights. No human is involved in writing this code because there are a lot of weights (typical networks might have millions), and coding directly in weights is kind of hard (I tried). Instead, we specify some constraints on the behavior of a desirable program (e.g., a dataset of input output pairs of examples) and use the computational resources at our disposal to search the program space for a program that satisfies the constraints. In the case of neural networks, we restrict the search to a continuous subset of the program space where the search process can be made (somewhat surprisingly) efficient with backpropagation and stochastic gradient descent.

It turns out that a large portion of real-world problems have the property that it is significantly easier to collect the data than to explicitly write the program. A large portion of programmers of tomorrow do not maintain complex software repositories, write intricate programs, or analyze their running times. They collect, clean, manipulate, label, analyze and visualize data that feeds neural networks.


软件2.0并不会取代1.0(2.0的很多功能都需要1.0来进行实现),但是却会取代很多1.0方面的实现,比如:


软件2.0的优势


软件2.0的限制