一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种针对数据异构性的个性化联邦元学习方法

2022-04-16 16:00:21 来源:中国专利 TAG:


1.本发明涉及数据异构下分布式机器学习的研究领域,特别涉及一种针对数据异构性的个性化联邦元学习方法。


背景技术:

2.现代社会中边缘设备的普及,如移动电话和可穿戴设备,导致了人们产生的分布式私人数据的快速增长。虽然这些丰富的数据为机器学习应用提供了巨大的机会,但随着《通用数据保护条例》(gdpr)和《健康保险隐私及责任法案》(hipaa)等法规的出台,社会上对数据隐私的关注度越来越高。这使得联邦学习越来越受欢迎,这是一个新的分布式机器学习范式,它能够以合作和隐私保护的方式在数据孤岛上开发和训练机器学习模型。个人用户参与联邦学习的主要动机是利用联邦学习中其他用户的共享知识库。因为单一用户通常面临着数据层面的限制,如数据稀缺、低质量数据和未见过的标签类,这些都限制了他们训练性能良好的本地模型的能力。
3.联邦学习是一个框架,它让被称为客户端的多个用户能够在他们的联邦数据上协作训练一个共享的全局模型,而无需将数据从他们的本地设备上移动。一个中央服务器协调联邦学习的整个过程,这个过程是多轮的。在每一轮开始时,服务器将当前的全局模型发送给参与的客户端。每个客户端在其本地数据上训练模型,并将模型更新传回服务器。服务器从所有客户端收集这些更新,并对全局模型进行一次更新,进而结束这一轮。通过消除在单一设备上汇总所有数据的需求,联邦学习克服了上述的隐私问题。由于客户端参与联邦学习的主要动机是获得更好的模型,因此对于那些没有足够的私有数据来开发准确的本地模型的客户端,将从联邦学习的模型中获益最大。然而对于那些有足够私有数据来训练准确的本地模型的客户端来说,参与联邦学习的好处是有争议的,因为共享的全局模型的准确度可能低于他们本地训练的局部模型。此外,对于很多应用来说,数据在客户端上的分布是高度非独立同分布(non-iid)的。这种统计上的异构使得联邦学习很难训练出一个对所有客户端都能很好地工作的单一模型。
4.虽然联邦学习最初的目标是寻找一个可以部署在每个客户端上的单一全局模型,但是由于客户端的数据分布在不同设备之间可能存在很大差异,单个模型可能无法同时为所有客户端服务。因此,数据的异构性成为寻找高效的联邦学习模型的主要挑战之一。一些个性化联邦学习方法被提出来以处理数据异构性,其中有的使用不同的本地模型来拟合客户端特定的本地数据,但也可以从其他设备的数据中提取公共知识。为了应对数据的统计异构性所带来的挑战,对全局模型进行个性化是很有必要的。例如在客户端上运行下一词预测任务,对于句子“我生活在
……”
的下一词预测,显然不同区域的用户会输出不同的答案,因此模型需要为每个用户预测不同的答案。大多数个性化技术通常包括两个离散的步骤。第一步是以协作的方式建立一个全局模型。在第二步中,使用客户端的私有数据为每个客户端建立个性化模型。通常来说,单纯地针对全局准确性进行优化,会产生难以个性化的模式。为了使个性化联邦学习在实践中发挥作用,以下三个目标必须同时而不是独立地解
决:(1)开发改进的个性化模型,使绝大多数客户端受益;(2)开发精确的全局模型,使本地数据有限的客户端从中受益;(3)能够在较低的训练轮次中实现模型的快速收敛。
5.在最近几年里,个性化联邦学习已经成为应对联合学习中非独立同分布数据这一统计挑战的最有希望的方法之一,并吸引了越来越多的关注。jiang等人(yihan jiang,jakubkeith rush,and sreeram kannan.2019.improving federated learning personalization via model agnostic meta learning.arxiv preprint arxiv:1909.12488.)探讨了maml算法(chelsea finn,pieter abbeel,and sergey levine.2017.model-agnostic meta-learning for fast adaptation of deep networks.in icml,1126

1135.)和联邦学习之间的联系。他们将maml的全局元模型视为联邦学习的全局模型,并将任务视为客户端的局部模型。他们还表明,现有的基于优化的元学习算法(如maml)可以被整合到联邦学习中,以实现个性化。在文献(alireza fallah,aryan mokhtari,and asuman e.ozdaglar.2020.personalized federated learning with theoretical guarantees:a model-agnostic meta-learning approach.in neurips.)中,作者提出了per-fedavg,一个基于maml的联邦平均算法的个性化版本,通过在客户的本地数据上训练一个好的初始全局模型来定制个性化的模型。与maml类型的方法相比,khodak等人(mikhail khodak,maria-florina balcan,and ameet s.talwalkar.2019.adaptive gradientbased meta-learning methods.in neurips,5915

5926.)提出了aruba,一种用于自适应元学习的在线学习算法,并表明它改善了联邦平均算法的性能。
6.尽管这些个性化联邦学习方法与传统的联邦学习方法相比,有着更好的性能(尤其是准确性的比较),目前的技术中依旧忽略了客户端数据的统计学异构性这一潜在缺陷。如果特征空间对每一个本地数据分布都有很大的多样性,那么个性化的模型就可能存在多种泛化方向。在这种情况下,如果只依靠一个全局模型的指导,由于泛化的负迁移,很容易降低个性化模型的整体性能。为了应对这一情况,本发明通过为具有不同泛化方向的客户端提供不同的全局模型来缓解这一情况所带来的负迁移问题。


