EssentialMathforAI(机翻)-第二章(1/3)
也许如果我知道这些数据从哪里来,为什么存在,我就会知道它们都走向何方,为什么会这样。
数据是驱动大多数AI系统的燃料。在本章中,我们将了解如何处理数据以及设计从数据中提取有用且可操作信息的方法,这是感知AI的核心。感知AI基于从数据中进行统计学习,其中AI代理或机器从环境中感知数据,然后检测这些数据中的模式,从而使其得出结论和/或做出决策。
感知AI与其他三种AI不同:
理解AI
控制AI
这涉及控制AI代理的物理部分,以便在空间中导航、开门、倒咖啡等。机器人在这方面取得了重大进展。我们需要用包括感知AI和理解AI的“大脑”来增强机器人,并将它们连接到控制AI。理想情况下,像人类一样,控制AI通过将信息传递给感知和理解系统,从而从与环境的物理互动中学习,这些系统又将控制命令传递给代理的控制系统。
意识AI
在这里,AI代理具有类似于人类体验的内在体验。由于我们还不知道如何数学定义意识,因此在本书中根本不涉及这个概念。
在许多流行的机器学习模型中,包括高度成功的神经网络,这些网络在2012年的AlexNet中将人工智能带回了公众的视线,其中的核心是一个非常简单的数学问题:将给定的数据点适配到恰当的函数中(将输入映射到输出),从中提取出重要的信号并忽略噪声,然后确保此函数在新数据上表现良好。
假设和特征
我们不知道生成数据的真实函数或它实际依赖的所有特征。我们只是观察数据,然后尝试估计生成它的假设函数。我们的函数试图学习哪些数据特征对我们的预测、分类、决策或一般目的很重要。它还学习这些特征如何相互作用以产生观察到的结果。AI在这方面的巨大潜力之一是它能够捕捉到人类不容易注意到的数据特征之间的微妙相互作用,因为我们很擅长观察强特征,但可能会忽略更微妙的特征。例如,我们人类可以看出一个人的月收入影响其偿还贷款的能力,但我们可能不会注意到他们的日常通勤或早晨习惯也会有非常重要的影响。某些特征交互比其他交互简单得多,如线性交互。其他交互则更加复杂,是非线性的。从数学的角度来看,无论我们的特征交互是简单的(线性)还是复杂的(非线性),我们的目标都是相同的:找到适合您的数据并能够在新数据上做出良好预测的假设函数。这里还有一个额外的复杂问题:有许多假函数可以拟合相同的数据集,我们如何知道选择哪一个?
性能
即使计算出适合我们的数据的假设函数,我们如何知道它在新的和未经见过的数据上表现良好?我们如何知道选择哪个性能度量,以及在部署到真实世界后如何监控这种性能?现实世界中的数据和场景并没有全部用基准标记,因此我们不能轻易地衡量我们的AI系统是否表现良好并做出正确或合适的预测和决策。我们不知道衡量AI系统结果的标准。如果现实世界中的数据和场景都带有基准,那么我们所有人都会失业,因为我们会知道在每种情况下该怎么做,地球上就会和平,我们将幸福地生活(事实上不是这样,我希望它能这么简单)。
数量
AI领域中几乎所有的东西都是高维的!数据实例的数量,观察到的特征以及要计算的未知权重可能在百万级别,所需的计算步骤可能在十亿级别。在这样的数据量上进行有效的存储、传输、探索、预处理、结构化和计算是中心目标。此外,探索所涉及的高维数学函数的景观是一项非常复杂的任务。
结构
当我们处理数据时,了解真实数据和模拟数据之间的区别非常重要。这两种类型的数据对于人类的发现和进步都非常有价值。
真实数据
这些数据是通过对现实世界的观察收集的,使用测量设备、传感器、调查、结构化表格(如医学问卷)、望远镜、成像设备、网站、股票市场、受控实验等手段。由于测量方法和仪器的不准确性和失效,这些数据通常是不完美且有噪声的。从数学上讲,我们并不知道生成实际数据的确切函数或概率分布,但我们可以使用模型、理论和模拟对其进行假设。然后,我们可以测试我们的模型,并最终使用它们进行预测。
模拟数据
这是使用已知函数生成的数据,或者从已知概率分布中随机抽样的数据。在这里,我们有已知的数学函数或模型,然后将数值插入模型以生成数据点。例子有很多:模拟各种自然现象的偏微分方程的数值解,这些现象涉及各种不同的尺度,例如湍流流动、蛋白质折叠、热扩散、化学反应、行星运动、断裂材料、交通等等,甚至还包括增强迪士尼电影动画,如模拟《海洋奇缘》中的自然水流动,或者《冰雪奇缘》中艾尔莎的头发运动。
在本章中,我们通过两个关于人类身高和体重数据的例子来展示真实数据和模拟数据之间的差异。在第一个例子中,我们访问一个在线公共数据库,然后下载和探索两个包含真实个体身高和体重测量的真实数据集。在第二个例子中,我们基于一个我们假设的函数模拟我们自己的身高和体重数据集:我们假设一个人的体重与他们的身高呈线性关系。这意味着当我们将体重数据与身高数据进行绘图时,我们期望看到一条直线或平坦的视觉模式。
线性依赖模型描绘了世界上的平坦性,如一维直线、二维平面(称为平面)和高维超平面。线性函数的图形,表示线性依赖关系,始终是平坦的,不会弯曲。每当你看到一个平坦的物体,如桌子、棒子、天花板或一系列数据点紧密围绕一条直线或平面时,你就知道它们的代表函数是线性的。任何不平坦的东西都是非线性的,所以图形弯曲的函数是非线性的聚集在弯曲曲线或曲面周围的数据点是由非线性函数生成的。
其中参数ω0、ω1、ω2和ω3是标量数。权重ω1、ω2和ω3线性组合特征,在添加偏置项ω0后得到f(x1,x2,x3)的结果。换句话说,结果是由特征x1、x2和x3之间的线性相互作用以及偏置产生的。
表示函数输出与特征之间的非线性依赖关系的非线性函数公式也非容易识别。一个或多个特征以1以外的幂出现在函数公式中,或者与其他特征相乘或相除,或嵌套在其他微积分函数中,如正弦、余弦、指数、对数等。以下是三个关于三个特征x1、x2和x3的非线性函数的示例:
在整本书中,我们将使用先前的符号和术语,因此您将非常熟悉线性组合、权重、特征以及特征之间的线性和非线性相互作用等术语。
一个真实数据的例子
结构化数据
我们在这里将使用的关于身高、体重和性别的两个数据集是结构化数据集的例子。它们以行和列的形式组织。列包含特征,例如体重、身高、性别、健康指数等。行包含每个数据实例的特征分数,即在这种情况下,每个人的特征分数。另一方面,一堆音频文件、Facebook帖子、图像或视频等数据集都是非结构化数据集的例子。
我从Kaggle网站下载了两个数据科学家的数据集。这两个数据集都包含了一定数量的个体的身高、体重和性别信息。我的目标是了解一个人的体重如何取决于他们的身高。从数学上讲,我想写一个将体重表示为一个特征(即身高)的函数的公式:
这样,如果有人给我一个新人的身高,我就能预测他们的体重。当然,除了身高之外,一个人的体重还取决于其他特征,比如性别、饮食习惯、锻炼习惯、遗传倾向等。然而,对于我下载的数据集,我们只有身高、体重和性别数据。除非我们想要寻找更详细的数据集,或者出去收集新数据,否则我们只能用现有的数据。此外,本例的目标仅仅是说明真实数据和模拟数据之间的区别。当我们有更复杂的目标时,我们可以处理具有更多特征的更复杂的数据集。
这是处理真实数据的诸多挑战之一。我们不知道是什么函数生成了数据,也不知道为什么数据呈现出这样的样子。我们调查、获取洞察、检测模式(如果有的话),然后提出一个假设函数。接着我们测试我们的假设,如果根据我们精心设计的性能度量表现良好,我们就将其部署到现实世界中。我们使用已部署的模型进行预测,直到新数据告诉我们我们的假设不再有效。在这种情况下,我们会研究更新的数据并提出新的假设。只要我们的模型还在使用,这个过程和反馈循环就会继续进行。
在继续讨论模拟数据之前,让我们解释为什么第一个数据集似乎对个体的身高和体重之间的关系没有任何见解。在进一步检查后,我们注意到该数据集中4和5分的个体过多,这些分数分别表示肥胖和极度肥胖。因此,我决定按指数得分拆分数据,并绘制所有具有相似指数得分的个体的体重与身高的关系。这一次,在图2-3中,身高和体重之间的线性依赖关系显而易见,谜团得以解开。通过根据个体的指数得分进行条件处理,这可能会让人觉得我们在作弊,追求线性关系。但在数据探索的名义下,一切都是公平的。
现在我们可以放心地假设,体重与身高呈线性关系:
当然,我们还需要寻找合适的ω0和ω1参数值。第3章将教我们如何做到这一点。实际上,机器学习(包括深度学习)的大部分活动都是从数据中学习这些ω值。在我们这个非常简单的例子中,我们只需要学习两个ω值,因为我们只有一个特征,即身高,并且在观察到真实数据中的线性模式后,我们假设线性依赖关系。在接下来的几章中,我们将遇到一些需要学习数百万个ω值的深度学习网络,然而我们将看到,问题的数学结构实际上与我们将在第3章学到的结构完全相同。
模拟数据的一个例子
在这个例子中,我模拟了自己的身高体重数据集。模拟我们自己的数据可以避免从网络、现实世界甚至建立实验室以解决受控测量遇到的麻烦。当所需数据不可用或者获取成本非常高时,这是非常有价值的。它还可以通过仅改变函数中的数字来测试不同的情景,而不是创建新材料或建立实验室并进行新的实验。模拟数据非常方便,因为我们只需要一个数学函数,如果我们想要涉及随机性和/或噪声,还需要一个概率分布,以及一台计算机。
让我们再次假设身高和体重之间存在线性依赖关系,所以我们将使用的函数是:
为了能够模拟数值(height,weight)对,数据点,我们必须为参数ω0和ω1假定数值。在没有从真实数据中了解到这些ω值的正确选择的情况下,我们只能根据问题的背景进行有根据的猜测,并尝试不同的值。注意,在本例中的身高体重案例中,我们碰巧拥有可以用来学习ω值的合适取值的真实数据,第3章的目标之一就是学习如何做到这一点。然而,在许多其他情况下,我们没有真实数据,所以唯一的办法就是尝试这些ω值的各种数值。
在以下模拟中,我们设置ω0=-314.5和ω1=7.07,因此函数变为:
现在我们可以生成尽可能多的数值(身高、体重)对。例如,将height=60代入体重函数公式,我们得到weight=-314.5+7.07×60=109.7。因此,我们的线性模型预测身高为60英寸的人体重为109.7磅,我们可以在身高-体重图上绘制的数据点坐标为(60,109.7)。在图2-4中,我们生成了5000个这样的数据点:我们为身高选择54至79英寸之间的5000个值,并将它们代入体重函数。我们注意到,图2-4中的图形是一条完美的直线,模拟数据中没有噪声或变化,因为我们没有将它们纳入我们的线性模型。
这是模拟数据的一个特点:它会按照生成它的函数所做的那样执行。如果我们理解了用于构建模拟的函数(称为模型),并且我们的计算不会积累太多的数值误差或失控的非常大的数值,那么我们就能理解模型生成的数据,并可以以我们认为合适的方式使用这些数据。这里没有太多的惊喜空间。在我们的例子中,我们提出的函数是线性的,所以它的方程是一条直线,如图2-4所示,生成的数据完美地落在这条直线上。
如果我们想模拟更真实的身高和体重数据呢?那么我们可以从人类人口身高更真实的分布中抽取身高值:钟形的正态分布!同样,我们知道我们抽样所依据的概率分布,这与真实数据的情况不同。在我们抽取身高值之后,我们将其代入体重的线性模型,然后加入一些噪声,因为我们希望模拟数据更加真实。由于噪声具有随机性质,我们还必须选择它将从哪个概率分布中抽取。我们再次选择钟形的正态分布,但我们本可以选择均匀分布来模拟均匀随机波动。我们更真实的身高体重模型变为:
我们得到了图2-5中所展示的结果。
数学模型:仿真与人工智能
我们总是可以调整我们的数学模型,使它们更接近现实。我们是设计者,所以我们决定这些模型中包含的内容。通常情况下,模型越是模仿自然,就会包含越多的数学对象。因此,在建立数学模型时,通常需要在接近现实、模型的简单性和可计算性之间进行权衡。不同的设计者会提出不同的数学模型,有些模型比其他模型更能捕捉到某些现象。随着对捕捉自然行为的探索不断深入,这些模型将不断改进和发展。值得庆幸的是,我们的计算能力在过去的几十年里得到了显著提高,使我们能够创建和测试更复杂、更真实的数学模型。
自然既细致入微又浩瀚无垠。自然中的相互作用范围从亚原子的量子领域一直到星际尺度。我们作为人类,一直在努力理解自然,捕捉其错综复杂的组成部分以及它们之间多的相互联系和相互影响。我们这样做的原因各种各样,包括对生命和宇宙起源的纯粹好奇、创造新技术、增强通信系统、设计药物和发现疾病治愈方法、建造武器和防御系统,以及前往远的星球,甚至在未来可能居住在那里。数学模型为我们提供了一种极好且几乎神奇的方法,用数字、函数、方程以及在面对不确定性时通过概率引入量化的随机性来描述自然的所有细节。计算模拟这些数学模型使我们能够研究和可视化建模系统或现象的各种简单和复杂行为。反过来,计算机模拟的洞察力有助于模型的改进和设计,同时还提供了更深入的数学见解。这种极积极的反馈循环使得数学建模和模拟成为一种不可或缺的工具,随着我们计算能力的增强,这种工具的作用得到了极大的提高。
这是宇宙的一个奥秘,即其各种现象可以用数学这种抽象语言准确地建模。而人类思维的奇迹在于能够发现和理解数学,以及构建功能强大的技术设备,这些设备适用于各种应用。同样令人印象深刻的是,这些设备在其核心上仅仅是在计算或传输数学,更具体地说,是一堆零和一。
人类能够将对简单数字的理解推广到各种规模的自然现象的数学建模和应用,这是对所学知识进行概括的一个壮观例子,也是人类智能的标志。在AI领域,通用AI(类人和超级AI)和窄AI(特定任务导向)的共同目标是泛化:AI代理将所学能力泛化到新的和未知的情境。在第三章中,我们将了解窄AI和任务导向AI的这一原则:AI代理从数据中学习,然后为新的和未见过的数据生成良好的预测。AI与数学模型和模拟交互有三种方式:
数学模型和模拟为AI系统提供训练数据。
自动驾驶汽车被一些人认为是AI的一个基准测试。在汽车的AI系统学会这些是需要避免的不利事件之前,让智能汽车原型驶下悬崖、撞上行人或撞入新的工作区将是非常不便的。在这里,使用模拟数据进行训练尤为有价值,因为模拟可以在将汽车投放到道路上之前,为汽车创造各种危险的虚拟情境进行训练。同样,模拟数据对于火星探测器、药物发现、材料设计、天气预报、航空、军事训练等领域的AI系统培训也非常有帮助。