当前位置: 首页 > article >正文

【论文阅读】基于客户端数据子空间主角度的聚类联邦学习分布相似性高效识别

Efficient distribution similarity identification in clustered federated learning via principal angles between client data subspaces -- 基于客户端数据子空间主角度的聚类联邦学习分布相似性高效识别

  • 论文来源
  • TLDR
  • 背景与问题
    • 两个子空间之间的主角(Principal angles)
    • 利用主角捕捉数据/特征之间的相似性
  • 方法展开
  • 对比试验
    • 实验结果
  • 总结
    • 灵活性
    • 优点
    • 缺点

论文来源

名称Efficient distribution similarity identification in clustered federated learning via principal angles between client data subspaces
会议AAAI 2023
作者Saeed Vahidian;Mahdi Morafah;Weijia Wang;Vyacheslav Kungurtsev;Chen Chen;Mubarak Shah;Bill Lin
DOIhttps://doi.org/10.1609/aaai.v37i8.26197

TLDR

本文提出PACFL(Principal Angles analysis for Clustered Federated Learning)方法:

  • 直接识别分布相似性: PACFL 的核心思想是直接、高效地识别客户端之间的分布相似性,而不是在训练过程中间接学习。
  • 客户端操作:
    • 每个客户端对其 本地数据 执行一次截断奇异值分解 (Truncated SVD)。
    • 提取少量 (例如 2-5 个) 最重要的左奇异向量 (principal vectors)。这些向量构成其数据子空间的一个,并作为其数据分布的“签名 (signature)”,简洁地捕捉了数据的主要特征。
    • 客户端将这些主向量发送给服务器。由于只发送少量向量,而不是原始数据或完整的模型,因此保护了数据隐私,并且通信开销小。
  • 服务器操作:
    • 服务器收集所有客户端的主向量。
    • 通过计算不同客户端数据子空间之间的主角度 (principal angles) 来构建一个相似性/邻近度矩阵 (proximity matrix)。两个子空间的主角度越小,它们的分布就越相似。论文中提到了两种计算方式:最小主角度 (Eq. 2) 和主角度之和 (Eq. 3,被认为更鲁棒)。
    • 基于这个邻近度矩阵,服务器使用聚类算法(如层次聚类 Agglomerative Hierarchical Clustering, HC)将客户端划分到不同的簇中。这个过程是 ==一次性 (one-shot) == 的,在联邦训练开始之前完成。
  • 联邦训练:
    • 一旦簇形成,服务器为每个簇初始化一个模型。
    • 在每一轮中,客户端下载其所属簇的模型,进行本地训练,并将更新后的模型(或梯度)发送回服务器。
    • 服务器对同一簇内的客户端模型进行聚合。
  • 处理新客户端 (Proximity Matrix Extension, PME - Algorithm 2):
    • 新客户端同样计算并发送其主向量。
    • 服务器使用 PME 算法高效地扩展现有的邻近度矩阵和主向量集合,而无需从头重新计算所有客户端的相似性。
    • 然后,可以重新运行 HC 或基于现有簇将新客户端分配到最合适的簇。

背景与问题

  1. 联邦学习 (FL) 允许在不共享本地数据的情况下协同训练模型。
  2. 当客户端数据存在显著异构性 (Non-IID) 时,单一全局模型可能效果不佳。
  3. 聚类联邦学习 (CFL) 通过将具有相似数据分布的客户端分组到簇中,为每个簇训练一个模型,从而改善了性能。
  4. 现有 CFL 的问题:
    • 间接学习相似性: 大多数方法在训练过程中间接学习客户端之间的分布相似性,这可能非常耗时,需要多轮联邦学习才能稳定簇的形成。
    • 预定义簇数: 一些方法 (如 IFCA) 需要预先定义簇的数量,这在实际中可能不切实际。
    • 高通信成本: 在每次迭代中,所有簇模型可能需要被活跃客户端下载。
    • 初始化敏感: 随机初始化的簇模型可能导致训练过程漫长且不稳定。
    • 缺乏灵活性: 在个性化和全局化之间的权衡能力有限。

两个子空间之间的主角(Principal angles)

