机器学习与深度学习基础
当我们谈论人工智能时,很多人脑海中浮现的可能是科幻电影中那些能说会道、拥有自主意识的机器人。从《终结者》中的天网系统,到《钢铁侠》中的贾维斯,再到近年来引发广泛讨论的ChatGPT和各类大语言模型,人工智能似乎正在以越来越快的速度接近甚至超越人类的某些能力。然而,当我们真正想要理解人工智能的本质时,首先需要拨开层层迷雾,了解支撑这一切发展的核心技术——机器学习和深度学习。
本章将作为全书的开篇,为读者搭建理解人工智能所必需的知识框架。我们将从最基础的概念辨析开始,逐步深入到机器学习的核心范式,再到深度学习的基本单元——神经元模型,最后讲解训练神经网络的关键算法。在整个过程中,我们会用大量的生活化比喻和具体案例来帮助读者建立直观理解,确保即使没有任何数学或编程背景的读者也能顺利掌握这些概念。
人工智能、机器学习与深度学习:概念辨析
三个概念的层次关系
在深入学习之前,首先厘清人工智能、机器学习和深度学习这三个概念之间的关系至关重要。很多人容易将它们混为一谈,但实际上它们之间存在着明确的包含与被包含关系。我们可以用一个嵌套的同心圆来理解:最外层是人工智能,中间层是机器学习,最内层是深度学习。这种层层递进的关系意味着,深度学习是机器学习的一个子集,而机器学习又是人工智能的一个子集。
人工智能的概念最早可以追溯到1956年在美国达特茅斯学院举办的夏季研讨会。在那次历史性会议上,计算机科学家约翰·麦卡锡首次提出了“人工智能”这一术语,并将它定义为“制造智能机器的科学与工程”。从那时起,人工智能就承载着人类的一个伟大梦想:让机器具有人类的智能,能够像人一样思考、学习和解决问题。
人工智能的研究范围非常广泛,涵盖了多个不同的领域和方法。早期的人工智能研究主要基于规则系统,研究人员会手动编写大量的“if-then”规则来让计算机模拟人类的推理过程。例如,如果要让计算机识别一封邮件是否为垃圾邮件,早期的方法可能是编写诸如“如果邮件中包含'免费''限时优惠''点击这里'等词语,则标记为垃圾邮件”的规则。这种方法被称为专家系统,它在特定领域确实能够发挥作用,但局限性也非常明显:规则需要人工编写,无法自动学习和适应,而且对于复杂问题来说,规则的编写会变得极其繁琐。
机器学习的出现为这一问题提供了新的解决思路。与传统的人工智能方法不同,机器学习的核心思想是让计算机从数据中自动学习规律和模式,而不需要人工显式地编写规则。用一个通俗的比喻来说,传统的规则系统就像是一个严格按照菜谱做菜的厨师,每一步都需要详细的指令;而机器学习则像是一个通过观察和实践不断改进厨艺的学徒,它能够从大量的烹饪经验中自己总结出做菜的技巧。
机器学习的这个特性使其在处理复杂问题时具有明显优势。以图像识别为例,如果我们想让人工智能识别一张图片中是否有猫,传统的规则系统需要我们告诉计算机“猫有尖尖的耳朵、圆圆的脑袋、细长的胡须”等特征,这些规则很难完整描述,而且不同品种的猫在外形上差异很大,很难用有限的规则覆盖所有情况。机器学习的方法则是给计算机大量的猫图片,让它自己从这些图片中发现猫的共同特征。这种从数据中学习的方式使得机器学习能够处理更加复杂、多变的任务。
深度学习则是在机器学习基础上发展起来的一种更具表现力的技术。传统的机器学习在处理复杂问题时,往往需要人工进行特征工程,也就是说需要专业人员根据问题特点手工设计合适的特征表示。这个过程既费时又费力,而且特征的好坏直接决定了模型的性能。深度学习的革命性之处在于,它能够自动从原始数据中学习出有效的特征表示,不需要人工干预。仍然以猫的识别为例,深度学习模型可以直接从像素级别的原始图像开始学习,逐层提取从低级到高级的特征:底层可能学习到边缘和纹理,中层可能学习到耳朵、眼睛等部件,高层则可能学习到完整的猫的形态。这种端到端的学习方式极大地简化了问题处理的流程。
理解三者的区别与联系
为了更清晰地理解这三个概念的区别,我们可以考虑一个具体的应用场景:让计算机理解一段中文文本的含义。如果采用纯人工智能的方法,我们可能会编写大量的语法规则和语义规则来解析文本结构。这种方法理论上可行,但实际效果往往不佳,因为语言充满了例外、歧义和隐喻,这些都难以用规则来穷尽。
机器学习的方法则是收集大量的文本数据,并人工标注这些文本的含义或情感倾向,然后让学习算法从这些标注数据中学习文本与含义之间的映射关系。这种方法在很多任务上取得了不错的效果,但模型的性能很大程度上取决于我们能否提取出好的特征。
深度学习则更进一步,它可以直接从原始文本中学习有意义的表示。最典型的例子是近年来大热的语言模型,它们能够理解上下文、捕捉语义关系,甚至进行一定程度的推理。这些模型的成功很大程度上归功于深度学习强大的表示学习能力。
需要强调的是,虽然深度学习近年来取得了瞩目的成就,但它并不是万能的。在某些场景下,传统的机器学习方法甚至简单的规则系统可能更加适合。例如,当训练数据有限时,深度学习模型容易过拟合;当问题本身有明确规则时,基于规则的方法可能更加可靠和可解释。因此,理解这些技术的特点和适用场景,才能在实际应用中做出正确的选择。
机器学习的三大范式
机器学习根据学习方式的不同,可以分为三种主要范式:监督学习、无监督学习和强化学习。这三种范式代表了三种不同的“教学方式”,理解它们对于理解人工智能的学习机制至关重要。
监督学习:在老师的指导下学习
监督学习是最符合我们日常对“学习”认知的一种方式。想象一下一个学生在校学习的过程:老师会出习题让学生做,做完后老师会批改,告诉学生哪些做对了、哪些做错了,学生根据这些反馈来调整自己的理解。这个过程其实就是监督学习的核心理念。
在监督学习中,每个训练样本都由两部分组成:输入和对应的期望输出。输入是我们给模型的信息,期望输出是我们希望模型学会预测的正确答案。模型通过比较自己的预测结果和真实答案,不断调整自己的参数,逐步提高预测的准确性。这个过程就像学生做题、对答案、改错,最终掌握知识一样。
监督学习应用最广泛的任务包括分类和回归。分类任务的目标是让模型学会将输入划分到预定义的类别中。垃圾邮件识别就是一个典型的二分类问题,邮件要么是垃圾邮件,要么不是。手写数字识别则是一个十分类问题,需要将手写的0到9这十个数字正确分类。回归任务的目标则是预测一个连续的数值,例如根据房屋的面积、位置、房龄等特征预测房价,根据股票的历史数据预测未来的价格走势。
举一个生活化的例子来说明监督学习的工作原理。假设我们要训练一个模型来识别图片中的水果种类。我们需要准备大量标注好的图片数据,每张图片都标注了它是苹果、香蕉还是橙子。在训练过程中,模型会逐个查看这些图片,尝试预测每张图片中的水果种类。当模型预测错误时,它会根据错误程度调整自己的内部参数。经过大量的训练样本后,模型的预测准确率会不断提高。当训练完成后,我们就可以用这个模型来识别新的、未标注过的水果图片了。
监督学习的优势在于目标明确、学习效率高,只要有足够多的标注数据,通常能取得很好的效果。但它的局限性也很明显:标注数据的获取往往需要大量的人工成本,而且模型只能学习我们给定的类别,无法自主发现新的类别或规律。
无监督学习:自主探索数据的秘密
如果说监督学习像是有老师指导的课堂学习,那么无监督学习就更像是在未知领域的自由探索。在无监督学习中,训练数据只有输入部分,没有标签或正确答案。模型需要自己去发现数据中隐藏的结构、规律或模式。
聚类是无监督学习最常见的应用之一。聚类的目标是将相似的数据点归为同一组,而不同组之间的数据点差异较大。继续用水果的例子,如果我们有一堆未标注的水果图片,无监督学习可以帮助我们自动将这些图片分成几组。模型可能会根据颜色、大小、形状等特征,将这些水果分成红色的大致一组、黄色的另一组、橙色的再一组。这样,即使我们没有告诉模型这些是苹果、香蕉还是橙子,它也能自动发现数据的内在分组。
降维是另一个重要的无监督学习任务。现实中很多数据具有非常高的维度,比如一张1000×1000像素的图片可以看作一个100万维的向量,直接处理这样高维的数据在计算上是非常昂贵的。降维技术的目标是将高维数据压缩到低维空间,同时尽可能保留原始数据的重要信息。这就像我们用地图来代替真实的地球,虽然地图是平面的、二维的,但它保留了地理位置之间的相对关系,让我们能够在低维空间中理解和处理原本高维的数据。
还有一个重要的应用是异常检测。无监督学习可以帮助我们发现数据中的异常或异常行为。例如,在工业生产中,通过学习正常产品的特征分布,模型可以自动识别出与正常模式不符的缺陷产品。在网络安全领域,异常检测可以帮助发现可能的入侵行为。
生成模型是近年来无监督学习领域的一个热点。这类模型能够学习数据的分布,然后生成与原始数据相似的新样本。著名的生成对抗网络(GAN)就是这类模型的代表,它能够生成逼真的人脸图片、艺术作品,甚至根据文字描述生成对应的图像。变分自编码器(VAE)也是一类重要的生成模型,它在图像生成、数据压缩和表示学习等领域都有广泛应用。
无监督学习的一个显著优势是它不需要人工标注数据,这大大降低了数据准备的成本。更重要的是,它能够发现数据中人类可能未曾注意到的规律和结构,这在科学发现和知识探索中具有重要价值。但无监督学习通常比监督学习更具挑战性,因为没有明确的目标来指导学习过程,评估模型效果也更加困难。
强化学习:在试错中成长
强化学习代表了一种完全不同的学习范式,它模拟了生物体通过与环境交互来学习最优行为的过程。想象一下婴儿学习走路的过程:婴儿会尝试各种动作,有些动作帮助他保持平衡,他就记住多做这些动作;有些动作让他摔倒,他就避免这些动作。通过不断的尝试和反馈,婴儿最终学会了走路。强化学习正是采用类似的方式让智能体学习。
在强化学习中,智能体(agent)通过与环境进行交互来学习。智能体在每个时刻都会观察当前的环境状态,然后选择一个动作执行。环境会根据这个动作给出奖励(可能是正奖励也可能是负奖励),并转换到下一个状态。智能体的目标是学会在不同状态下选择能够获得最大长期累积奖励的动作。
强化学习的一个经典案例是AlphaGo。2016年,谷歌DeepMind开发的AlphaGo战胜了世界围棋冠军李世石,引发了全球关注。AlphaGo的训练就大量依赖强化学习。最初,AlphaGo通过监督学习从大量人类棋谱中学习基本的下棋策略。然后,它通过与自己进行大量的对弈(自我对弈),不断尝试新的策略,并根据胜负结果调整策略。这个过程使得AlphaGo能够发现许多人类棋手未曾使用过的创新走法,最终达到了超越所有人类棋手的水平。
机器人控制是强化学习的另一个重要应用领域。波士顿动力公司的机器人能够完成跑酷、跳跃等复杂动作,这些能力的训练很多都依赖于强化学习。通过在仿真环境中进行大量的试错学习,机器人能够学会保持平衡、适应不同地形等技能。
强化学习的核心挑战在于“延迟奖励”问题。在很多任务中,当前的动作可能不会立即产生明显的奖励,而是会影响很久之后的最终结果。例如,在下棋时,当前的落子决策可能要到几十步之后才能体现出好坏。智能体需要学会将最终的胜负结果“分配”到之前的一系列决策上,这是一个相当复杂的信用分配问题。
探索与利用的平衡也是强化学习面临的重要挑战。智能体需要一方面利用已知的好策略来获取尽可能高的奖励,另一方面也要尝试新的策略,看看是否有更好的选择。这个平衡问题在实际应用中非常重要:过度利用可能导致错过更好的策略,过度探索则可能导致学习效率低下。
三种范式的对比与协同
为了帮助读者更好地理解三种学习范式的区别,我们用一个表格来总结它们的主要特点:
| 特征 | 监督学习 | 无监督学习 | 强化学习 | |------|----------|------------|----------| | 数据类型 | 有标签的数据 | 无标签的数据 | 交互数据(状态-动作-奖励) | | 学习目标 | 预测给定输入的输出 | 发现数据内在结构 | 学习最优决策策略 | | 反馈类型 | 明确的正确答案 | 无明确反馈 | 延迟的奖励信号 | | 典型任务 | 分类、回归 | 聚类、降维、生成 | 游戏、机器人控制 | | 应用举例 | 图像识别、语音识别 | 客户分群、数据压缩 | AlphaGo、机器人控制 |
值得注意的是,虽然三种范式在概念上是独立的,但在实际应用中经常被组合使用。半监督学习结合了监督和无监督学习,在少量标注数据和大量未标注数据的情况下进行学习。自监督学习是一种特殊的无监督学习,它通过设计“伪标签”任务,让模型从数据本身学习有用的表示,近年来在自然语言处理和计算机视觉领域取得了巨大成功。模仿学习则结合了监督学习和强化学习,通过观察专家的行为来学习策略。
神经元模型:深度学习的基石
从生物神经元到人工神经元
深度学习的核心结构是人工神经网络,而神经网络的基本单元是人工神经元。要理解人工神经元,我们首先可以从生物神经元中获得灵感。
人脑是由大约860亿个神经元组成的复杂网络。每个神经元由细胞体、树突和轴突组成。树突负责接收来自其他神经元的信号,细胞体对这些信号进行处理,轴突则将处理后的信号传递给其他神经元。神经元之间通过突触进行连接,当一个神经元产生的信号强度超过一定阈值时,它就会向相连的神经元发送信号。
这种“阈值激活”的机制启发了早期的人工智能研究者。1943年,神经生理学家沃伦·麦卡洛克和数学家沃尔特·皮茨提出了第一个人工神经元模型——MCP模型。这个模型虽然非常简单,但它奠定了神经网络研究的基础。MCP模型的工作原理是:接收多个输入信号,每个信号都有相应的权重,将所有加权后的输入信号求和,如果总和超过某个阈值,则输出一个信号(通常用1表示),否则不输出信号(用0表示)。
用一个生活化的比喻来说明神经元的工作方式。想象你在决定是否去参加一个聚会。你会考虑几个因素:天气好不好、朋友会不会去、有没有好吃的、有没有有趣的活动。每个因素对你决策的影响程度不同,这就是权重。如果总的“积极性”超过某个心理阈值,你就决定去参加;否则就不去。这与人造神经元的运作方式非常相似。
神经元的数学表达
让我们用更加精确的数学语言来描述神经元的工作原理。假设神经元接收$n$个输入信号,分别记为$x_1, x_2, ..., x_n$。每个输入信号都有一个对应的权重$w_1, w_2, ..., w_n$,权重表示该输入对神经元输出的重要程度。所有输入的加权和为:
$$z = w_1 x_1 + w_2 x_2 + ... + w_n x_n + b$$
其中$b$是一个偏置项(bias),它可以理解为调整神经元激活容易程度的参数。当加权和$z$超过某个阈值时,神经元被激活并产生输出。
在人工神经网络中,我们通常使用一个激活函数来将加权和转换为神经元的输出。最简单的激活函数是单位阶跃函数(Heaviside函数),当输入大于0时输出1,否则输出0。但这种激活函数在数学上不方便处理,因此在实际应用中很少使用。
现在更常用的是一些连续、光滑的激活函数。Sigmoid函数是最经典的激活函数之一,它的数学表达式为:
$$\sigma(z) = \frac{1}{1 + e^{-z}}$$
Sigmoid函数将任意实数映射到(0,1)区间内,这使得输出可以解释为某种概率。它的形状呈S形,在z=0附近变化最为剧烈,而对于很大或很小的z,函数值趋于饱和。这个特性使得Sigmoid函数在早期的神经网络中得到了广泛应用,但它也存在梯度消失问题,这限制了网络的深度。
ReLU(Rectified Linear Unit)函数是近年来更受欢迎的激活函数,它的定义非常简单:
$$\text{ReLU}(z) = \max(0, z)$$
ReLU函数的优点是计算简单(在现代硬件上几乎可以瞬间计算),而且在正区间不会饱和,这使得基于ReLU的网络更容易训练。ReLU函数的图像是一条折线:对于负输入输出为0,对于正输入输出等于输入本身。这种“稀疏激活”的特性被认为更符合生物神经元的运作方式。
还有其他一些常用的激活函数,如tanh函数(将输出映射到(-1,1)区间)、Leaky ReLU(允许负区间有一点小的梯度)等。不同的激活函数适用于不同的场景,在实际应用中需要根据具体问题进行选择。
从神经元到神经网络
单个神经元的能力非常有限,它只能学习线性可分的问题。真正的力量来自于将大量神经元组织成网络结构。当我们把许多神经元按层连接起来时,就形成了神经网络。
典型的神经网络由三种类型的层组成:输入层、隐藏层和输出层。输入层负责接收原始数据,它的神经元数量通常由输入数据的维度决定。例如,在处理28×28像素的手写数字图像时,输入层可能有784个神经元(每个像素一个)。输出层负责产生最终的预测结果,它的神经元数量由任务的类别数决定。在十分类的手写数字识别任务中,输出层有10个神经元,每个神经元代表一个数字的预测概率。
隐藏层是夹在输入层和输出层之间的若干层,它们不直接与外界交互,“隐藏”这个名字正是由此而来。隐藏层的数量和每层的神经元数量是神经网络的重要超参数,它们决定了网络的容量和表达能力。有一个著名的“万能近似定理”指出,只要网络足够大,一个带有单层隐藏层的神经网络可以近似任何连续的函数。但这并不意味着单层隐藏层总是最好的选择——实际上,在实际应用中,多层隐藏层(深层网络)往往比单层网络更高效。
信息在神经网络中的传播过程称为前向传播。数据从输入层进入网络,经过每一层的加权求和和激活函数处理,逐步向前传递,最终在输出层产生结果。每一层的输出都是下一层的输入,这个过程类似于信息在大脑中的传递——每个神经元接收来自前一层神经元的信号,进行处理后传递给下一层。
神经网络之所以强大,关键在于它能够自动学习到数据的多层次表示。在处理图像时,靠近输入的层可能学习到边缘、纹理等低级特征,中间的层可能学习到眼睛、鼻子、耳朵等中级特征,而靠近输出的层则可能学习到完整的物体、人脸等高级特征。这种层次化的表示学习是深度学习取得成功的核心原因之一。
反向传播:训练神经网络的核心算法
为什么需要反向传播
神经网络的能力来源于它的参数——连接权重和偏置项。这些参数决定了网络如何处理输入、如何产生输出。在训练神经网络时,我们的目标是找到一组最优的参数,使得网络在给定任务上的表现尽可能好。
那么,如何衡量网络表现的好坏呢?我们需要一个函数来量化网络的预测与真实答案之间的差距,这个函数称为损失函数(或代价函数)。常见的损失函数包括均方误差(用于回归任务)和交叉熵(用于分类任务)。以均方误差为例,对于单个样本,它的定义为:
$$L = \frac{1}{2}(y - \hat{y})^2$$
其中$y$是真实值,$\hat{y}$是网络的预测值。损失越小,说明网络的预测越准确。
训练神经网络的目标就是找到使损失函数最小化的参数。这本质上是一个优化问题。在低维空间中,我们可以用解析方法求解;但神经网络的参数数量通常非常庞大(可能达到数百万甚至数十亿),无法用简单的解析方法求解