联邦学习阅读笔记(五)——语义库对齐问题

联邦持续学习(Federated Continual Learning)

由于数据隐私限制,多个中心之间的数据共享受到限制,这就影响了联邦学习架构下多中心合作开发高性能深度学习模型的效果。持续学习(Continual Learning)作为点对点联合学习的一种方法,可以通过共享中间模型而不是训练数据来绕过数据隐私的限制,从而促进多中心协作开发深度学习算法。近期不断有研究人员探索联邦持续学习方法(Federated Continual Learning,FCL),即,研究持续学习在联邦学习架构下多中心协作的可行性,当一个模型在新的数据集或任务上被重新训练时,深度学习会遇到灾难性遗忘的问题,即深度学习模型会灾难性地遗忘已经学到的旧知识。持续学习技术的目的是让机器学习模型通过新的数据进行更新,同时保留以前学到的知识。持续学习具有两大优点:1) 不需要保存之前任务上学习过的训练数据,从而在节约内存的同时解决了由于物理设备 (例如机器内存 ) 或学习策略 (例如隐私保护 ) 的限制所导致的数据不能被长期存储问题;2) 模型能够保存之前任务所学到的知识,并且能够极大程度地将之前任务学习到的知识运用到未来任务的学习中,从而提高学习效率。

目前,持续学习的方法仍在不断发展中,还没有严格的数学定义。韩等在文章 [1] 中给出了一幅持续学习的示意图,如图 1 所示,“在连续学习过程中,智能体逐个对每个连续的非独立均匀分布流数据示例进行学习,并且该智能体对每个示例只进行一次访问。这种学 习方式与动物学习过程更为接近。如果我们忽略各个任务的先后次序问题,单独训练每个任务,这将导致灾难性遗忘,这也是连续学习一直以来所面临的最大问题。因此,连续学习的本质是通过各种手段高效地转化和利用已经学过的知识来完成新任务的学习,并且能够极大程度地降低遗忘带来的问题。

持续学习算法主要分为三种类型:

回放方法(Memory Reply)、动态结构模型(Dynamic Structural Models)和正则化方法(Regularization Model)。

1)回放方法从以前的数据集中选择有代表性的样本,以保留所学的知识。该方法的研究重点是:「要保留旧任务的哪部分数据,以及如何利用旧数据与新数据一起训练模型」,这对于克服数据存储的限制是可行的,但对于多中心合作来说是不可行的,因为由于数据隐私问题,其他中心的样本是不可用的 [6-8]。2)动态结构模型为多任务场景设计动态网络架构或动态参数,网络的各个部分(如某些权重或某些神经元连接)负责对应的各个任务。3)正则化方法使用相同的传统神经网络,但在损失函数中加入了新的正则化项,以保留学习知识的重要参数。该方法的主要思想是「通过给新任务的损失函数施加约束的方法来保护旧知识不被新知识覆盖」

联邦持续学习 (Federated Continual Learning)

联邦学习的主要思想是去中心化,将模型下放到各个参与联合训练的客户端本地,基于本地客户端的数据进行模型训练,而不需要将用户数据上传到中央服务器,从而保护各个客户端中的隐私。然而,大多数现有方法假设整个联邦学习框架的数据类别随着时间的推移是固定不变的。实际情况中,已经参与联邦学习的客户端经常可能收集到新类别的数据,但考虑到每个客户端本地设备的存储空间非常有限,很难对其收集到的所有类别都保存下足够数量的数据,这种情况下,现实世界中的联邦学习模型很可能对于旧类数据的性能遇到严重的灾难性遗忘。此外,联邦学习框架往往还会有持续不断的新用户的参与,这些新用户往往有着大量的新数据类别,这样会进一步加剧全局模型的灾难性遗忘。