U = s p a n { u 1 , . . . , u p } \mathcal{U} = span\{u_1, ..., u_p\} U=span{u1,...,up} W = s p a n { w 1 , . . . , w q } \mathcal{W} = span\{w_1, ..., w_q\} W=span{w1,...,wq} R n R^n Rn 中的 p p p 维和 q q q 维子空间,其中 { u 1 , . . . , u p } \{u_1, ..., u_p\} {u1,...,up} { w 1 , . . . , w q } \{w_1, ..., w_q\} {w1,...,wq} 是正交归一的,满足 1 ≤ p ≤ q 1 ≤ p ≤ q 1pq。存在一组 p p p 个角度 0 ≤ Θ 1 ≤ Θ 2 ≤ . . . ≤ Θ p ≤ π / 2 0 ≤ \Theta_1 ≤ \Theta_2 ≤ ... ≤ \Theta_p ≤ π/2 0Θ1Θ2...Θpπ/2,称为主角度,其定义为:
Θ ( U , W ) = m i n u ∈ U , w ∈ W a r c c o s ( ∣ u T w ∣ ∣ ∣ u ∣ ∣ ∣ ∣ w ∣ ∣ ) \Theta(\mathcal{U},\mathcal{W})=min_{u\in \mathcal{U},w\in \mathcal{W}}arccos\big(\frac{|u^Tw|}{||u||\ ||w||}\big) Θ(U,W)=minuU,wWarccos(∣∣u∣∣ ∣∣w∣∣uTw)
其中 ∥ ⋅ ∥ ∥·∥ 是诱导范数。最小主角是 Θ 1 ( u 1 , w 1 ) \Theta_1 (u_1, w_1) Θ1(u1,w1),向量 u 1 u_1 u1 w 1 w_1 w1 是对应的主向量。

利用主角捕捉数据/特征之间的相似性

假设有 K K K 个数据集。我们提议对这些数据矩阵 D k ( k = 1 , . . . , K ) D_k(k = 1, ..., K) Dkk=1,...,K 截断奇异值分解,其列为每个数据集的输入特征。此外,令 U p k = [ u 1 , u 2 , . . . , u p ] ( p ≪ r a n k ( D k ) ) U_p^k = [u_1, u_2, ..., u_p] \ \ \big(p ≪ rank (D_k)\big) Upk=[u1,u2,...,up]  (prank(Dk)) 为数据集 k k k p p p 个最显著的左奇异向量。我们将邻近阵 A A A 构成如公式 2 所示:
A i , j = Θ 1 ( U p i , U p j ) , i , j = 1 , . . . , K \textbf{A}_{i,j}=\Theta_1(U_p^i,U_p^j), \ i,j = 1,...,K Ai,j=Θ1(Upi,Upj), i,j=1,...,K
其项为 U p k U_p^k Upk 中每一对的小主角度,或者如公式 3 所示:
A i , j = tr ( a r c c o s ( U p i T ∗ U p j ) ) , i , j = 1 , . . . , K \textbf{A}_{i,j}=\text{tr}(arccos(U_p^{iT}*U_p^j)), \ i,j=1,...,K Ai,j=tr(arccos(UpiTUpj)), i,j=1,...,K
其中的条目是对应的 u u u 向量(以同顺序)在 U p k U_p^k Upk 中每对之间的夹角总和 t r ( . ) tr (.) tr(.) 是迹运算符。

方法展开

  • 在联邦学习开始之前,每个可用的客户端 k k k对其自身的数据矩阵 D k 2 D_k^2 Dk2 执行截断奇异值分解(SVD),并将 p p p个最重要的左奇异向量 U p U_p Up 作为其数据签名(signature)发送给中央服务器。接下来,服务器根据公式2或公式3获得接近矩 A A A,其中 K = ∣ S t ∣ K = |S_t| K=St S t S_t St 是可用客户端的集合。当集群数量未知时,服务器可以在接近矩阵 A A A上采用聚合层次聚类(HC)来形成不相交的集群。因此,客户端的集群ID被确定。
  • 后续则开始在集群内训练模型。客户端只需将其集群成员身份 ID 和模型参数发送回中央服务器。在接收到所有参与客户端的模型和集群 ID 成员身份后,服务器将收集所有集群 ID 相同的客户端的参数更新,并在每个集群内进行模型平均。值得注意的是,在算法 1 中, β β β 代表两个集群之间的欧几里得,并且是 HC 中的一个参数。
    算法1

算法2

