移动平台深度神经网络实战:原理、架构与优化
上QQ阅读APP看书,第一时间看更新

1.1 机器学习即正义

不管大家有没有接触过机器学习,但是我们的生活中已经被机器学习包围了。比如被各种媒体报道了无数遍的自动驾驶技术就是机器学习和人工智能的结晶。甚至我们生活中的方方面面都已经受到了机器学习的影响。

最早的例子就是我们日常使用的搜索引擎的搜索推荐结果了。我们搜索一个关键词的时候,搜索引擎可能会推荐出我们感兴趣的其他关键词,那么搜索引擎是怎么实现的呢?一方面收集了大量的搜索和访问历史;另一方面通过爬取大量网页来生成知识图谱,两者结合完成搜索推荐。这些都离不开机器学习技术的应用。

同样,现在在银行、车站等公共场所都可能有一些无人开户或无人检票的系统。比如,银行的无人开户业务,通常的流程是先让你放置个人证件,接着拍下你的人脸,再检验一下现场人脸和身份证照片是否一致。以往这需要依靠柜员才能完成的任务,由于人脸识别技术的发展,已经可以在一定程度上用机器来替代了。而人脸识别自然就是基于机器学习来实现的。

再简单介绍一下无人驾驶技术,其涉及的技术栈十分广泛,包含图像识别、导航定位、驾驶辅助系统等各种技术。因此,在这个领域当中就不仅仅是机器学习一种技术那么简单了,而是需要多领域的多种技术相互融合。当然,现在的无人驾驶技术离成熟也是任重而道远。还有一个与我们生活息息相关的领域——智能医疗健康。从智能手环开始,各种智能穿戴设备层出不穷。不过我们需要知道的是,在传统情况下想做一个医疗器械具有很高的门槛。而现在我们能看到的部分智能设备,它们一不抽血、二不化验,只是根据很多外部数据就能够“拟合”你的健康状况,这种设备很大程度上规避了审核门槛,这就让普通科技企业也有机会尝试进入健康医疗领域。我们在这里提到了一个关键字:拟合。这听起来有些“专业”,我们会在接下来的章节中围绕“拟合”这个问题展开来讲。当然,还有各种实实在在做医疗健康数据的企业,它们根据各种体检数据和评估数据来做健康管理等工作。

我们可以看到,机器学习技术的应用从方方面面渗透到我们的生活中,它已成为科技领域的“中坚力量”。在了解了机器学习的典型应用场景后,我们再来谈一谈具体的工程实践和研发问题(这是本书需要研究和探讨的主题)。从本章开始,我们会先从机器学习基本理论开始讲起。

未来已经到来,我们需要做好准备。

1.1.1 照本宣科

说了这么多例子,现在我们来考虑一个严肃的问题,那就是到底什么是机器学习?机器学习又是怎么样一个过程呢?这是我们所要讲解的所有内容的开始,顺着这个思路,后续的很多问题,也会迎刃而解。

想想我们小时候在学校里上数学课的场景。我们拿到课本,老师会根据课本里的内容,帮着梳理其中知识点。接着老师会布置作业,当我们做完作业后老师还会给我们批改作业。我们经过小学一年的学习——终于学会了加减乘除以及解决相关的衍生问题。

事实上机器学习的原理跟这个简单的过程十分类似,我们可以将机器看作一个人,然后要给他准备一系列的数据,而这些数据就是课本的知识来源了。当然一堆乱七八糟的废数据是没用的,所以我们要帮机器整理数据,而这些整理后的数据就是课本。接着,我们要给机器安排一个老师,告诉机器如何使用这些数据,并梳理这些知识点之间的关系,与之对应的则是我们在机器学习领域当中的训练程序和模型了。现在有了课本和老师,机器就可以开始进行学习了,我们把这个学习的过程叫作训练。在训练完之后,我们会生成一个含有具体参数的模型,这个模型就是机器的学习结果,也就是那些存储在我们脑子里的知识了。以后当有人问机器问题的时候,机器就会使用这个模型来处理输入的问题,并生成一个输出来回答问题,那么这个过程就是所谓的预测了。当然,就像我们在学校里,我们要怎么检验学生的学习成绩呢?当然就是考试。而对于机器学习而言,我们会将一系列准备好的测试数据输入到机器学习系统中,然后机器学习系统就会输出相应的答案。我们比较一下测试数据的正确答案和机器给出的答案,就可以给机器学习的成果打一个分数了,而这个分数就是测试的准确率。当然机器比人类学习知识要烦琐得多,可能学习完一个知识点后就要一次性做个几万道题目才能确保模型的有效性,在这里我们先为机器默哀一分钟。

