
1.1 机器学习基础
自从谷歌的Alpha Go打败了韩国的李世石和中国的柯洁之后,机器学习毫无疑问地成为当下流行和前卫的计算机研究和应用方向。那么到底什么是机器学习呢?用我们经常玩的剪刀石头布游戏来浅显地说明,如图1-1所示,计算机的摄像头可自动将用户摆出的手势识别成剪刀、石头和布中的一种。

图1-1 剪刀石头布游戏示意图
让我们看看机器学习和传统编程在解决问题的思路上有什么不同。
传统编程方案的思路如图1-2所示。

图1-2 传统编程方案的思路
传统编程方案的流程如下所述。
(1)软件制造阶段:软件工程师理解业务规则后,经过编码,将业务规则转换成程序。
(2)软件使用阶段:通过运行计算机程序,将用户输入的真实数据输出成结果。
利用传统编程方案定位手的位置和手指的边界是非常困难的。因为相同的手势有多种表达方案,如手的各种位置、手的各种大小和形状(有的纤长,有的粗短),以及手的各种皮肤状况(颜色、毛孔、伤疤等)等,所以源代码规模非常庞大。如图1-3所示,传统编程方案的代码逻辑非常复杂,后期维护近乎不可能。从实际操作的角度来说,几乎不可能有软件工程师能很好地完成这个程序。

图1-3 传统编程方案在复杂业务中可能会极其复杂
机器学习方案的思路如图1-4所示。

图1-4 机器学习方案的思路
基于机器学习方案的工作流程如下。
(1)软件制造阶段:机器学习通过学习训练数据推测出其中隐含的业务规则,将业务规则用权重的方式书写成模型。
(2)软件使用阶段:通过运行模型,将用户输入的真实数据输出成结果。
和绝大部分机器学习应用一样,这里的剪刀石头布应用的训练数据包含数据和标签。数据是一些照片(在计算机里,照片是由一堆数字构成的);标签是指图片中的手势是剪刀、石头,还是布。机器学习算法需要在训练数据的支持下,推测出将图片映射成标签的业务规则,如图1-5所示。

图1-5 机器学习中的数据和标签