TensorFlow机器学习(原书第2版)
上QQ阅读APP看书,第一时间看更新

1.1 机器学习的基本原理

你试过向别人解释怎么游泳吗?描述有节奏的关节运动和水的流动模式是超级复杂的事情。同样,有些软件问题过于复杂,以至于我们很难用头脑去思考。对于这种任务,就可能使用机器学习作为工具。

全速前进

机器学习是一项相对年轻的技术,所以想象你是欧几里得时代的几何学家,为一个新发现的领域铺平了道路。或者把自己想象成牛顿时代的物理学家,可能在思考机器学习领域的广义相对论。

以手工的方式精心调整算法来完成工作曾经是构建软件的唯一方式。从一个简化的观点来看,传统编程假定每个输入都有一个确定的输出。从另一个角度来看,机器学习可以解决输入-输出之间的关系不能被很好理解的那类问题。

机器学习的特点是软件可以从以前的经验中学习。随着样本的增多,这样的计算机程序的性能也随之提高。我们的希望是,如果你向这台机器输入足够多的数据,它就会学到模式,并为新的输入产生智能的结果。

信任并解释机器学习的输出

模式识别不再是人类独有的特征。计算机频率和内存的爆炸式增长导致了一种不寻常的情况:计算机现在可以用来进行预测、捕获异常、项目排序和自动标记图像。这类新型工具为不明确的问题提供了智能的答案,但代价是信任。你会相信计算机算法给出的重要医疗建议吗?比如是否要做心脏手术,或者更重要的是,解释为什么它给出这样的重要医疗建议?

平庸的机器学习解决方案没有立足之地。人类的信任太脆弱了,我们的算法必须经得起质疑。请仔细阅读本章。

机器学习的另一个名称是归纳学习,因为代码试图仅从数据中推断结构。这个过程就像去国外度假,然后通过看当地的时尚杂志弄清楚如何着装。你可以通过人们穿着当地服装的样子来了解当地文化。你在学习归纳。

你可能从未用过这种方式进行编程,因为归纳学习并非总是必要的。考虑这样一个任务:判断任意两个数字的和是偶数还是奇数。当然,你可以设想通过数百万的样本来训练一个机器学习算法(如图1.1所示),但你肯定知道这种方法有点小题大做。有更直接的方法可以很容易完成这个任务。

图1.1 每对整数相加,结果是奇数还是偶数。清单中相对应的输入和输出称作ground-truth数据集

两个奇数的和永远是偶数。可以验证一下:任意取两个奇数并将它们相加,检查和是不是一个偶数。下面是证明这一事实的方法:

  • 对于任意整数n,公式2n+1产生一个奇数。此外,任何奇数都可以写成某个n值的2n+1形式。数字3可以写成2(1)+1,数字5可以写成2(2)+1。
  • 假设我们有2n+1和2m+1两个奇数,其中nm是整数。两个奇数相加得到(2n+1)+(2m+1)=2n+2m+2=2(n+m+1)。这是一个偶数。

同样,我们还可以看到两个偶数的和还是偶数:2m+2n=2(m+n)。最后,我们得到一个奇数和一个偶数的和是一个奇数:2m+(2n+1)=2(m+n)+1。图1.2更清晰地展示了这一逻辑。

图1.2 输入对应输出背后的内在逻辑

就是这样!给你任意一对数字,在完全不使用机器学习的情况下,你也可以解决这个问题。直接使用数学规则可以解决这一问题。但是在ML算法领域,我们将其内部逻辑视为一个黑盒,这意味着内部发生的逻辑可能不容易解释,如图1.3所示。

图1.3 ML算法解决问题的方式可以理解为调整黑盒的参数,直到获得满意的结果

1.1.1 参数