对比试验

  • 实验与结果:
  • 数据集: FMNIST, SVHN, CIFAR-10, CIFAR-100
  • 模型: LeNet-5, ResNet-9
  • 对比基线: SOLO, FedAvg, FedProx, FedNova, SCAFFOLD (全局模型)LG-FedAvg, Per-FedAvg, Clustered-FL (CFL by Sattler), IFCA (个性化/聚类模型)

实验结果

  • 测试PACFL在聚类阈值β下的准确性表现(当邻近矩阵如公式2所示获得),以及在CIFAR-10/100、FMNIST和SVHN数据集上非独立同分布标签斜(20%)下的拟合聚类数量。图中的每个点均通过200个通信轮次获得,局部训练轮次为10,局部批量大小为10,使用SGD局部优化器。
    图2

  • 在不同数据集上进行非独立同分布标签偏斜(20%)的测试准确率比较。对于每个基线报告所有客户端最终本测试准确率的平均值。我们对每个基线运行3次,共200个通信轮次,局部训练次为10。
    表格2

  • PACFL的优势在于当任务极度非独立同分布(Non-IID)时尤为明显。该表评估了在MIX4这一具有挑战性的场景中不同FL方法的top-1测试准确性表现。尽管所有竞争方法在处理这一巨大数据异质性场景时面临重大困难,但结果清晰地表明PACFL在如此困难的数据异质性场景下仍然表现很强的稳健性。
    表格3

  • 在非独立同分布 (20%) 的情况下,测试准确率与通信轮数相对比。PACFL 快速收敛到预期的准确率,并且始终优于SOTA。
    图4

  • 在不同数据集上,未见客户端的平均本地测试准确率,对应于非独立同分布标签偏斜(20%)。
    表格4

  • 比较不同的FL方法在非独立同分(20%)情况下达到目标的top-1平均本地测试准确率所需的通信轮数。
    表格5

总结

灵活性

  1. PACFL的一个理想特性是它能够处理客户的部分参与。PACFL并不要求事先知道某些客户是否可以参与该联邦,客户端可以突然加入或离开网络。
  2. 如果没有指定固定的聚类数,PACFL可以形成拟合的聚数。然而,在 IFCA (Ghosh等人,2020)中,聚类数必须事先确定。
  3. PACFL可以在联邦之前为用客户端进行一次性客户端聚类,而不需要关于某些客户端的可用性和数量的先前信息。相反,IFCA 通过在聚类识别估计和损失函数最小化之间替进行迭代构建聚类,这在通信上成本较高。
  4. PACFL相对FedAvg没有增加显著的额外计算开销,因为只需要在训练前进行一次性HC聚类。考虑到这一点,PACFL算法的复杂度与FedAvg相同,外加一次性HC的计算复杂度((O(N 2)),其中N是客户端的总数)。
  5. 使用算法2可以支持客户端的离开和新客户端的加入。
  6. 多聚类算法支持。

优点

  • 高效的一次性聚类。
  • 无需预定义簇数。
  • 对异构数据的鲁棒。
  • 低通信开销。
  • 隐私保护。
  • 灵活。
  • 更好的收敛速度和性能。