我们梳理一下整个流程。首先,我们会整理一系列的数据给训练程序,这些数据就叫作训练数据。其次,我们再给训练程序指定一个现成的模型学习方法,训练程序就会根据所提供的方法读入训练数据,然后经过计算得到学习后的模型。这个模型我们可以抽象成一个泛化的函数,作用就是输入一批自变量(训练数据中的特征),然后得到最后的应变量,即问题的答案。

理论上讲,我们就可以拿这个模型到实际环境里去使用了。不过在这之前,我们还有两步工作需要完成。

第1步:输入训练数据,确定得到的模型能否正确处理训练数据,只有准确率达到一定水平才能进入下一步。

第2步:输入测试数据,然后让模型给出结果,我们再来得到准确率。

如果这两步当中有一步不满足,那我们就只能更换训练数据(也就是换课本),抑或是更换老师(也就是换训练方法和模型)。直到两个准确率足够为止。

但是这里就有一个问题了,一个在训练数据上表现很好的模型到底效果好不好呢?那不一定,就像现实当中,课本会告诉我们1+1等于2,但是不会告诉我们9999+1等于10000。我们要学会方法的本质,然后举一反三。那么机器也需要如此,机器要从训练数据中找出其规律所在,才能去应付现实世界中的实际数据,不然就成了一个只会做课本题目或做试卷的“傻学生”了。但是现实中的确有很多在训练和测试数据上表现非常好,但是现实中却不理想的模型,我们将这种现象叫作“过拟合”。对于很多模型来说,如果数据量过小就很容易出现这种问题。如孔子说:“举一隅不以三隅反,则不复也。”模型设计不当的话,给再多数据也没用。如果我们训练出来一个模型是“过拟合”的,自然也就没有什么实用价值了。这种需求我们称之为模型的泛化能力。所以,所有的客户在使用机器学习产品的时候,都需要使用自己的数据去验证模型的使用价值。当然,可以想象,如果有学生作弊,把自己学过的题目告诉老师,让试题都选自这些题目,那这个学生有很高的几率能考100分。对于机器来说有过之而无不及,如果遇到的数据都是训练数据,那么准确率可想而知。这种情况我们称之为作弊。

1.1.2 关键概念概述

了解完机器学习的最基本运作原理后,我们再来认识几个和机器学习相关的关键名词与含义。本章以开门见山的方式概述大数据、机器学习和深度神经网络的基本概念。这些概述并不完美,我们会先在这里提出来,并在后续章节的阐述过程中不断完善这些定义。

第1个是大数据。大数据也称海量数据,它们由巨型数据集组成。这些数据集的大小超出我们可以正常收集、管理和处理的能力。随着计算机性能的提升,对大数据规模的定义也随之变化,越来越大。有人提出大数据目前有4个V,分别是量(volume,指数据大小)、速(velocity,指数据输入或输出的速度)、多变(variety,指数据样本多样性)和真实性(veracity)。如果我们善于利用这些大数据,那么它们的价值将难以估量,因此这也对我们存储与处理数据的技术提出了更高的要求,使得我们必须使用一些超越常规的方法来解决问题。

第2个是机器学习,我们在1.1.1节已经基本有所认知。

除此之外,就是机器学习领域当中经常能看到的一个词:深度学习。深度学习也称作深度神经网络,即层数非常深的神经网络。至于神经网络,也就是人工神经网络。这并不是什么时下新发明创造出来的词汇、技术或思想。其实,早在20世纪40年代这个概念就被提出了。所以说相关技术和方法是遇上了一个好的时代而被发扬光大了,具体是为什么,我们会在后面的章节进行阐述。神经网络是众多机器学习模型当中的一种,除此之外,常见的模型还包括决策树、SVM(Support Vector Machine,支持向量机)、贝叶斯网络等,数不胜数。

那么,深度神经网络又是怎么回事?事实上,深度神经网络仅是人工神经网络中的一个小分类。由于其训练效果出众,因此无论是学术研究还是研发工作都越来越多地开始采用这种方法。