近年来,有研究人员陆续提出将联邦学习和持续学习的思想结合起来构建联邦持续学习框架。然而,直接简单的将联邦学习和持续学习相结合会带来新的问题。首先是,联邦持续学习仍然面临灾难性遗忘,此外还会带来来自其他客户端潜在的干扰。因此我们需要有选择地利用来自其他客户端的知识,以最小化客户端间的干扰,最大化进行客户端间的知识转移。第二个问题是联邦学习之间进行通信交换知识时,可能会造成通信成本过大,“通信代价” 成为了一个不可忽视的问题。

我们通过四篇近期发表的文章概览联邦持续学习的最新研究进展。

Federated Continual Learning with Weighted Inter-client Transfer

联邦学习(FL)的每个client各自执行一系列的持续学习(Continual Learning)任务

若干个医院要通过一个联邦学习框架交流自己的知识,每个医院的模型都在进行自己的一系列的疾病预测任务。作者以一个持续学习算法(Additive Parameter Decomposition,APD)为基础,加上了client之间的知识的加权,构成了整个算法
     Continual Learning是为了解决现有模型,尤其是神经网络在学习多个任务的时候出现的灾难性遗忘(Catastrophic Forgetting)问题。比如模型在学习了一段时间任务A之后,开始学习任务B,那么模型的参数将转而向任务B偏移,遗忘从任务A中学习到的知识。为了能够让模型拥有像人这样,学习了后面的任务但是不会遗忘前面的知识、或者说能够不让模型在前面的任务中表现下滑太多,我们引入了Continual Learning 这个研究内容。APD是本文作者以前提出的一个持续学习算法,这里不过多介绍,只说一下它的核心思想,就是把模型拆分成两部分:共享参数(task-shared parameters)和自适应参数(task-adaptive parameters),简称为σ \sigmaσ和τ \tauτ。因为每个任务之间有些基本的知识是共通的,比如图片中像线条、颜色等这样的浅层特征,这些由σ \sigmaσ来学习,细化到每个任务的学习目标,比如猫狗识别、数字识别等,这些是不同任务间特有的知识


两个不同的任务合作学习时,往往会出现Figure 2所示的问题,如果两个任务相关性比较强,辅助任务对目标任务有正向作用,如果任务相关性比较弱,则可能会阻碍目标任务的结果,因此在学习时,应当让与目标任务更相似的任务参与辅助。

        每个client执行一系列的任务,这些任务共享一个base model:B。client先将全局模型下载下来,作为本地的base model。经过若干轮的local update之后,B通过一个mask m上传到服务端,服务端对其进行聚合得到新的全局模型。这部分学习的是这些client的通用知识。此外,因为每个client的每个任务都划分为base model(B)和adaptive model(A),client还会把自己所有的A上传,server把这一组A广播给所有的client,client的每个任务自己维护一组注意力参数α \alphaα,有选择性的对这些A进行利用,组成自己的A。于是可以将局部模型表示:

训练目标函数:

 中央服务器。 中央服务器首先对所有客户端发送的基础参数进行汇总,取其加权平均值 θ_G。然后,将 θ_G 广播给所有客户端。t-1 的任务适应性参数在训练任务 t 期间在每个客户端广播一次。FCL 基线需要 | C|×R×|θ| 的中央服务器 - 客户端通信成本,而 FedWeIT 需要 | C|×(R×|θG|+(|C|-1)×|A|),其中 θ_G、A 是高度稀疏的。算法 1 中描述了 FedWeIT 的算法。

 作者的代码:tensorflow

 数据+代码链接:https://pan.baidu.com/s/10izLt34bqcltVN6TYBySUQ
提取码:3o6f

Secure Federated Transfer Learning

缺点:这种联邦学习框架局限于参与者提供的数据必须是具有相同特征或者相同样本的情况。

理想很丰满,现实很骨感

In reality. however, the set of common entities could be small, making a federation less attractive and leaving the majority non-overlapping data undermined.

于是论文提出了可行的解决方案: Federataion Transfer Learning(FTL)

Main contributions:

We introduce federated transfer learning in a privacy-preserving setting to provide solutions for federation problems beyond the scope of existing federated learning approaches;