缺点

  • SVD的计算成本:虽然 SVD 是一次性操作,但对于数据量非常大或特征维度非常高的客户端,计算 SVD 仍然可能带来一定的计算负担。不过,通常只计算少数几个最大的奇异值和对应的奇异向量(截断 SVD),这可以缓解计算压力。
  • 主向量选择的敏感:选择的主向量数量 P P P 是一个超参数。如果 P P P 太小,可能无法充分捕捉数据分布的复杂性;如果 P P P 太大,可能会引入噪声并增加通信和计算成本。如何选择最优的 P P P 可能需要一些经验或调试。
  • 聚类算法的选择和参数调整 (Choice and Parameter Tuning of Clustering Algorithm):虽然 PACFL 的核心是主角度分析,但最终的聚类效果也依赖于所选的聚类算法(如 HC)及其参数(如阈值 β β β)。这些参数的选择可能需要根据具体数据集进行调整。
  • 对数据预处理的潜在依赖 (Potential Dependence on Data Preprocessing):SVD 的结果可能受到数据缩放、归一化等预处理步骤的影响。不同客户端如果预处理方式不一致,可能会影响主角度计算的准确性。
  • 假设数据子空间能充分代表分布 (Assumption of Subspace Representing Distribution):该方法假设由少数主向量张成的低维子空间能够充分代表客户端数据的核心分布特性。对于某些高度非线性或复杂的数据分布,这种线性子空间的表示能力可能有限。
  • 对“签名”的隐私风险仍需关注 (Privacy Risks of “Signatures” Still Need Consideration):尽管论文认为难以从少量主向量重构数据,但在某些极端情况下,如果攻击者拥有大量辅助信息或针对性的攻击手段,这些“签名”仍可能泄露一些关于数据分布的间接信息。因此,在高度敏感场景下,额外的隐私增强技术(如差分隐私)仍然是必要的。
  • 服务器端的聚类计算 (Clustering Computation on Server):虽然客户端计算 SVD 是一次性的,但服务器端在接收到所有主向量后,需要计算两两之间的主角度(或邻近度矩阵)并运行聚类算法。当客户端数量非常庞大时, O ( K 2 ) O(K^2) O(K2) 的相似度计算和聚类算法的复杂度可能成为瓶颈 (尽管论文中提到HC是 O ( N 2 ) O(N^2) O(N2),这里的 N N N应指客户端数量 K K K)。
  • 对“静态”分布的假设 (Assumption of “Static” Distributions for Initial Clustering):一次性聚类假设客户端的数据分布在聚类阶段是相对稳定的。如果客户端的数据分布随时间动态变化非常剧烈,那么初始的聚类结果可能很快失效,需要重新聚类机制。

相关文章:

【论文阅读】基于客户端数据子空间主角度的聚类联邦学习分布相似性高效识别

