《基于模型的软件开发》——3.1 泛化

简介:

本节书摘来自华章计算机《基于模型的软件开发》一书中的第3章,第3.1节,作者:[美]H. S.莱曼(H. S. Lahman)著, 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.1 泛化

泛化是对集合论的一种基本应用。回忆一下,在第2章中,我们将类定义为一个实体集合,这些实体都具有相同的属性。集合论中有子集的概念,如图3-1所示。该图称为维恩图,其中的点表示集合的成员,而实线标识出集合的边界。图3-1是一个有关银行账户的维恩图示例。图中的点表示银行客户所拥有的独立银行账户。在这个例子中,银行账户必须是支票账户或者储蓄账户,而不能既是支票账户又是储蓄账户。方框表示了各类银行账户的边界:外层的方框表示的是所有银行账户的集合,称为超集,内部的方框表示的是支票账户和储蓄账户两个子集。我们还可以在其中增加其他的子集,例如个人退休金账户。
image

图3-1 一个银行账户维恩图的例子:账户的全集可以划分为特定的独立的组——支票账户和储蓄账户
每一个点表示了所在子集边界之内的一个唯一可标识的成员。在这个例子中,账户通过账户拥有者和账户类型的组合来进行唯一标识。注意,同一名客户同时拥有支票账户和存储账户的可能性是存在的,因此我们不能仅仅通过用户信息来标识两种账户。
我们来看在支票账户子集中某个给定的点,这个点同样也包含在整个账户集合中。因此可以说这个实体是支票集合的成员,同时也是账户集合的成员。如果我们用“A”来概括表示“集合A的成员”,用“B”来概括表示“集合B的成员”,那么当只有一个点,并且它同时包含在两个集合之中时,我们可以认为B是A。在OOA/D的文献中可以看到泛化是一种“是一个”的关系。这即是它的含义。在维恩图中,任何一个给定的点都表示了单个包含在多个集合中的实体。因此我们可以说该实体是B,也是A。
第2章还提到了类是通过一组职责来定义的。在维恩图中,我们可以很容易地标记单独的集合,但是如果同时尝试在图中枚举定义该特定集合的那些特定职责,将会使图变得很混乱。在面向对象范式中,我们更关心这些职责,因为我们需要通过它们来解决手头的问题。因此我们需要另外一种表示法,如图3-2所示,每一个方框表示与图3-1中相同的集合,但是在集合中枚举属性来替代图3-2中那些实际的点。
image

图3-2 账户子集的面向对象泛化,使用不同的属性定义每个集合。账户的属性被每一位成员共享,支票子集定义了同时拥有“透支账户”属性的账户成员构成的子集。需要注意的是,储蓄账户包括了所有没有其他属性的账户成员
连接类的实线表示了一种泛化关系,其中账户是全集(看做根超类),而支票、储蓄和个人退休金账户是子集类,只包括了账户集合成员的一个子集。维恩图中的点没有必要表现出来,因为特定的连接符已经告诉了我们,我们在看的就是一张维恩图,同时我们也可以推断出子类中的成员也是其父超类中的成员。
请注意,我们已经识别出的属性定义了账户集合。如何协调这些属性与我们用来定义子集的属性呢?很简单。泛化(树状维恩图)中的每一个实体都是账户集合的成员。由于账户集合由其所有成员的共享属性所定义,因此账户集合中的所有实体必须具有这些属性。同样,支票集合中的成员必须具有支票集合定义的属性,还要具有账户集合为其成员定义的属性。支票集合中的成员同时也是账户集合中的成员,因此它必须具有两个集合定义的全部属性。
泛化这个词语来自以下概念:账户集定义了其所有后代子集合中所有实体一般或共同的属性。在OO的上下文中,另一种常见的术语为专业化。专业化捕获账户集合中拥有独特的、特殊的属性的子集,这些属性不是账户集中所有成员都具有的。你现在了解了有关OO泛化的所有内容,这是有关集合和子集合的一种非常简单的组织结构,在UML中表示为树形的维恩图。
在OOA/D文献中,泛化难以捉摸的地方在于它在问题域抽象中的解释。例如,你可能发现在上述解释中我们没有提及“对象”这个词。因为在抽象为一个OO的解决方案之前,泛化必须存在于问题域的实体之间。一种常见的OOA错误是,在解决方案中使用泛化仅仅是因为它很优雅,而且使得建模更加简单。第12章将更加详细地继续讨论这个话题。

