try ai
科普
编辑
分享
反馈
  • 感知机学习算法

感知机学习算法

SciencePedia玻尔百科
核心要点
  • 感知机通过一个简单的更新规则进行学习,仅在分类错误时调整其线性决策边界。
  • 对于线性可分的数据,感知机收敛定理保证了该算法将在有限步数内找到一个分离超平面。
  • 学习的难度取决于数据的几何结构,特别是数据半径与分离间隔的比率。
  • 感知机是一个基础模型,它直接启发了像支持向量机(SVM)这样的 modern 算法,并与物理学、神经科学和人工智能伦理学有着深刻的联系。

引言

感知机不仅仅是一种算法,它是人工智能历史上的一个奠基性故事。诞生于计算理论的萌芽时期,它代表了创造一种能从经验中学习的机器的首次正式尝试之一。其核心解决了一个根本问题:机器如何能自动发现一个规则来区分两类物体?本文将揭示这个开创性模型的优雅简洁性和惊人的深度。

我们将踏上一段跨越两大章节的旅程。在​​原理与机制​​中,我们将剖析感知机的核心学习规则,探索其更新的直观几何意义,以及保证其在理想条件下成功的感知机收敛定理的数学优雅性。我们还将审视其局限性,以及它如何成为更高级模型(如支持向量机)的概念基石。接着,在​​应用与跨学科联系​​中,我们将揭示感知机經久不衰的遗产。我们将看到这个经典算法如何被改造以应对人工智能中的现代挑战——从非线性数据和主动学习到安全性和公平性——并发现它与物理学、神经科学等不同领域的深刻且意想不到的联系。

原理与机制

要真正理解感知机,我们必须超越“一台只会说‘是’或‘否’的机器”这一简单印象。我们必须踏上一段旅程,深入数据的几何世界、简单规则的优雅之美,以及从中涌现出的惊人保证。这是一个始于沙滩上的一条线,并止步于现代机器学习门阶的故事。

沙滩上的一条线:学习规则

想象一下,你有一张纸,上面散布着红点和蓝点。你的目标是画一条直线,将这两种颜色分开。这条线就是我们的​​决策边界​​。用机器学习的语言来说,这条线是一个​​超平面​​,而这些点是我们的数据点。在线一侧的点被分类为红色,另一侧的点被分类为蓝色。

感知机就是一种寻找这条线的算法。它从随机画一条线开始。然后,它逐一查看这些点。如果发现一个点在错误的一侧——比如,一个红点在“蓝色”区域——它就会对这条线做一个小小的调整。但具体来说,它究竟是如何调整的呢?

规则惊人地简单和直观。如果一个点被错误分类,算法会“推动”边界线,使得这个特定的点更有可能被划分到正确的一侧。让我们用权重向量 w\mathbf{w}w(垂直于直线)来表示我们的线,用向量 x\mathbf{x}x 来表示我们的数据点。如果点 (x,y)(\mathbf{x}, y)(x,y) 被错误分类(其中 y=+1y=+1y=+1 代表红色,y=−1y=-1y=−1 代表蓝色),更新规则是:

wnew=wold+yx\mathbf{w}_{\text{new}} = \mathbf{w}_{\text{old}} + y\mathbf{x}wnew​=wold​+yx

想一想这是如何运作的。如果一个红点(y=+1y=+1y=+1)被错误分类,我们将它的向量 x\mathbf{x}x 加到 w\mathbf{w}w 上。这会使向量 w\mathbf{w}w 旋转,从而与 x\mathbf{x}x 更加对齐,有效地将决策边界从 x\mathbf{x}x 处拉开,移向另一侧。如果一个蓝点(y=−1y=-1y=−1)被错误分类,我们从 w\mathbf{w}w 中减去它的向量 x\mathbf{x}x,将边界推向相反的方向。这是一种通过纠正错误来进行学习的非常直接的形式。这个简单的几何规则不仅仅是一个巧妙的技巧;它可以被正式推导为在一种仅计算模型错误的“损失函数”上下降的方法。

高维度的技巧