Efficient distribution similarity identification in clustered federated learning via principal angles between client data subspaces -- 基于客户端数据子空间主角度的聚类联邦学习分布相似性高效识别 论文来源TLDR背景与问题两个子空间之间的主角(Principa…...

Elasticsearch知识汇总之ElasticSearch部署

五 ElasticSearch部署 部署Elasticsearch,可以在任何 Linux、MacOS 或 Windows 机器上运行 Elasticsearch。在Docker 容器 中运行 Elasticsearch 。使用Elastic Cloud on Kubernetes 设置和管理 Elasticsearch、Kibana、Elastic Agent 以及 Kubernetes 上的 Elasti…...

ROBOVERSE:面向可扩展和可泛化机器人学习的统一平台、数据集和基准

25年4月来自UC Berkeley、北大、USC、UMich、UIUC、Stanford、CMU、UCLA 和 北京通用 AI 研究院(BIGAI)的论文“ROBOVERSE: Towards a Unified Platform, Dataset and Benchmark for Scalable and Generalizable Robot Learning”。 数据扩展和标准化评…...

LVGL的核心:lv_timer_handler

文章目录 🧠 一句话总结 LVGL 的运行核心:🔁 1. while(1) 主循环中的 lv_task_handler()⏱️ 2. lv_timer_handler() 定时器调度核心✅ 并发控制✅ 关键行为流程:🌀 任务执行逻辑:🧮 计算下一次…...

(41)VTK C++开发示例 ---qt使用vtk最小示例

文章目录 1. 概述2. CMake链接VTK3. main.cpp文件4. 演示效果 更多精彩内容👉内容导航 👈👉VTK开发 👈 1. 概述 本文演示了在Qt中使用VTK的最小示例程序,使用VTK创建显示一个锥体; 采用Cmake作为构建工具&a…...

⭐️⭐️⭐️【课时1:大模型是什么?】学习总结 ⭐️⭐️⭐️ for《大模型Clouder认证:基于百炼平台构建智能体应用》认证

一、学习目标 概要 通过学习《课时1:大模型是什么?》,全面了解大模型的基础概念、核心特点、发展脉络及阿里云在大模型领域的布局,为后续基于百炼平台构建智能体应用的实践操作打下坚实的理论基础。 具体目标列表 理解人工智能到大模型的演变逻辑,明确大模型在AI发展历…...

OS7.【Linux】基本指令入门(6)

目录 1.zip和unzip 配置指令 使用 两个名词:打包和压缩 打包 压缩 Linux下的操作演示 压缩和解压缩文件 压缩和解压缩目录 -d选项 2.tar Linux下的打包和压缩方案简介 czf选项 xzf选项 -C选项 tzf选项 3.bc 4.uname 不带选项的uname -a选项 -r选项 -v选项…...

国标GB28181视频平台EasyCVR安防系统部署知识:如何解决异地监控集中管理和组网问题

在企业、连锁机构及园区管理等场景中,异地监控集中管控与快速组网需求日益迫切。弱电项目人员和企业管理者亟需整合分散监控资源,实现跨区域统一管理与实时查看。 一、解决方案 案例一:运营商专线方案​ 利用运营商专线,连接各分…...

O2O上门服务如何颠覆传统足浴行业?真实案例分析

在湖南经营传统足浴店的张总最近遇到了件让他哭笑不得的事。原本他的门店生意还算稳定,虽然这两年行情不好,但靠着老顾客还能勉强维持。可谁想到,一次好心帮忙,竟让他发现了行业的新天地。 几年前,张总的一位做砂石生意…...

金仓数据库永久增量备份技术原理与操作

先用一张图说明一下常见的备份方式 为什么需要永久增量备份 传统的数据库备份方案通常是间隔7天对数据库做一次全量备份(完整备份),每天会基于全量备份做一次增量备份,如此循环,这种备份方案在全备数据量过大场景下…...

19、HashTable(哈希)、位图的实现和布隆过滤器的介绍

一、了解哈希【散列表】 1、哈希的结构 在STL中,HashTable是一个重要的底层数据结构, 无序关联容器包括unordered_set, unordered_map内部都是基于哈希表实现 哈希表又称散列表,一种以「key-value」形式存储数据的数据结构。哈希函数:负责将…...

函数级重构:如何写出高可读性的方法?

1. 引言:为什么方法级别的重构如此重要? 在软件开发中,方法(函数)是程序逻辑的基本单元。一个高质量的方法不仅决定了程序是否能正常运行,更直接影响到: 代码的可读性:能否让其他开发者快速理解可维护性:未来修改是否容易出错可测试性:是否便于编写单元测试协作效率…...

mysql中int(1) 和 int(10) 有什么区别?

困惑 最近遇到个问题,有个表的要加个user_id字段,user_id字段可能很大,于是我提mysql工单​​alter table xxx ADD user_id int(1)​​。领导看到我的sql工单,于是说:这int(1)怕是不够用吧,接下来是一通解…...

FreeRTOS如何实现100%的硬实时性?

实时系统在嵌入式应用中至关重要,其核心在于确保任务在指定时间内完成。根据截止时间满足的严格程度,实时系统分为硬实时和软实时。硬实时系统要求任务100%满足截止时间,否则可能导致灾难性后果,例如汽车安全系统或医疗设备。软实…...

深度学习 ----- 数据预处理

常用的高级数据预处理的方法总结 🧠 一、图像数据高级预处理方法汇总表 方法原理常用参数适用场景图像增强(Augmentation)改变图像外观/几何结构,提升泛化能力翻转、旋转、缩放、色调扰动等分类、检测、分割等Mixup / CutMix合成…...

Cluster Interconnect in Oracle RAC

Cluster Interconnect in Oracle RAC (文档 ID 787420.1)​编辑转到底部 In this Document Purpose Scope Details Physical Layout of the Private Interconnect Why Do We Need a Private Interconnect ? Interconnect Failure Interconnect High Availability Private Inte…...

【Spring Boot 注解】@SpringBootApplication

文章目录 SpringBootApplication注解一、简介二、使用1.指定要扫描的包 SpringBootApplication注解 一、简介 SpringBootApplication 是 Spring Boot 提供的一个注解,通常用于启动类(主类)上,它是三个注解的组合: 1.…...

angular的cdk组件库

目录 一、虚拟滚动 一、虚拟滚动 <!-- itemSize相当于每个项目的高度为30px --><!-- 需要给虚拟滚动设置宽高&#xff0c;否则无法正常显示 --> <cdk-virtual-scroll-viewport [itemSize]"40" class"view_scroll"><div class"m…...

element-ui日期时间选择器禁止输入日期

需求解释&#xff1a;时间日期选择器&#xff0c;下方日期有禁止选择范围&#xff0c;所以上面的日期输入框要求禁止输入&#xff0c;但时间输入框可以输入&#xff0c;也就是下图效果&#xff0c;其中日历中的禁止选择可以通过【picker-options】这个属性实现&#xff0c;此属…...

HarmonyOS Next~HarmonyOS应用测试全流程解析:从一级类目上架到二级类目专项测试

HarmonyOS Next&#xff5e;HarmonyOS应用测试全流程解析&#xff1a;从一级类目上架到二级类目专项测试 引言&#xff1a;HarmonyOS生态下的质量保障挑战 在万物互联的智能时代&#xff0c;HarmonyOS作为分布式操作系统&#xff0c;为开发者带来了前所未有的创新空间&#x…...

网络安全体系架构:核心框架与关键机制解析

以下是关于网络安全体系架构设计相关内容的详细介绍&#xff1a; 一、开放系统互联安全体系结构 开放系统互联&#xff08;OSI&#xff09;安全体系结构是一种基于分层模型的安全架构&#xff0c;旨在为开放系统之间的通信提供安全保障。它定义了安全服务、安全机制以及它们在…...

一种安全不泄漏、高效、免费的自动化脚本平台

在数字化转型加速的今天&#xff0c;自动化脚本工具已成为提升效率的重要助手。然而&#xff0c;用户在选择这类工具时&#xff0c;往往面临两大核心关切&#xff1a;安全性与成本。冰狐智能辅助&#xff08;IceFox Intelligent Assistant&#xff09;作为一款新兴的自动化脚本…...

[论文阅读]Deeply-Supervised Nets

摘要 我们提出的深度监督网络&#xff08;DSN&#xff09;方法在最小化分类误差的同时&#xff0c;使隐藏层的学习过程更加直接和透明。我们尝试通过研究深度网络中的新公式来提升分类性能。我们关注卷积神经网络&#xff08;CNN&#xff09;架构中的三个方面&#xff1a;&…...

多模态大语言模型arxiv论文略读(六十二)

MileBench: Benchmarking MLLMs in Long Context ➡️ 论文标题&#xff1a;MileBench: Benchmarking MLLMs in Long Context ➡️ 论文作者&#xff1a;Dingjie Song, Shunian Chen, Guiming Hardy Chen, Fei Yu, Xiang Wan, Benyou Wang ➡️ 研究机构: The Chinese Univers…...

现代框架对SEO的深度影响

第8章&#xff1a;现代框架对SEO的深度影响 1. 引言 Next 和 Nuxt 是两个 &#x1f525;热度和使用度都最高 的现代 Web 开发框架&#xff0c;它们分别基于 ⚛️React 和 &#x1f596;Vue 构建&#xff0c;也代表了这两个生态的 &#x1f310;全栈框架。 Next 是由 Vercel 公司…...

密码学--RSA

一、实验目的 1.随机生成明文和加密密钥 2.利用C语言实现素数选择&#xff08;素性判断&#xff09;的算法 3.利用C语言实现快速模幂运算的算法&#xff08;模重复平方法&#xff09; 4.利用孙子定理实现解密程序 5.利用C语言实现RSA算法 6.利用RSA算法进行数据加/解密 …...

如何选择自己喜欢的cms

选择内容管理系统cms what is cms1.whatcms.org2.IsItWP.com4.Wappalyzer5.https://builtwith.com/6.https://w3techs.com/7. https://www.netcraft.com/8.onewebtool.com如何在不使用 CMS 检测器的情况下手动检测 CMS 结论 在开始构建自己的数字足迹之前&#xff0c;大多数人会…...

BUUCTF——杂项渗透之赛博朋克

下载附件&#xff0c;是一个txt。打开查看&#xff0c;数据如下&#xff1a; 感觉这个像是用十六进制编辑器打开后的图片数据。为了验证此想法&#xff0c;我用010editor打开&#xff0c;发现文件头的确是png图片的文件头。 把txt文件后缀改成png格式&#xff0c;再双击打开&am…...

【c++】 我的世界

太久没更新小游戏了 给个赞和收藏吧&#xff0c;求求了 要游戏的请私聊我 #include <iostream> #include <vector>// 定义世界大小 const int WORLD_WIDTH 20; const int WORLD_HEIGHT 10;// 定义方块类型 enum BlockType {AIR,GRASS,DIRT,STONE };// 定义世界…...

React 中集成 Ant Design 组件库:提升开发效率与用户体验

React 中集成 Ant Design 组件库:提升开发效率与用户体验 一、为什么选择 Ant Design 组件库?二、基础引入方式三、按需引入(优化性能)四、Ant Design Charts无缝接入图标前面提到了利用Redux提供全局维护,但如果在开发时再自己手动封装组件,不仅效率不高,可能开发的组件…...