相关文章
TransferTOD:利用LLM解决TOD系统在域外场景槽位难以泛化的问题
任务型对话系统旨在高效处理任务导向的对话,如何利用任务型对话系统准确、高效、合理地完成信息采集的工作一直是一项关键且具有挑战性的任务。
137 18
增强深度学习模型的可解释性和泛化能力的方法研究
【8月更文第15天】在深度学习领域,模型的准确率和预测能力是衡量模型好坏的重要指标。然而,随着模型复杂度的增加,它们往往变得越来越难以理解,这限制了模型在某些关键领域的应用,例如医疗诊断、金融风险评估等。本文将探讨如何通过几种方法来增强深度学习模型的可解释性,同时保持或提高模型的泛化能力。
1005 2
吴恩达团队新作:多模态多样本上下文学习,无需微调快速适应新任务
【6月更文挑战第27天】吴恩达团队提出多模态模型新方法—多样本上下文学习,允许模型无需微调即可快速适应新任务。通过扩大上下文窗口至2000个示例,模型性能在图像分类等任务上显著提升,同时研究了批处理优化以减少计算成本。尽管面临计算开销和数据需求的挑战,但该方法为AI的高效泛化开辟了新途径。[论文链接:https://arxiv.org/abs/2405.09798]
188 5
深入探讨模型泛化能力的概念、重要性以及如何通过交叉验证来有效评估和提升模型的泛化能力
【6月更文挑战第13天】本文探讨了机器学习中模型泛化能力的重要性,它是模型对未知数据预测的准确性。过拟合和欠拟合影响泛化能力,而交叉验证是评估模型性能的有效工具。通过K折交叉验证等方法,可以发现并优化模型,提高泛化能力。建议包括调整模型参数、选择合适模型、数据预处理、特征选择和集成学习。Python中可利用scikit-learn的cross_val_score函数进行交叉验证。
771 7
模型训练的通用性
模型训练的通用性指模型在不同任务、领域或数据集上的适应能力。通过预训练模型、迁移学习、多任务学习、任务无关特征提取、灵活的模型架构、正则化、数据增强、超参数调优等方法,可以提升模型的通用性和泛化能力,使其在新任务上表现更佳。
|
7月前
MAGICORE:基于多代理迭代的粗到细精炼框架,提升大语言模型推理质量
MAGICORE是一种多代理迭代框架,旨在改进大语言模型(LLM)的推理能力。该框架通过将问题分类为简单或困难,并分别为其应用粗粒度聚合或细粒度精炼,有效避免了过度精炼、错误定位及精炼不足等问题。MAGICORE包含Solver、Reviewer和Refiner三个角色,结合结果和过程奖励模型,实现有针对性的反馈和迭代精炼。实验结果显示,MAGICORE在多个数据集和模型上显著优于现有的聚合和精炼方法,提升了推理准确性和样本效率。
239 3
MAGICORE:基于多代理迭代的粗到细精炼框架,提升大语言模型推理质量
深度学习之稳健的模型推理与不确定性建模
基于深度学习的稳健模型推理与不确定性建模,是现代AI系统中至关重要的研究方向。随着深度学习在各类应用中的成功,如何保证模型在面对未知或不确定性输入时仍能做出稳健的推理,并能够量化这种不确定性,成为关键问题。稳健性与不确定性建模可以提高模型的安全性、可靠性,尤其在自动驾驶、医疗诊断等高风险领域。
131 0
全面超越DPO:陈丹琦团队提出简单偏好优化SimPO,还炼出最强8B开源模型
【6月更文挑战第4天】普林斯顿大学陈丹琦团队推出SimPO,一种超越DPO的强化学习优化算法,旨在优化大型语言模型以符合人类价值观。SimPO通过序列平均对数概率作为奖励,提高计算效率并减少对参考模型的依赖。在多基准测试中,SimPO表现优秀,尤其在AlpacaEval 2和Arena-Hard上大幅超越现有方法。团队还基于Llama3-8B-Instruct创建了最强8B开源模型,推动AI技术发展。尽管存在超参数敏感性等挑战,SimPO仍为AI优化提供新途径。[论文链接](https://arxiv.org/pdf/2405.14734)
143 1
大模型开发:描述集成学习以及它如何工作。
【4月更文挑战第24天】集成学习通过结合多个模型预测提升整体性能,减少偏差和方差。主要分为Bagging和Boosting两类。Bagging中,模型并行在数据子集上训练,如随机森林,通过投票或平均聚合预测。Boosting则顺序训练模型,聚焦纠正前一个模型的错误,如AdaBoost,加权组合所有模型预测。Stacking则是用基础模型的输出训练新模型。关键在于模型多样性以捕捉数据不同模式。集成学习广泛应用于分类、回归等任务,能提高泛化能力,降低过拟合风险。
92 3
大模型开发:描述模型可解释性的重要性以及如何实现它。
模型可解释性在AI和机器学习中至关重要,尤其在金融风控等领域,它关乎信任、公平性和法规合规。通过建立信任、发现偏见、排查错误和满足法规要求,可解释性促进了模型的改进和社会接受度。研究者采用简单模型、局部和全局解释方法、模型可视化及原型/反例等策略提升模型透明度。这是一项结合算法、专业知识和伦理的跨学科挑战。
505 1
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等