技术实现要素:

7.针对现有技术存在的缺陷,本发明能够提供一种针对数据异构性的个性化联邦元学习方法。通过在客户端正式参与联邦训练前,训练一个自编码器用以提供本地数据分布的向量,之后服务端根据这些客户端上传的数据分布向量将所有参与训练的客户端分成多个组,并在服务端中保持相应数量的泛化模型以分别指导个性化过程,从而解决了现有技术中所存在的上述问题。
8.本发明至少通过如下技术方案之一实现。
9.一种针对数据异构性的个性化联邦元学习方法,,包括以下步骤:
10.s1、确定各个客户端初始化阶段时的自动编码器结构以及个性化阶段时的元模型结构;
11.s2、进行初始化阶段以获得不同数据分布的中心点;
12.s3、客户端参与联邦训练,根据每轮上传的数据分布向量将客户端划分为多个组;
13.s4、对每个组内的客户端模型进行聚合并下发给组内的客户端进行下一轮迭代;
14.s5、联邦训练结束后,客户端在其组内元模型及其本地数据上进行调整产生个性化模型。
15.进一步地,客户端在参与联邦学习之前,需要从服务端下载统一的自动编码器以及元模型的模型结构;所述用以初始化阶段的自动编码器是神经网络的一种,用以提取客户端本地数据分布的统计特性,并以向量的形式进行表征;所述用以个性化阶段的元模型指的是元学习下的一种模型,能通过少量样本的训练来适应新任务的学习模型,用以适应客户端的本地数据生成个性化模型。
16.进一步地,所述步骤s2中获取中心点,包括以下步骤:
17.s201、令di表示客户端的本地数据集,ck表示中心点,表示自动编码器的编码器部分;
18.s202、每个客户端利用本地数据集di训练自动编码器得到
19.s203、每个客户端i使用编码器获得每个数据样本x∈di的嵌入向量的嵌入向量之后将所有样本的嵌入向量进行平均得到本地数据分布向量之后将所有样本的嵌入向量进行平均得到本地数据分布向量并上传到服务端中;
20.s204、服务端在收集到的客户端数据分布向量{hi}上运行k-means算法得到k个聚类中心点ck。
21.进一步地,所述自动编码器的模型结构为堆栈自动编码器、卷积自动编码器、循环自动编码器的其中一种。
22.进一步地,所述联邦训练遵循联邦平均算法,具体为:假设有n个客户端,每个客户端都有一个固定的本地数据集di,在每轮的开始,服务端随机选择部分客户端,然后服务端将当前全局算法状态发送到每个客户端,每个客户端执行基于全局状态和本地数据集的本地计算,然后将更新后的全局状态发送到服务器。服务端将聚合这些更新后的全局状态以产生新的全局状态,并重复此过程;在联邦训练的框架下。
23.进一步地,步骤s3包括以下步骤:
24.s301、令φk表示第k组中的元模型,θi表示客户端的本地个性化模型,r表示总的通信轮次;每轮从参与联邦训练的所有客户端中选择|s|个客户端;客户端进行本地更新的次数为t;本地数据集用di表示,并且每个客户端拥有|di|个数据样本x;对于客户端i,其本地数据集划分为两部分数据集划分为两部分用以客户端的训练,用以客户端的个性化;
25.s302、服务端随机选择|s|个客户端,并将对应的元模型φk发送到选择的客户端中;
26.s303、客户端收到来自服务端的元模型φk时,在元模型φk和本地数据di上进行本地更新,在本地第t∈t轮更新时,其更新的计算方式为:
[0027][0028]
其中,表示的是元模型φk在第r轮的通信回合,在客户端i上进行第t轮的本地更新;α表示本地模型的学习率;表示的是模型训练过程中的损失函数,其大小
与关联,常用的损失函数有0-1损失函数,交叉熵损失函数,softmax损失函数等;表示的是神经网络反向传播时损失函数的梯度大小;表示从随机采样大小为的数据样本,将更新后的本地模型用以更新元模型,其计算方式为:
[0029][0030]
其中,表示的是元模型φk在第r轮的通信回合,在客户端i上进行第t轮的本地更新后,用以下一轮t 1本地更新的元模型;表示的是损失函数,其大小与关联;β表示元模型的学习率,通常情况下,β设置为β≤α;随后,重复s303步骤直到完成t轮的本地更新;
[0031]
s304、令表示t轮训练中共采样的数据样本,其采样的数据样本大小为得到在通信轮次r∈r下客户端的本地数据分布向量为:
[0032]
s305、完成t轮本地更新后,客户端将更新后的元模型以及步骤s304下的本地数据分布向量hi一同发送到服务端。
[0033]
进一步地,元模型的更新算法为模型无关的元学习(maml,model-agnostic meta-leaming),在s303步骤中,在对元模型进行更新时,其反向传播得到的梯度大小为具体为:
[0034][0035]
使用一阶梯度版本去做更新,将二阶梯度忽略,对应的梯度更新为使用一阶梯度版本去做更新,将二阶梯度忽略,对应的梯度更新为
[0036]
进一步地,所述步骤s4具体为:
[0037]
s401、服务端收到来自所选择客户端列表s上传的更新后的元模型以及相应的本地数据分布向量{hi};服务端保存有k个聚类中心点ck;
[0038]
s402、分别计算每个客户端上传的本地数据分布向量{hi}与k个聚类中心点的相似度:
[0039][0040]
其中,cos表示余弦相似度,hi表示本地数据分布向量;
[0041]
将客户端i分配到相似度最大的聚类中心点所在的组中:
[0042]
[0043]
其中,表示客户端被分配到的组号;
[0044]
当所有客户端i∈s完成分组后,得到分组结果;定义分组结果为{gk},k∈[1,k],每个分组结果中包含了客户端的标识号;
[0045]
s403、对于每个分组gk,组内进行模型聚合生成下一轮的全局元模型其模型聚合方式如下:
[0046][0047]
其中,表示第r轮通信轮次结束后,产生新的第k组元模型用以下一通信轮次r 1;其大小与客户端i本地更新时采样的数据大小相关,为采样的数据样本大小,t为本地更新次数,为客户端i的训练数据集,表示t轮训练中在共采样的数据样本。
[0048]
s404、服务端将每组更新后的元模型下发给组内对应的客户端,对于没有被选择的客户端,不会收到更新后的元模型,重复步骤s3、步骤s4直到模型收敛,服务端保存好每个分组内的元模型
[0049]
进一步地,分组操作额外增加的计算复杂度为:
[0050][0051]
式中,k表示分组的数量,|s|表示服务端每一轮随机选择客户端的数目,dh表示客户端上传的本地数据分布向量的维度,分组的数量满足k<<n;
[0052]
对于空间复杂度,由于需要储存k个元模型,其额外增加的存储空间大小为其中d
θ
表示元模型的参数大小。
[0053]
进一步地,所述步骤s5具体为:
[0054]
s501、所有客户端利用用以客户端的个性化过程的本地数据集计算其数据分布向量并将其上传到服务端中,表示自动编码器的编码器部分;
[0055]
s502、服务端根据步骤s402完成所有客户端的分组,并将每组内训练完毕的元模型下发给组内客户端;
[0056]
s503、客户端根据收到的元模型,结合本地数据集执行数次梯度下降得到个性化模型φk表示第k组中的元模型,α表示本地模型的学习率,为反向传播时对损失函数计算得到的梯度。
[0057]
本发明与现有技术相比,具有如下优点和有益效果:
[0058]
本发明通过在联邦训练阶段,自适应地将具有相似数据分布的客户端划分到同一组中,而且每个组内采用不同的全局模型分别指导客户端产生个性化模型,不但避免了单一全局模型对部分客户端带来的负迁移问题,而且促进了相似客户端之间的协同训练,进而加快了收敛速率以及提升了个性化模型的准确率。
附图说明
[0059]
图1是本发明所述一种针对数据异构性的个性化联邦元学习方法的方法流程图;
[0060]
图2是本发明所述初始化阶段的示意图;
[0061]
图3是本发明所述联邦训练阶段的示意图。
[0062]
具体实施方法
[0063]
下面结合实施例及各个附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。
[0064]
个性化联邦学习在许多领域都有广阔的应用前景,如电子商务、金融、医疗、教育、城市计算、智慧城市、边缘计算、物联网、移动网络等。以下将以移动网络领域为例,就如何进行个性化联邦元学习进行说明。
[0065]
随着越来越多的用户使用上了智能手机,可靠且快速的移动输入法也变得越来越重要。下一词预测是输入法的一个基本功能,例如用户输入“今天”,输入法的预选框里会出现“晚上,下午,的”等词语供用户选择。由于不同用户的输入习惯不同,其本地数据样本的分布存在较大差异,因此需要针对不同的用户建立个性化的预测模型。此外,在训练过程中,将具有相似语言习惯的用户划分到同一组进行协作训练有助于加速训练过程且提高个性化预测模型的准确率。为了获得更好的下一词预测模型,下面将描述如何在用户的本地历史数据上使用个性化联邦元学习进行模型的协作训练。
[0066]
实施例1
[0067]
如图1所述的一种针对数据异构性的个性化联邦元学习方法,包括以下步骤:
[0068]
第一步、确定各个客户端初始化阶段时的自动编码器结构以及个性化阶段时的元模型结构;
[0069]
每个用户的移动设备在参与联邦学习之前,首先需要从云服务器中下载统一的自动编码器以及元模型的模型结构;所述用以初始化阶段的自动编码器是神经网络的一种,一般用来数据降维或者特征学习,此处用以表征用户的本地语言数据的分布;所述用以个性化阶段的元模型指的是元学习下的一种模型,它能通过少量样本的训练来适应新任务的学习模型,为了做下一词预测,此处采用常见的语言模型,如lstm(long short-term memory)语言模型;
[0070]
第二步、进行初始化阶段以获得不同数据分布的中心点;
[0071]
用户在参与正式的联邦学习之前,需要根据其本地数据分布对其进行初步的分组,这是因为部分用户拥有相似的输入习惯,将他们分在同一组中有助于提高模型的性能。具体来说:
[0072]
s201、令di表示用户移动设备上的本地语言数据;ck表示每个分组中数据分布的中心点,根据与每个分组中心点的相似程度对用户进行分组;表示自动编码器的编码器部分;
[0073]
s202、在用户的移动设备上,根据其本地语言数据di训练自动编码器得到编码器部分
[0074]
s203、在用户i的移动设备中,将每条本地语言数据x∈di输入到编码器中,得到对应的嵌入向量之后将所有样本的嵌入向量hi进行平均得到本地语言数
据分布向量并上传到云服务器中;
[0075]
s204、云服务器在收集到的用户本地数据分布向量{hi}上运行k-means算法得到k个聚类中心点ck。
[0076]
本实施例中,自动编码器的模型结构为堆栈自动编码器,假设编码压缩后的向量大小dh=25。
[0077]
作为一种优选的实施例,如图2所示,自动编码器由编码器部分以及解码器部分组成,隐藏层的特征经由编码器部分对原始数据压缩得到。对于用户1,假设共有100个本地语言数据样本{x1,...,x
100
},训练后的编码器部分为那么客户端1计算得出的本地数据分布向量(编码器输出的特征)为分布向量(编码器输出的特征)为分布向量(编码器输出的特征)为表示自动编码器的编码器部分。之后在服务端上,收到所有客户端上传的本地数据分布向量后,通过k-means算法聚类,假设设置聚类算法的k=2,那么服务端需要保存k-means算法输出的2个中心点,它们将在联邦训练的自适应分组中用到。
[0078]
第三步、客户端参与联邦训练,根据每轮上传的数据分布向量将客户端划分为多个组;
[0079]
具体来说,所述联邦训练过程遵循联邦平均算法,具体为:假设有n个用户参与,每个用户都有一个固定的本地数据集di,在每轮的开始,服务器随机选择一部分用户,随后服务器将当前全局模型发送到每个用户,每个客户端执行基于全局模型和本地数据集的本地计算,然后将更新后的全局模型发送到服务器,服务器将聚合这些更新后的全局模型以产生新的全局模型,并重复此过程;在联邦训练的框架下,如图3所示,具体流程为:
[0080]
s301、由于用户被划分成两组,因此元模型集合为{φ1,φ2},划分在同一组的用户使用该组的元模型进行本地预测模型的个性化;θi表示用户的本地个性化预测模型的模型参数;表示总的通信轮次,可设置为500;每轮从参与联邦训练的所有的用户中选择3个用户;用户的移动设备进行本地更新的次数为t=5;本地数据集用di表示,5个用户的本地数据集大小分别为{100,200,20,400,30},数据集的大小用符号|di|进行表示;对于用户i,其本地数据集划分为两部分i,其本地数据集划分为两部分用以用户移动设备的训练,用以用户移动设备的个性化;用户移动设备每轮进行本地更新时采样的数据样本大小为
[0081]
s302、云服务器随机选择3个用户{1,3,5},并将对应的元模型φk发送到这部分用户中;
[0082]
s303、若当用户1收到来自云服务器的元模型φ1时,在元模型φ1和本地语言数据d1上进行本地更新,在本地第t=3轮更新时,及利用反向传播算法更新本地预测模型的参数,其参数的更新计算方式为:
[0083][0084]
其中,表示的是元模型φ1在第111轮的通信回合,在用户1上进行第3轮的本地更新,等价于α表示本地模型的学习率,可设置为{0.001,0.01,0.1};表示的是模型训练过程中的损失函数,其大小与关联,常用的损失函数有0-1损失函
数,交叉熵损失函数,softmax损失函数等;表示的是神经网络反向传播时损失函数的梯度大小;表示从随机采样大小为的数据样本,将更新后的本地预测模型用以更新元模型,同样执行反向传播算法,其计算方式为:
[0085][0086]
其中,表示的是元模型φ1在第111轮的通信回合,在用户1上进行第3轮的本地更新,用以第4轮本地更新的元模型;表示的是损失函数,其大小与关联;β表示元模型的学习率,通常情况下,β设置为β≤α,可设置为{0.0005,0.005,0.05};随后,重复s303步骤直到完成t=5轮的本地更新;
[0087]
s304、令表示5轮训练中共采样的数据样本,其采样的数据样本大小为因此可以得到在通信轮次r=111下用户的本地数据分布向量为:11下用户的本地数据分布向量为:
[0088]
s305、完成5轮本地更新后,用户的移动设备将更新后的元模型以及所述步骤s304下的本地数据分布向量h1一同发送到云服务器。
[0089]
具体来说,元模型的更新算法为模型无关的元学习(maml,model-agnostic meta-learning),在s303步骤中,在对元模型进行更新时,其反向传播得到的梯度大小为具体为:
[0090][0091]
使用一阶梯度版本去做更新,将二阶梯度忽略,可以降低移动设备的计算压力,对应的梯度更新变为
[0092]
第四步,对每个组内的客户端模型进行聚合并下发给组内的客户端进行下一轮迭代,具体为:
[0093]
s401、云服务器收到来自所选择用户列表{1,3,5}上传的更新后的元模型以及相应的本地数据分布向量{hi};此外,服务端还保存有2个聚类中心点{c1,c2};
[0094]
s402、分别计算每个用户上传的本地数据分布向量{h1,h3,h5}与2个聚类中心点的相似度,其计算方式为:
[0095][0096]
其中,cos表示余弦相似度。随后,用户1被分配到相似度最大的聚类中心点所在的组中,其计算方式为:
[0097]
[0098]
其中,表示用户1被分配到的组号。
[0099]
当所有用户{1,3,5}完成分组后,得到分组结果。定义分组结果为{gk},k∈[1,2],每个分组结果中包含了用户的标识号,;
[0100]
s403、对于每个分组gk,组内进行模型聚合生成下一轮的全局元模型其模型聚合方式如下:
[0101][0102]
其中,表示第111轮通信轮次结束后,产生新的第k组元模型用以下一通信轮次112;其大小与客户端i本地更新时采样的数据大小相关,为采样的数据样本大小,t为本地更新次数,为用户i的训练数据集,表示t轮训练中在共采样的数据样本。
[0103]
s404、云服务器将每组更新后的元模型下发给组内对应的用户,对于没有被选择的用户,不会收到更新后的元模型。重复步骤s3、s4直到模型收敛,云服务器保存好每个分组内的元模型
[0104]
第五步,联邦训练结束后,用户在其组内元模型及其本地数据上进行微调产生个性化模型,具体为:
[0105]
s501、所有用户{1,2,3,4,5}利用本地语言数据集计算其数据分布向量并将其上传到云服务器中;
[0106]
s502、云服务器根据步骤s402完成所有用户的分组,并将每组内训练完毕的元模型下发给组内用户;
[0107]
s503、用户根据收到的元模型,结合本地数据集执行数次梯度下降得到个性化模型φk表示第k组中的元模型,α表示本地模型的学习率,为反向传播时对损失函数计算得到的梯度。
[0108]
具体来说,所述得到个性化模型的梯度下降的次数默认为一次,不同用户根据模型表现可适当设置梯度下降次数的大小。完成最终的个性化训练后,用户可获得适合于本地数据分布的个性化语言预测模型{θ1,θ2,θ3,θ4,θ5}。
[0109]
实施例2
[0110]
如图3所示,总共有5个用户参与联邦训练,云服务器中将其划分成2组。在任意的通信轮次中,假设上一轮的分组结果为{1,2,3}在第一组,{4,5}在第二组,此时云服务器选择用户{1,3,5}参与联邦训练过程,那么用户{1,3训各收到元模型φ1,用户{5}将收到元模型φ2。
[0111]
对于用户1,假设其拥有100个本地数据,本地进行了t=5次的本地更新,每次更新随机采样batch大小为的数据样本,那么在完成本地更新后,总共采样的数据大小为min(2*5*5,100)=50。之后计算这批采样数据的分布向量
连同本地更新后的元模型上传到云服务器。同理,用户{3,5}也进行上述过程。
[0112]
对于云服务器,它收到了来自用户{1,3,5}上传的数据分布向量以及更新后的元模型云服务器首先遍历{h1,h3,h5}上传的本地数据分布向量列表{h1,h3,h5},与其保存的2个聚类中心点进行相似度对比完成分组,假设分组结果为:用户{1,5}为一组,用户{3}为一组。随后进行模型聚合操作,若用户{1,3,5}采样的数据样本大小分别为{50,20,30},可以计算加权系数为{w1=50/(50 30)=0.625,w3=20/20=1.0,w5=30/(50 30)=0.375},进而得到第一组的加权元模型第二组的加权元模型为
[0113]
重复步骤s3,步骤s4直到达到预设的停止条件r=500轮的通讯轮次。
[0114]
此外,上述的分组操作相比于原始的联邦平均算法,额外增加的计算复杂度为:
[0115][0116]
式中,=2k表示分组的数量,|s|=5表示服务端每一轮随机选择客户端的数目,dh=25表示用户上传的本地数据分布向量的维度,分组的数量满足k<<n;
[0117]
对于空间复杂度,由于需要储存k=2个元模型,其额外增加的存储空间大小为其中d
θ
=25表示元模型的参数大小。
[0118]
实施例3
[0119]
在一种实施例中,所述自动编码器的模型结构还可以为卷积自动编码器、循环自动编码器的其中一种,
[0120]
上述实施例为本发明较佳的实施方式,但本发明的实施方式并不受上述实施例的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献