在保护隐私的情况下引入了联邦迁移学习来解决当前联邦学习的局限
We provide an end-to-end solution to the proposed FTL problem and show that convergence and accuracy of the proposed approach is comparable to the non-privacy-preserving approach;

对提出的FTL问题提供了一个端到端的解决方案,并且使用该方法训练的模型精度和收敛性能够媲美无隐私保护下的训练方法
We provide a novel approach for adopting additively homomorphic encryption (HE) to multi-party computation (MPC) with neural networks such that only minimal modifications to the neural network is required and the accuracy is almost lossless, whereas most of the existing secure deep learning frameworks suffer from loss of accuracy when adopting privacy-preservingtechniques.

当前存在的安全深度学习框架由于引入了隐私保护技术,在精度损失方面表现很差,而在该框架中采用同态加密技术和神经网络技术,精度损失表现更好

Problem Definition

源域数据集:

目标域数据集:   (即源域既有样本数据特征,以及标签,目标域仅有样本数据特征)

交叉数据集:

假设数据集A中有数据集B的少部分标签:表示目标域的标签数

假设所有的labels 都在A中,但是所有的推断结果同样适用于全部标签存在于B的情况
相同的样本ID通过采用加密技术的掩码进行隐私保护(如RSA)
假设A和B已知所有共享的相同样本ID,然后任务目标就是双方共同建立一个迁移学习模型来预测目标域的标签,同时要在不暴露彼此数据的条件下尽可能地对精度进行要求

隐藏A和B的表现,生成两个神经网络 ,,d表示隐藏层的维数

为了给目标域建立标签,引入预测函数: 

在没有损失太多一般性的情况下,假设\varphi \left ( u^{B}_{j} \right )=\Phi ^{A}\wp \left ( u_{j}^{B} \right ).

例如,使用一个translator function:

,

Training 

对于方程(7)(8)(9),设计了一个算法1:表示公钥A和公钥B的同态加密。

首先,A 方和 B 方各自初始化参数并且独立运行各自的神经网络Net^{A}Net^{B},得到u_{i}^{A}u_{i}^{B},然后A计算并且加密组件并发送给B,从而帮助B来计算Net^{B}的梯度,在当前场景下,

同样的,B也执行此操作,并发送给A协助A的计算

而在最近,有大量的工作用于讨论这种方法潜在的风险,有可能会存在间接的泄漏(例如梯度)

为了防止知道A和B的梯度,A和B需要进一步地在每个梯度上用一个加密地随机值作为掩码。

接着A和B发送加密后的梯度和损失给彼此,并且得到解密值。一旦B的损失极限到达,A就可以发

将源域中的标记数据拆分为k个折叠,每次保留一个折叠数据作为测试集

将除保留的折叠数据外的数据(带标签)和D_{B}数据集用算法1进行训练得到

通过算法2预测D^{u}_{B}的标签

对B:合并预测标签:DkBDBk =D_{B}\cupDuB

对A、B: 对\bar{D_{A}^{^{k}}}∪DkB∪DBk用算法1训练出,用算法2预测A方的标签(之前保留的测试集)y^{A}_{j}*

对A:,评估误差

最终:计算误差率

Security Analysis
算法1和算法2在每一次迭代执行中都会生成随机的掩码进行梯度加密,整个过程并没有暴露任何信息。

并且A在每一步中只学习了自己本身的梯度,获取的信息不足以来学习到B中的信息(因为n个方程,多于n个的参数,并不能求解),因此,只要加密是安全的,协议就是安全的。同样,A和B彼此都不能学习到对方的信息

在训练过程的最后,每一方都不注意另一方的数据结构,只获得与自身特性相关的模型参数

在推理时,双方需要协同计算预测结果

 BETTER GENERATIVE REPLAY FOR CONTINUAL FEDERATED LEARNING