1.1.3 数学之美

我们继续讲与机器学习相关的概念。虽然我们在前面的章节中已经用类比的方式概括了机器学习的主要任务。回过头来,我们再用理性的文字来讲解什么是机器学习,我们又为何需要机器学习。

大家都知道,人可以看到的东西是有限的,但是人总是希望从已知的信息中得到一些普遍的规律,并使用这些规律得到未知但想要知道的信息。比如,各种物理定理就是这个过程的产物。

我们再说一个更实际但非常简单的例子,它来源于基础统计学。比如,我们要如何才能知道某个工厂产出的产品可能出现的次品数?通常的做法往往是从实际的产品中抽取一定的样本,然后统计样本中的次品数量,计算样本里的次品频率。我们会假定样本和真实产品同等分布,比如样本有10个工件,工件里有1个是次品,那么我们可以假定次品率是10%,所以如果总共有100个工件,那么次品数量可以推断为10个,以此类推。

看一下这个过程,我们已知的是样本情况(样本包含多少个工件、里面有多少次品),以及整体数量,这些就是我们的原始数据,最后得出的是整体的次品数目,即未知的需要我们去预测的一个值,这也就是我们想要得到的信息。

只不过这个过程非常简单,我们用一个简单的数学模型就能解决。

所以早期我们来做这类预测时需要使用数学模型来帮助解决问题。而建立数学模型需要考虑这个系统中所有的因素,并思考这些因素之间的逻辑关系,以便得到准确的数学公式。这个就是数学模型的本质,也就是数学建模需要完成的任务。这种思路其实就是希望使用数学来描述我们现实世界中的一切现象。

诚然,数学很美。但是在有限资源的情况下,仅仅使用数学并不能解决一切问题。

大家可以思考一下天气预报的问题。天气预报的整个过程是非常复杂的,需要考虑的因素非常多,而且还需要进行趋势预测。在这个场景下,数学模型可以完成基本的预测,但是如果想要得到更高的准确率,那么只用数学模型已经力不从心了。疾病预测一类的问题亦是如此。

我们使用数学模型的思路是,观察收集的数据,然后使用数学工具去人工分析并建立数学模型,但是如果数据量不够,我们又怎么能够假定复杂的数学模型是普适的呢?主要矛盾在于,人的精力是有限的,如果数据量太大肯定不切实际。

那么,我们能不能让机器自己去观察更多的数据呢?

为了解决这个问题,机器学习就出现了。机器学习的思路是,如果我有一定量的数据,那么我就把人类自己分析数学模型的那套过程转嫁给计算机,让计算机读取数据,并提取数据中的一些特征。比如在疾病预测里,我们需要考虑的因素除了基本的各项身体健康指标外,可能还要考虑各种基因的因素,这些健康指标和基因都算作一个特征。然后,寻找这些特征和最后我们想要得到的结果之间的关系,我们需要做的就是设计这个寻找的算法,并使用计算机程序来实现,具体如何寻找就完全交给计算机来做。

所以,现在的趋势就是使用机器学习模型去替代我们传统的数学模型来解决现实问题。

那么为什么现在机器学习模型会变得越来越重要,甚至完全取代了数学模型的地位呢?一是因为人们现在想要解决的问题越来越复杂,很多问题数学模型已经无法胜任了。二是因为现在数据的来源越来越丰富,数据量越来越大。不过俗话说得好,巧妇难为无米之炊,哪怕使用了机器学习模型,但是没有数据又有什么用呢。这时我们就要再次提到前面列举的大数据概念了,海量数据走进人们的视野让机器学习乃至深度神经网络的实际运用成为可能。除此之外,还有机器性能的大幅提升。以前,很多模型无法使用的原因就是机器性能不足以让计算机胜任相关的计算任务,比如深度神经网络。而现在随着CPU性能提升、GPU和异构运算、分布式计算的兴起,到现在的ASIC、FPGA的应用,我们可以使用的资源自然也就越来越多,以前需要一个月才能处理完的数据现在一天之内就能处理完,因此机器学习也就不是天方夜谭。

我们会在本书的后续章节中,随着内容的推进陆续详细介绍抓取与预处理数据的技术、框架、方法和具体步骤,因为数据对我们的实际应用来说实在太过重要,因此我们会针对数据本身这个问题展开讨论。