如前面所言,机器学习是以数据为“原材料”的,无须显式编程就能表征出学习能力。自然地,机器学习算法的实现是需要编程的,但机器学习和传统的显式编程还是有明显不同的。
在传统的编程范式中,通过编写程序,给定输入并计算,就会得到可预期的结果。但机器学习不一样,它会在给定输入和预期结果的基础之上,经过计算(拟合数据)得到模型参数,这些模型参数反过来将构成程序中很重要的一部分。两者的差别如图 1 所示。
图 1:传统编程与和机器学习的差别
对于软件工程师而言,他们关注的是程序的正确性和鲁棒性。然而,数据科学家(机器学习算法的设计者)通常与不确定性和可变性打交道,因为在模型还没有被计算完毕之前,他们也不知道程序最终会是什么模样。
传统的编程范式把人的思维“物化”为一行行代码,代码中充斥着各种 if 条件语句,应对每一种“个性化”的情况,一旦代码“固化”,每次运行的结果都是一样的,没有性能上的提升,因此传统编程谈不上是“学习”。
YC 中国创始人陆奇先生曾在一次主题报告中指出,目前大部分的软件都是“长颈鹿”软件。为什么这么说呢?长颈鹿一出生,就基本具备了一辈子生存的能力(奔跑、吃树叶等),然而,它们没有学习能力,其技能都是上天给予的,一辈子再也没有提升空间。
而我们知道,机器学习的核心特征就是“从数据中学习,获得性能提升,且无须显式编程”,这里的无须显式编程,并不是指不需要编程,而是指在功能实现上无须显式地给出逻辑,让算法从数据中“学习”出规律。而且,一旦程序具备了“学习”能力,数据发生了变化,程序的功能也会发生相应的变化,但程序逻辑基本无须变更,能达到“以不变应万变”的目的。