联邦学习 (FL) 旨在开发一种集中式服务器,该服务器通过通信向分布式客户端学习,而无需访问客户端的本地数据。然而,现有的工作主要集中在单一任务场景中的联邦学习。使用静态数据。在本文中,我们引入了持续联邦学习(CFL)问题,其中客户端逐渐学习新任务,并且由于某些原因(例如存储有限和数据保留策略1)而无法存储历史数据。基于生成回放 (GR) 的方法对于持续学习非常有效,而无需存储历史数据。但是,当尝试直观地使 GR 模型适应此设置时,我们失败了。通过分析客户端在训练过程中的行为,我们发现分布式训练在非IID数据上导致的训练过程不稳定,导致了明显的性能下降。为了解决这个问题,提出了FedCIL

为了克服这些挑战,我们提出了一个联邦类增量学习(FedCIL)框架。在FedCIL中,ACGAN的生成器通过生成先前分布的合成数据进行回放,帮助缓解灾难性的遗忘,同时,它通过在通信过程中传输更好的全局和本地数据分布,有利于联邦学习。我们的模型还受到联邦学习中的隐私约束的影响。在通信过程中,仅传输模型参数。通过提出的全局模型整合和局部一致性执行,我们的模型明显优于基准数据集上的基线。本文的主要贡献如下:

•引入了一个具有挑战性和实际的持续联邦学习问题,即类增量联邦学习(CI-FL),其中全局模型不断从多个客户端那里学习,这些客户端在没有内存缓冲区的情况下逐步学习新类。随后,我们提出了基于生成回放(GR)的方法来应对这一挑战。

• 使用流行的联邦学习算法对高度非 IID 数据进行分布式训练会导致学习过程不稳定,从而导致基于 GR 的模型性能显着下降。基于这一观察结果,我们进一步提出通过模型整合和一致性执行来解决问题。