有时,设计一个将输入对应到输出的最佳算法是过于复杂的事情。例如,输入是一个数字序列用以代表一个灰度图像,你可以想象编写一个算法来标记图像中的每个对象是多么困难。当其内部工作机制无法很好理解的时候,机器学习就派上了用场。它为我们提供了一个编写软件的工具包,而且无须定义算法的每个细节。程序员可以保留一些事先未确定的值,并让机器学习系统自己找出最佳值。

这些未确定的值称为参数,对问题的描述指的就是模型。你的工作是编写一个算法,该算法观察现有样本,并尝试调整出最优的参数,以实现最佳模型。哇,真是拗口!但是别担心,这个概念将是一个反复出现的主题。

机器学习解决问题时可能没有很好的可见性

掌握了运用归纳手段解决问题的艺术,我们在挥舞着一把双刃剑。虽然ML算法在解决特定任务时可能表现良好,但跟踪其推导步骤以理解结果产生的原因可能不那么清楚。一个复杂的机器学习系统会学习上千个参数,但理解每个参数背后的含义并不是首要的目标。记住这一点,我保证这将是一个神奇的世界。

练习1.1

假设你已经收集了三个月的股票市场价格。你想通过预测未来的趋势来获得收益。如果不使用ML,你将如何着手解决这个问题?(正如你将在第13章中看到的,这个问题通过ML技术得以解决。)

答案

不论相信与否,定义股市交易策略的常见方式是通过硬性设计的规则实现。比如经常使用“价格下跌5%就买入”这样的简单算法。注意这里没有机器学习——只有传统逻辑。

练习1.2

美国国家航空航天局(NASA)向太空发射卫星,这些卫星收集遥测数据。有时,收集到的数据中的异常表明仪器出了问题或收集数据的环境有问题。为简化起见,假设遥测数据是基于时间的数字序列。今天,为了检测异常,大多数方法使用简单的阈值,或者通过这些数字的最大值或最小值来触发报警。使用ML触发报警和检测异常的更好方法是什么?

答案

你可以按时间步记录一系列NASA遥测数据,比如每5秒记录数据。然后取数据值,当它们触发报警时,记录1(异常);否则,记录0(正常)。祝贺你——你已经建立了一个ground-truth数据集,你可以将它输入到你在本书后面学习的任何预测模型中,例如回归或分类。你甚至可以建立一个深度学习模型。看,机器学习不是很有趣吗?

1.1.2 学习和推理

假设你要用烤箱烤甜点。如果你是厨房里的新手,你可能要花好几天的时间想出配料的正确组合和完美比例,才能做出美味的食物。通过记录食谱,你可以记住并重现如何做甜点。

机器学习借鉴了食谱的思想。通常,我们从两个阶段检验一个算法:学习推理。学习阶段的目的是描述数据,也就是特征向量,并将其总结成一个模型。模型就是我们的食谱。事实上,模型是一个具有很多解释可能性的程序,而数据则用于将其明确。

注意 特征向量是对数据的实用性简化。你可以将其视为将真实对象进行充分总结出来的属性列表。学习和推理步骤依赖于特征向量,而不是直接依赖数据。

与食谱可以被其他人共享和使用的方式类似,学习到的模型也可以被其他软件重用。学习阶段是最耗时的。在第3章开始构建自己的模型时你会看到,运行一个算法就算不花几天或几周,也要几个小时,才能收敛成一个可用的模型。图1.4概述了学习流程。

图1.4 学习方法通常遵循一个结构化的方法。首先,需要将数据集转换为一个表示形式——通常是学习算法可以使用的一组特征。然后,学习选择一个算法模型并高效地探索模型参数

在推理阶段使用模型对未见过的数据做出智能的判断。这个阶段就像使用你在网上找到的食谱。推理过程通常比学习花费的时间要少几个数量级,推理速度足以处理实时数据。推理是在新数据上测试模型并观察其性能表现,如图1.5所示。

图1.5 推理过程通常使用学得或给出的模型,在将数据转换成可用的表示方式后,比如特征向量,这个过程使用模型产生预测的输出