在我们简单的设想中有一个小问题。更新规则 wnew=wold+yx\mathbf{w}_{\text{new}} = \mathbf{w}_{\text{old}} + y\mathbf{x}wnew​=wold​+yx 描述了一条必须穿过我们坐标系原点的直线(或超平面)。如果最佳的分离线并不穿过原点呢?我们需要能够上下移动这条线,这对应于增加一个​​偏置​​项 bbb。现在我们的决策基于 wTx+b\mathbf{w}^T \mathbf{x} + bwTx+b 的符号。

分别处理 w\mathbf{w}w 和 bbb 有点笨拙。在这里,数学家们发现了一个非常优雅的技巧。我们不使用原始的 ddd 维空间,而是进入一个 (d+1)(d+1)(d+1) 维空间。对于每个数据点 x\mathbf{x}x,我们通过简单地在其后附加数字 1 来创建一个新的​​增广特征向量​​:x′=(x,1)\mathbf{x}' = (\mathbf{x}, 1)x′=(x,1)。然后,我们通过将偏置 bbb 附加到权重向量 w\mathbf{w}w 上来创建一个​​增广权重向量​​:w′=(w,b)\mathbf{w}' = (\mathbf{w}, b)w′=(w,b)。

现在看看当我们计算它们的点积时会发生什么:

(w′)Tx′=wTx+b⋅1=wTx+b(\mathbf{w}')^T \mathbf{x}' = \mathbf{w}^T \mathbf{x} + b \cdot 1 = \mathbf{w}^T \mathbf{x} + b(w′)Tx′=wTx+b⋅1=wTx+b

这和之前的表达式完全一样!通过增加一个维度,我们将偏置项整合进了权重向量中。我们在 ddd 维空间中更复杂的仿射分离问题,变成了一个在 (d+1)(d+1)(d+1) 维空间中更简单的齐次问题,其中分离超平面现在保证穿过这个新的增广空间的原点。这是一个绝佳的例子,说明改变视角可以简化问题,这是物理学和数学中一个常见的主题。我们为更简单的穿过原点的情况所建立的所有学习规则和几何直觉,现在都普遍适用了。

感知机的承诺:收敛性证明

所以,我们有了一个简单的规则,每当犯错时就推动一下直线。我们一遍又一遍地重复这个过程。但这引发了一个关键问题:这个过程会停止吗?如果我们不断推动直线,它最终会稳定下来,还是会永远晃动,无休止地追逐错误分类的点?

一项里程碑式的结果证明,如果数据是​​线性可分的​​——也就是说,如果一条完美的分离线确实存在——那么感知机算法保证会在有限的步数内找到一条。这就是​​感知机收敛定理​​,其证明是简单而有力推理的杰作。

该证明讲述了一个关于两个相互制约的量的故事。假设算法停止前总共犯了 UUU 次错误。

  1. ​​权重向量的增长是有限的。​​ 每当我们更新权重向量 w\mathbf{w}w 时,我们都会向其添加一个数据点向量。由于我们数据点的大小(或范数)是有限的——假设最大范数为 RRR——我们的权重向量的平方范数不会无限增长。在 UUU 次错误之后,最终权重向量的平方范数 ∥wU∥2\|\mathbf{w}_U\|^2∥wU​∥2 不会超过 UR2U R^2UR2。这就像登山,你知道每一步的最大尺寸。

  2. ​​朝向“真实”解的进展是有保证的。​​ 因为我们假设数据是可分的,那么必定存在某个完美的(尽管我们不知道)分离超平面,我们称之为 u\mathbf{u}u。​​间隔​​ γ\gammaγ 是衡量分离“难易”程度的指标;它是从最近点到这个完美超平面的距离。该证明的魔力在于,它表明感知机每犯一个错误,其当前权重向量 w\mathbf{w}w 与完美解 u\mathbf{u}u 的点积至少会增加这个间隔 γ\gammaγ。因此,在 UUU 次错误之后,这个对齐度 wU⋅u\mathbf{w}_U \cdot \mathbf{u}wU​⋅u 必须至少为 UγU\gammaUγ。我们保证了在每次犯错时都会向理想解稳步前进。

关键点来了。线性代数中的柯西-施瓦茨不等式告诉我们 (wU⋅u)2≤∥wU∥2∥u∥2(\mathbf{w}_U \cdot \mathbf{u})^2 \le \|\mathbf{w}_U\|^2 \|\mathbf{u}\|^2(wU​⋅u)2≤∥wU​∥2∥u∥2。结合我们的两个界限,我们得到:

(Uγ)2≤(wU⋅u)2≤∥wU∥2∥u∥2≤(UR2)(1)2(U\gamma)^2 \le (\mathbf{w}_U \cdot \mathbf{u})^2 \le \|\mathbf{w}_U\|^2 \|\mathbf{u}\|^2 \le (U R^2) (1)^2(Uγ)2≤(wU​⋅u)2≤∥wU​∥2∥u∥2≤(UR2)(1)2

简化后得到 U2γ2≤UR2U^2 \gamma^2 \le U R^2U2γ2≤UR2,对于 U>0U > 0U>0,我们得到了这个著名的结果:

U≤(Rγ)2U \le \left(\frac{R}{\gamma}\right)^2U≤(γR​)2

总错误次数是有界的!一个保证取得进展(UγU\gammaUγ)但其状态大小受限(UR\sqrt{U}RU​R)的过程不可能永远持续下去。它必须停止。这个论证的简洁性和确定性正是其美妙之处。

学习的几何学:间隔、尺度和对称性

错误上限 U≤(R/γ)2U \le (R/\gamma)^2U≤(R/γ)2 不仅仅是一个公式;它讲述了一个关于问题几何结构的故事。它告诉我们,学习的难度由两个数字决定:数据的半径 RRR 和分离的间隔 γ\gammaγ。

​​间隔​​为王。一个两类之间有巨大、宽裕间隙(大的 γ\gammaγ)的数据集是容易学习的,算法会在很少的步骤内收敛。一个两类几乎接触(极小的 γ\gammaγ)的数据集则很难学习,感知机可能需要许多次更新才能找到那条狭窄的分离通道。

真正迷人的是隐藏在这个过程中的对称性。如果我们把整个数据集的所有点都缩放100倍会怎样?或者缩放0.01倍?直观上看,问题似乎是一样的。事实也正是如此!当我们按因子 ccc 缩放数据时,半径 RRR 变为 cRcRcR,间隔 γ\gammaγ 变为 cγc\gammacγ。看看错误上限会发生什么:(cR/cγ)2=(R/γ)2(cR / c\gamma)^2 = (R/\gamma)^2(cR/cγ)2=(R/γ)2。这个上限是不变的!更深刻的是,算法实际犯错的次数也完全不变。这是因为感知机做出的决策序列仅取决于 wTx\mathbf{w}^T \mathbf{x}wTx 的符号,而符号不受正数缩放的影响。学习路径的几何结构是完全相同的。

同样,旋转或反射整个数据集也不会改变其可分性或学习难度,因为这些​​正交变换​​保留了距离和间隔。然而,其他变换,比如通过将数据投影到低维空间来“压扁”数据,可能是灾难性的。一个完美可分的数据集可能会变得难以分离,这表明线性可分性是数据几何结构的一个脆弱属性。

感知机的现代遗产:从直觉到优化

诞生于1950年代的感知机算法,可能看起来像是一个历史遗物。但它是当今一些最强大、最广泛使用的算法的直系祖先,其中最著名的是​​支持向量机(SVM)​​。当我们用现代优化语言重新构建感知机时,这种联系就显现出来了。

感知机的更新规则,正是将一种称为​​随机梯度下降(SGD)​​的优化技术应用于一个非常简单的损失函数——通常称为“感知机损失”——所得到的结果。这是一个深刻的认识,它将直观的几何图像与现代机器学习中基于微积分的正式世界联系起来。

故事还有更精彩的部分。如果你采用感知机损失,并做一个微小的改动——坚持要求点不仅要位于边界的正确一侧,而且要距离边界至少1个单位的间隔——你就会得到一个新的损失函数,称为​​合页损失(hinge loss)​​。在合页损失上使用SGD,就产生了SVM。

感知机只要点被正确分类(y(wTx)>0y(\mathbf{w}^T \mathbf{x}) > 0y(wTx)>0)就满意了,而SVM则更为挑剔。它会惩罚那些被正确分类但位于间隔内的点(0y(wTx)10 y(\mathbf{w}^T \mathbf{x}) 10y(wTx)1)。仅仅正确是不够的;SVM希望分类器能够自信地正确。这个从零间隔到一间隔要求的简单改变,正是赋予SVM其著名的鲁棒性和泛化能力的原因。感知机不仅仅是一个前辈;它是一个强大机器学习家族的本质上的“零阶”近似。

当承诺被打破:与噪声数据共存

收敛保证是美好的,但它建立在一个巨大的假设之上:数据是完美的线性可分。真实世界的数据很少如此干净。更多时候,数据是嘈雜的,类别之间存在重叠,没有任何一条直线能实现完美分离。

那么感知机会怎么做呢?收敛证明不再成立,实际上,算法的行为可能会发生巨大变化。它可能永远找不到一个稳定的解。相反,它可能会陷入一个​​极限环​​,无休止地重复一系列更新,试图对几个不可能的点进行分类,导致决策边界永远振荡。

但即便是这种“失败”也富有启发性。它让我们了解了我们模型的局限性,并激励我们去寻找更鲁棒的算法。例如,我们可以使用“口袋算法”,即我们把迄今为止看到的最好的超平面放在“口袋”里,最后再把它拿出来。或者我们可以尝试通过平均循环内的权重并从那里重新开始来跳出循环。最重要的是,这种“硬间隔”感知机的失败,催生了像SVM这样的“软间隔”分类器,它们被明确设计用来通过优雅地忽略少数离群点来找到一个“足够好”的超 hyperplane。因此,感知机的故事是一个完整的科学故事:它是一个简单的想法,有其威力的优美证明,对其局限性的清晰理解,以及一条直通我们今天使用的更强大、更鲁棒工具的传承路线。

应用与跨学科联系

我们已经花了一些时间来理解感知机的齿轮和杠杆。我们已经看到了它那优美简洁的学习规则:当你犯错时,只需将权重向正确的方向稍作调整以纠正那个错误。这是一个极为优雅的想法。但它仅仅是一个历史上的奇珍异宝吗?一个来自人工智能黎明时期的玩具模型吗?

答案或许令人惊讶,那就是这个简单的思想种子至今仍然充满活力。在本章中,我们将踏上一段旅程,看看这个基本概念如何绽放成一个充满强大现代应用的丰富花园,并与其他科学分支建立起深刻、意想不到的联系。我们将看到,感知机不仅仅是一种算法;它是一面透镜,通过它我们可以理解学习本身的本质。

从简单的线条到强大的引擎:为真实世界改造感知机

教科书中干净、完美可分的数据集在自然界中是稀有的。真实世界是一个混乱的地方,充满了噪声、模糊性和令人抓狂的复杂性。如果我们简单的感知机要想派上用场,它必须学会驾驭这个混乱的现实。

例如,当数据根本無法用一条线分开时会发生什么?正如我们从著名的XOR问题中看到的那样,感知机学习规则不能保证收敛。权重向量会在徒劳的舞蹈中挣扎,循环遍历不同的位置却永远找不到安宁。我们就此放弃吗?绝非如此。我们可以构建一个更务实的机器。想象一下,当感知机在其狂热的搜索中循环时,我们保留一个单独的“口袋”,用于存放它迄今为止找到的最佳权重向量——那个在训练数据上犯错最少的向量。即使算法永不收敛,我们也可以在一段时间后停止它,然后从我们的口袋里拿出最好的解决方案。这种“口袋感知机”,以及一个类似的想法叫做“平均感知机”,提供了一种优雅的方式来找到一个相当不错的线性分离器,即使完美的分离器不存在——这在处理噪声数据时是常见的情景。

真实世界数据的另一个麻烦是离群点的存在。想象一个在很大程度上表现良好且易于分离的数据集,但包含几个位置极其偏僻的点。感知机的更新规则 w←w+yx\mathbf{w} \leftarrow \mathbf{w} + y \mathbf{x}w←w+yx 使得更新的大小与输入向量 x\mathbf{x}x 的大小成正比。一个范数非常大的被错误分类的离群点,可能会导致一次巨大的、灾难性的更新,将决策边界远远地抛离一个原本不错的位置。这可能会破坏整个学习过程的稳定性,导致一连串新的错误。我们可以用简单而优雅的修正来驯服这种“离群点的暴政”。一种方法是“裁剪”更新:如果来自点 x\mathbf{x}x 的更新过大,我们只需将其缩小到一个最大允许的大小。另一种可能更具原则性的方法是使用“鲁棒归一化”来预处理数据。我们可以计算一个鲁棒的数据点典型尺寸度量(如范数的中位数),并将任何过大的点缩小到这个典型尺寸。这两种策略都防止了任何单个数据点对学习过程产生过大的影响,使算法更加稳定和鲁棒。

然而,最大的挑战不是噪声或离群点,而是复杂性。世界往往是非线性的。典型的例子是XOR问题,其中没有任何一条直线可以分开两个类别。在这里,感知机似乎彻底失败了。但这一失败揭示了整个机器学习中最美丽的思想之一:如果你无法在当前空间解决问题,那就跳到更高维的空间去!这就是“核技巧”的精髓。这是一招令人惊叹的数学障眼法。我们可以定义一个“核函数”,在我们简单的二维空间中,它根据两个点计算一个值。然而,这个函数的行为方式与它先将这两个点映射到一个更高维的特征空间,然后再计算它们之间的点积完全一样。

通过重写感知机算法,使其仅依赖于这些点积(我们可以用我们廉价的核函数来计算),我们就可以在这个不可见的高维空间中训练一个线性分离器。在那个空间里,像XOR这样的问题,在二维空间中是一团乱麻,可能会变得微不足道地可分。核化的感知机可以在原始空间中学到极其复杂、非线性的决策边界,而所有这些操作都只是在高维特征空间中进行线性运算——一个它甚至从未需要显式构建的空间 [@problemid:3183909]。这是感知机超越其线性起源的一次飞跃,这一飞跃将其与支持向量机等强大的现代算法直接联系起来。

感知机在现代世界:智能、公平与安全

有了这些增强功能,感知机已准备好面对现代人工智能的挑战,这些挑战远不止于画线。

考虑信息的成本。在许多现实世界的问题中,从未标记的诊断到地质调查,未标记的数据很便宜,但请专家提供标签却极其昂贵。我们必须标记所有东西吗?或者我们的学习算法可以更聪明些?这就引出了​​主动学习​​的思想。主动学习器不是被动地接受每个标记好的样本,而是检查未标记的数据点,并策略性地选择要请求标签的数据点。信息量最大的点通常是模型最不确定的那些点——那些最接近其当前决策边界的点。通过将其“好奇心”集中在这些模棱两可的点上,主动感知机可以用比被动学习器少得多的昂贵标签达到目标性能水平。这就像是背诵教科书和与老师交谈的区别,后者只问最有见地的问题。

在我们相互连接的世界里,人工智能系统也是攻击的目标。想象一下,一个垃圾邮件过滤器可以被对电子邮件的几乎看不见的更改所欺骗。这就是​​对抗性鲁棒性​​的领域。攻击者可以拿一个合法的输入,并在一个预算 ϵ\epsilonϵ 内对其进行微小的扰动,以欺骗我们的分类器。为了防御这一点,我们可以训练我们的感知机不仅要正确分类训练点,还要对这些攻击具有鲁棒性。训练规则被修改为:触发更新的条件不是点本身被错误分类,而是在任何允许的扰动下,该点出现了最坏可能的分类。为了找到这种最坏情况,我们必须在每一步解决一个小型的优化问题。对于一个 ℓ2\ell_2ℓ2​-范数扰动预算,这个最坏情况下的间隔结果出人意料地简洁:y(w⊤x)−ϵ∥w∥2y(\mathbf{w}^\top\mathbf{x}) - \epsilon \|\mathbf{w}\|_2y(w⊤x)−ϵ∥w∥2​。训练一个感知机来保持这个鲁棒间隔为正,会产生一个对对抗性攻击具有显著更强韧性的分类器。这就像一个武术家不仅通过练习套路来训练,还通过预测和防御对手最坏可能的招式来训练。

也许最紧迫的现代挑战是确保我们的算法是公平的。一个用于预测贷款违约或招聘成功的模型可能会无意中学习到历史数据中存在的偏见,导致它歧视某些人口群体。简单的感知机可以被改造以带着良知学习。我们可以将公平性要求编码为对权重向量 w\mathbf{w}w 的数学约束。例如,我们可以要求分配给敏感属性(如种族或性别)的权重受到限制,使用形如 c⊤w≤κ\mathbf{c}^\top \mathbf{w} \le \kappac⊤w≤κ 的线性约束。学习过程于是变成了一场精妙的舞蹈。在每次错误分类时,我们采取标准的感知机步骤。如果这一步使我们超出了权重空间的“公平”区域,我们就将权重向量投影回满足公平性约束的最近点。通过改变约束 κ\kappaκ 的严格程度,我们可以描绘出一条​​帕累托前沿​​——一条准确性与公平性之间的基本权衡曲线。这向我们展示了公平性在准确性方面的“代价”,并允许我们就在希望我们的算法构建什么样的社会方面做出有原则的选择。感知机不仅成为一种预测工具,也成为一种探索和编码我们价值观的工具。

感知机作为一个统一的思想:通往其他科学的桥梁

一个基本思想的真正美妙之处,往往通过它所建立的意想不到的联系而显现。感知机不是一个孤岛;它是一座连接计算机科学与物理学、神经科学以及信息几何学本身的桥梁。

感知机找到一个分离超平面。但它是最好的那个吗?这个问题引导我们走向​​支持向量机(SVM)​​,这是现代机器学习的基石。SVM不满足于任何解;它寻求那个与最近数据点有最大可能“安全间隔”的唯一超平面。这是一个最优且鲁棒的解。相比之下,感知机更简单,其最终状态取决于它遍历数据的路径。人们可能认为这两者相去甚远。然而,在数据完美对称的条件下,简单的感知机,沿着其朴素的纠错路径,可以收敛到与复杂得多的SVM所找到的完全相同的最优超平面。感知机是谦逊的祖先,其基于间隔的分离精神在其更复杂的后代中得以延续。

当感知机面临像XOR问题这样的不可能任务,其权重挣扎不休,无法收敛时,会发生什么?物理学家看到这个现象,会认出一种熟悉的现象:​​挫折(frustration)​​。这个术语用来描述像​​自旋玻璃(spin glass)​​这样的系统,这是一种奇怪的磁性材料,其中竞争性的原子相互作用(一些想要对齐自旋,另一些想要反向对齐)阻止系统稳定在一个单一、简单的低能“基态”。取而代之的是,它有一个崎岖的能量景观,有许多不同但同样好(但不完美)的构型。在非可分问题上的感知机是一个完美的类比。每个数据点都是一个约束。当它们不能全部被满足时,系统就受挫了。系统的“能量”是错误分类的数量,学习过程就是试图找到基态。对于XOR问题,基态不是一个完美的零能量状态,而是一个“简并”态,其最小能量为一个错误分类,并且可以通过多种不同方式实现。感知机的失败不仅仅是一个程序错误;它是深刻的物理学。

感知机的旅程甚至将我们带回其最初的灵感:大脑。Rosenblatt 最初的想法是一个关于神经元如何学习的模型。神经生物学中“一起放电的细胞连接在一起”(cells that fire together, wire together)的原则被称为​​赫布学习(Hebbian learning)​​。感知机更新规则 Δw∝yx\Delta \mathbf{w} \propto y\mathbf{x}Δw∝yx可以被看作是这种学习的一种复杂形式。在这里,x\mathbf{x}x 代表突触前神经元的放电(“一起放电”)。标签 yyy,代表正确或错误的结果,可以被认为是一个全局广播的“奖励”或“教学”信号,或许由多巴胺等神经调节剂携带。这个信号门控着可塑性,决定了共同放电是加强还是削弱连接。这个框架优美地将抽象算法与生物学的物理约束(如戴尔原则,即一个神经元只能是兴奋性的或抑制性的,这要求我们使用独立的抑制性神经元群来模拟负权重)协调起来。

最后,感知机提醒我们,学习是算法与数据几何结构之间的一场舞蹈。感知机收敛的速度关键取决于数据的属性。如果输入特征高度相关,它们提供的是冗余、重叠的信息。这种“糟糕的几何结构”会迷惑学习算法,导致它走向解的路径迂回曲折、效率低下。然而,如果我们首先对数据进行预处理以去除特征间的相关性——例如,通过使用像格拉姆-施密特过程这样的线性代数技术使它们正交化——学习路径就会变得直接得多,收敛也会在少得多的步骤内实现。问题的结构决定了解决方案的难度。

从一个简单的画线工具到一个探索公平性的工具,从一个玩具模型到一个呼应受挫物理学和类脑学习的回响,感知机展示了一个简单而美丽的思想持久的力量。它证明了在科学中,最简单的规则往往能带来最丰富的成果。