机器学习有什么成分和结构?

 ‍‍▌基本概念

 
机器学习(Machine Learning, ML)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。它是人工智能的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域,它主要使用归纳、综合而不是演绎。我们从一个实例来了解机器学习的基本概念。假设我们现在面临这样一个任务(Task) ,任务的内容是识别手写体的数字。对于计算机而言,这些手写数字是一张张图片,如下所示:
机器学习有什么成分和结构?
对人来说,识别这些手写数字是非常简单的,但是对于计算机而言,这种任务很难通过固定的编程来完成,即使我们把我们已经知道的所有手写数字都存储到数据库中,一旦出现一个全新的手写数字(从未出现在数据库中),固定的程序就很难识别出这个数字来。所以,在这里,我们的任务指的就是这类很难通过固定编程解决的任务。
 
要解决这类任务,我们的计算机需要有一定的“智能”,但是在我们的认知中,只有人类才具备这种“高级智能”(某些灵长类动物虽然具备一定的运用工具的能力,但我们认为那距离我们所说的智能还有很远的距离),所以如果我们想让计算机具备这种“智能”,由于这是人造的事物,我们称这种智能为人工智能(Artificial Intelligence, AI) 。
 
正式地讲,人工智能,是指由人制造出来的机器所表现出来的智能。通常人工智能是指通过普通计算机程序的手段实现的类人智能技术。 机器学习可以帮助我们解决这类任务 ,所以我们说,机器学习是一种人工智能技术。
 
那么机器学习是怎么解决这类任务的呢?
 
机器学习(Machine learning)是一类基于数据或者既往的经验,优化计算机程序的性能标准的方法。这是机器学习的定义,看起来可能难以理解,我们对它进行分解:
 
1、首先,对于手写数字识别这个任务来说,数据或者既往的经验就是我们已经收集到的手写数字,我们要让我们的程序从这些数据中学习到一种能力/智能 ,这种能力就是:通过学习,这个程序能够像人一样识别手写数字。
 
2、性能标准,就是指衡量我们的程序的这种能力高低的指标了。在识别任务中,这个指标就是识别的精度。给定100个手写数字,有99个数字被我们的“智能”程序识别正确,那么精度就是 99% 。
 
3、优化,就是指我们基于既往的经验或者数据,让我们的“智能”程序变得越来越聪明,甚至比人类更加聪明。
 
机器学习,就是能够从经验中不断“学习进步”的算法,在很多情况下,我们将这些经验用数值描述,因此,经验=数据 ,这些收集在一起的数据被成为数据集(Dataset) ,在这些已有的数据集上学习的过程我们称之为训练(Train) ,因此,这个数据集又被称为训练集 。
 
很显然,我们真正关心的并不是机器学习算法在训练集上的表现,我们希望我们的“智能”程序对从未见过的手写字也能够正确的识别,这种在新的样本(数据)上的性能我们称之为泛化能力(generalization ability) ,对于一个任务而言,泛化能力越强,这个机器学习算法就越成功。
 
根据数据集的不同,机器学习可以分成如下三类:
 
监督学习(Supervised learning):数据集既包含样本(手写字图片),还包含其对应的标签(每张手写字图片对应的是那个数字)
 
无监督学习(Unsupervised learning):与监督学习相对,数据集仅包含样本,不包含样本对应的标签,机器学习算法需要自行确定样本的类别归属
 
强化学习(Reinforcement learning):又称为增强学习,是一种半监督学习,强调如何基于环境而行动,以取得最大化的预期利益。
 
当前大热的神经网络,深度学习等等都是监督学习,随着大数据时代的到来以及GPU带来的计算能力的提升,监督学习已经在诸如图像识别,目标检测和跟踪,机器翻译,语音识别,自然语言处理的大量领域取得了突破性的进展。
 
然而,当前在无监督学习领域并没有取得像监督学习那样的突破性进展。由于在无人驾驶领域主要应用的机器学习技术仍然是监督学习,本文将重点讲监督学习的相关内容。
 
在本文中,为了便于理解,我们使用手写数字识别来描述处理的任务,实际上,机器学习算法能够处理的任务还有很多,例如:分类,回归,转录,机器翻译,结构化输出,异常检测,合成与采样, 缺失值填补等等。这些任务看似不同,却有着一个共性,那就是很难通过人为设计的确定性程序来解决。
 
▌监督学习
 
经验风险最小化
 
监督学习,本质上就是在给定一个集合 (X,Y) 的基础上去学得一个函数:
 
y=f(x)
 
在 MNIST 问题中, X 就表示我们收集到的所有的手写数字图片的集合,Y 表示这些图片对应的真实的数字,函数 f 则表示输入一张手写字图片,输出这张图片表示的数值这样的一个映射关系。
 
很显然,这样的映射关系中的 x 有着一个极其巨大的取值域(甚至有无限种可能取值), 所以我们可以把我们已有的样本集合 (X,Y) 理解为从某个更大甚至是无限的母体中,根据某种未知的概率分布 p,以独立同分布随机变量方式来取样。现在,我们假定存在一个损失函数(Loss function) L ,这个损失函数可以表述为:
 
L(f(x),y)
 
这个损失函数描述的是我们学得的函数 f(x) 的输出和 x 样本对应的真实值 y 之间的距离,很显然,这个损失越小,表示我们学得的函数 f 更贴近于真实映射 g 。以损失函数为基础,我们定义风险 :
 
函数 f 的风险,就是损失函数的期望值。 由于我们以手写字分类为例,所以这里各个样本的概率分布 p 是离散的,我们可以用如下公式定义风险:
机器学习有什么成分和结构?
如果是连续的,则可以使用定积分和概率密度函数来表示。这里的 xi 是指整个样本空间的所有可能取值,所以,现在的目标就变成了: 在很多可能的函数中,去寻找一个 f,使得风险 R(f) 最小 。
 
然而,真实的风险是建立在对整个样本空间进行考量的,我们并不能获得整个样本空间,我们有的只是一个从我们要解决的任务的样本空间中使用独立同分布的方法随机采样得到的子集 (X,Y),那么,在这个子集上,我们可以求出这个真实分布的近似值,比如说经验风险 :
机器学习有什么成分和结构?