类增量学习 (CIL)。在类增量学习中,模型从一系列数据分布中顺序学习,表示为 D = {D1 , D2 , ..., Dm},其中每个 Di 是对应任务 T i 的数据分布,标签空间是 Y i 。在 T t 期间,所有数据分布 {Di |i < t} 将不可用,而 CIL 的目标是有效地从 Dt 中学习,同时保持其在学习任务上的性能。在所有 m 个任务之后,模型应将从 D = {D1 , D2 , ..., Dm} 映射样本到 Y 1 ∪ Y2 ...∪ Ym 没有 Task-ID。类增量联邦学习 (CI-FL)。在类增量联邦学习中,每个客户端Ci以类增量的方式在本地顺序从一系列m个任务中学习(表示为Ti = {T 1 i , T 2 i , ..., T m i }),在此期间,客户端在集中式服务器上与全局模型进行通信。CI-FL 的目标是维护一个全局模型,该模型可以预测到目前为止所有客户端看到的所有类别。

  在每次通信期间,服务器模型首先从合并的客户端初始化,然后使用客户端生成器生成的合成样本进行合并。右图说明了客户端(例如客户端 1)的一致性执行,这是通过应用于客户端分类模块的输出日志的一致性损失函数来实现的。

 为了解决这些问题,我们提出了一种新的类增量联邦学习框架(图1)。我们将单个客户端模型 Ci 的所有参数表示为 θi,将全局模型 G 的所有参数表示为 θglobal。客户按顺序学习一系列不重叠的课程。同时,服务器与客户端进行多轮通信,以学习到目前为止所有客户端看到的所有类。在每一轮中,客户端首先从他们自己的数据集中学习当前或新的类,以进行某些迭代。然后,将选定客户端的模型参数发送到服务器,由全局模型聚合参数并进行模型整合,以利用来自不同客户端的知识进行自我丰富。最后,将全局模型的参数发回所有客户端。模型整合。在服务器端,集中式服务器首先接收选定客户端发送的参数(用 θ1, θ2, ...) 表示 Cselected = {C1, C2, ...}。然后合并参数以初始化全局模型。请注意,在 CI-FL 设置中,客户端会不断学习新类,因此,如果任何客户端学习新类,则会将新的输出节点添加到全局模型中。在实际的 CI-FL 设置中,客户端的本地数据通常是非 IID 的,更重要的是,客户端会不断收集和学习新的类,因此在这种情况下,简单地合并参数往往会失败。我们提出通过模型整合来解决这个问题。首先使用合并的参数和来自不同客户端的分类头的集合初始化全局模型。然后,我们使用从选定客户端收集的生成器参数生成平衡的合成数据。最后,通过ACGAN损失函数Lacgan与生成的数据合并全局模型。

  在客户端,每个客户端在本地训练期间都拥有三个模块:(1)一个ACGAN(2)在最后一个任务结束时其自身的生成器G t−1 θG(图1中的黄色生成器)的副本(3)它在最后一次通信中接收到的全局生成器GθG global(图1中的红色生成器)。在本地训练中,客户端首先使用从全局模型接收到的参数 θglobal 初始化自身。在培训期间,客户被期望有效地从新课程中学习,同时保持其在学习课程中的知识。为此,G t−1 θG 生成样本 X g t−1,该样本以先前任务的标签为条件,并将它们与训练数据 X 混合以形成 ACGAN 损失的输入: Llocal = Lacgan(θ, Xg t−1 ∪ X), (11) 尽管客户端的分类器经过训练,可以对真实图像和生成器生成的合成图像(如果它们具有相同的标签)给出相同的预测, 它们的特征可能不同,因为它们的来源不同。将当前模型的生成器、最后一个任务的生成器和接收到的全局模型的生成器生成的样本表示为 X g t−1 和 X g g,将真实样本表示为 X。给定 X g t−1 , X g g 和 X,为了学习更好的全局模型,当它们的标签相同时,它们的特征应该彼此接近。在这种情况下,更容易达到全局最优性,而不是停留在局部最优性或背离。我们建议通过一致性执行来实现它,即将分类器的中间层产生的特征对齐。为了简单起见,我们不是对齐中间层输出的特征,而是尝试通过最后一层(即分类层)对齐它们的输出对数,这在知识蒸馏中很常见。这样,给定具有相同标签但来自不同生成器或真实数据集的不同图像,分类器倾向于输出相似的分布。因此,分类器对来自不同分布的图像更具鲁棒性。我们使用一致性损失函数来确保这一点:

  • 25
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
你好!感谢提问。下面是有关 K210 学习笔记中串口通信的一些内容: 在 K210 开发板上,串口是一种常见的通信接口,用于将数据从一个设备传输到另一个设备。串口通信通常使用 UART (Universal Asynchronous Receiver/Transmitter) 协议。 要在 K210 上进行串口通信,首先需要使用两个引脚:一个用于接收数据(RX),一个用于发送数据(TX)。这些引脚可以通过 GPIO 端口与外部设备连接。 在 K210 的开发环境中,可以使用 MaixPy 或者 Kendryte Standalone SDK 进行串口编程。 在 MaixPy 中,可以使用 `uart` 模块来进行串口通信。例如,要初始化一个串口对象并设置波特率为 115200,可以使用以下代码: ```python from machine import UART uart = UART(UART.UART1, 115200) ``` 然后,可以使用 `uart.write()` 函数发送数据,使用 `uart.read()` 函数接收数据。例如: ```python uart.write("Hello, world!\n") data = uart.read(10) ``` 在 Kendryte Standalone SDK 中,可以使用 `uart.h` 头文件中的函数来进行串口通信。例如,要初始化一个串口对象并设置波特率为 115200,可以使用以下代码: ```c #include "uart.h" uart_init(UART_DEVICE_1, 115200); ``` 然后,可以使用 `uart_send_data()` 函数发送数据,使用 `uart_receive_data()` 函数接收数据。例如: ```c uart_send_data(UART_DEVICE_1, "Hello, world!\n", 14); char buffer[10]; uart_receive_data(UART_DEVICE_1, buffer, 10); ``` 以上是关于 K210 学习笔记中串口通信的简要介绍。如果你有更具体的问题,请随时提问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小小小邱

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值