• 联邦学习: 联邦场景下的时空数据挖掘


    不论你望得多远,仍然有无限的空间在外边,不论你数多久,仍然有无限的时间数不清。——惠特曼《自己之歌》

    1. 导引

    时空数据挖掘做为智慧城市的重要组成部分,和我们的日常生活息息相关。如我们打开地图软件,会根据交通流量的预测为我们推荐路线;通过网约车软件下单,会为我们就近做订单匹配等等。

    然而,时空数据挖掘在实际使用的过程中会面临一个难点,那就是跨平台协作。比如在疫情期间,我们需要对确诊病例的行程轨迹做追溯。而我们知道,一个人在行程中可能会使用多个软件,比如滴滴出行、共享单车乃至健身软件等。而如何让信息在不同平台间共享便成为难点。

    此外,在打车场景中也会面临此问题。一个用户在A于高峰期在平台A叫了一辆车,但是周围没有司机,订单因此取消了。然而,另一个平台B在周围有空闲的司机。而由于数据隔绝,该订单并不能够被B接收,这样就白白造成了资源的浪费,不仅降低了平台的收入也降低了用户的体验。

    时空联邦计算是对该问题的一个有效解决方式。“数据不动计算动”的思想能够有效打破数据孤岛(data silo),实现跨平台的信息共享。

    和传统联邦学习一样,时空联邦计算也可分为跨设备(cross-device)和跨筒仓(cross-silo)两种。跨设备类型中参与方为边缘设备,在我们此处的时空数据挖掘场景下常常是交通流量监测的传感器。而在跨筒仓的类型中参与方多为各企业或组织,在我们此处的场景下常常是各共享单车和网约车的服务商。在科研中,联邦时空数据挖掘会带来包括但不限于下列的几个议题:

    • 对通信的效率要求更高,但是问题常常具有一定的容错性,这就允许我们采用随机算法进行加速。比如一个共享单车服务商可能会频繁处理“在地铁站方圆2km内有多少共享单车”,然而现实中有多个共享单车服务商,为了不逐一查询,我们可以用随机采样进行查询的方法来近似查询结果。

    • 特别地,对于跨设备类型而言,可能还需要考虑各节点之间的空间关系,此时往往将各个节点及其之间的空间关系建模为图数据结构。

    • 问题类型多样,可能还会牵涉到组合优化、强化学习等,导致每轮迭代的聚合内容不同于普通的联邦优化算法,

    这里特别提一下北京航空航天大学的童咏昕组Big Data Analysis Group,近年来他们组在联邦学习和时空数据挖掘方面做了不少工作,大家可以特别关注下。

    2. 联邦时空数据挖掘经典论文阅读

    2.1 SIGKDD 2021:《Cross-Node Federated Graph Neural Network for Spatio-Temporal Data Modeling》

    本篇文章的靓点在于用GRU网络学习各节点的时序数据的同时,用GNN去学习节点之间的拓扑关系信息。虽然用GNN学习网络拓扑信息也不是这篇论文首创了,早在2019年就有人这么做过[2],但将时间和空间一起考虑据我所知确实是首次。

    论文将所有节点和其网络连接视为图G=(V,E)G=(V,E),节点iViV的嵌入向量为vivi,边kEkE的嵌入向量为ekek,图的全局嵌入向量为uu。图GG的邻接矩阵WW由带阈值的高斯核函数构造,满足Wi,j=di,j if di,jκ else 0,这里di,j=exp(dist(i,j)2σ2)dist(i,j)表示传感器ij之间的公路网络距离,σ是所有距离的标准差。

    每个节点i用编码器-解码器结构(其中编码器和解码器都为GRU)得到节点时序数据的预测信息:

    hi=Encoderi(xi;θ[i,1])ˆyi=Decoderi(xi,[hi;vi];θ[i,2])

    然后计算损失函数

    li=l(ˆyi,y),

    这里xi是节点i的输入时序数据,hi是编码器GRU的最后一个状态, ˆyi是预测标签,θ[i,1]θ[i,2]分别是编码器和解码器对应的参数。

    sever将所有节点的隐藏层向量集合{hi}iV做为图网络GN的输入,从而得到所有节点的嵌入向量集合{vi}iV。图网络的每一层都分为以下三步(论文共设置了两层并采用残差连接):

    ① 计算更新后的边k的嵌入向量:

    ek=MLPe(ek,vrk,vsk,u)

    ② 计算更新后的点i的嵌入向量(需要先聚合其邻边集合的信息):

    vi=MLPv(Aggregateev({ek|rk=i}),vi,u)

    ③ 计算更新后的全局嵌入向量(需要先聚合所有点和所有边的嵌入信息):

    u=MLPu(Aggregateeu({ek}kE),Aggregatevu({vi}iV),u)

    对于图网络的第一层,论文设置vi=hiek=Wrk,sk(W为邻接矩阵,rksk为边k对应的两个节点),u0向量。这里将图网络的参数记作θGN


    综上,该论文的算法每轮迭代的流程可描述如下:

    (1) server执行:

    • 等待每个节点运行ClientUpdate,得到更新后的编码器-解码器参数θi
    • 对所有节点更新后的编码器-解码器参数集合{θi}iV进行聚合:

      ¯θ=iVNiNθi

    • 等待每个节点运行ClientEncode得到隐藏层向量hi
    • 进行多轮迭代以更新图网络参数θGN,在每轮迭代中依次进行以下操作:
      • 计算所有节点的点嵌入向量:

      {vi}iV=GN({hi}iV;θGN)

      • {vi}iV发往各节点。
      • 等待每个节点运行ClientBackward得到vili并将其发往server。
      • 收集{vili}iV,并从{vi}iV开始继续进行反向传播得到{θGNli}iV
      • 更新图网络参数θGN

        θGN=θGNηiVθGNli

    • 更新节点嵌入向量

      {vi}iV=GN({hi}iV;θGN)

    • {vi}iV发往client。

    (2) 第i个client所执行操作的具体定义如下:

    ClientUpdate

    • 进行多轮的局部迭代以更新参数θi:

      θi=θiηθili

    • θi发往server。

    ClientEncode

    • 计算hi=Encoderi(xi;θ[i,1])并发往server。

    ClientBackward

    • 计算vili并发往server。

    2.2 TKDE 2021:《Efficient Approximate Range Aggregation over Large-scale Spatial Data Federation》[2]

    本文讨论了在联邦场景下的空间数据聚合查询,比如共享单车服务商就经常会处理“在地铁站方圆2公里内有多少量共享单车”这类查询。该算法在公共卫生响应、城市环境监测等领域都有广泛的应用。

    设空间对象为lo,ao,其中lo是空间对象的位置,a0是相应的测量属性,如l0可以为出租车的GPS位置,a0为其速度。

    假定有K个client(数据筒仓)。Ok={o1,o2,,onk}为在第k个client中的空间对象集合,O为所有空间数据对象集合。因为论文采用横向联邦学习(数据划分),满足所有空间对象集合O=Kk=1{Ok}

    给定拥有空间数据对象集合O的联邦S,一个查询范围R与一个聚合函数F,则我们定义一个联邦范围聚合(Federated Range Aggregation, FRA)查询为:

    Q(R,F)=F({aooO,o is within R})

    而对于在联邦场景下的第k个client,则只能回答查询Q(R,F)k=F({a0oOk,o is within R})。注意R可以是圆型或矩形的。论文的算法就是要去获得查询结果的Q(R,F)近似值(出于效率考虑不要求遍历每个client以获得精确值)。

    若假定有两个数据筒仓,筒仓1有10个空间数据对象,筒仓2有8个空间数据对象。则下图展示了对坐标(4,6)方圆3个坐标单位内的对象属性和进行查询(筒仓1对象标注为蓝色,筒仓2对象标注为红色):

    在运行联邦查询算法之前,第k个client需要先构建其中数据的网格索引集合gk,然后将其发送到server。server将其聚合得到g={g1,,gK}

    然后,给定查询范围R,聚合函数F,则回答查询Q(R,F)的流程可描述如下(若假定空间数据对象在不同节点间呈现IID分布):

    • 随机选取一个节点k

    • (R,F)发送到节点k

    • 从节点k接收查询结果resk

    • sum=0,sumk=0(前者为所有节点中对象的属性之和,后者为第k个节点中对象的属性之和)。

    • 对网格索引集合g中的每一个与查询范围R有交集的网格i,执行:

      sum=sum+F({aooi})sumk=sumk+F({aooiigk})

    • 计算ans=resk×(sum/sumk)

    • 返回ans

    回到上面图中的例子,假定随机采中的节点为silo#2。算法依次遍历左上角的3×3网格,计算出所有节点中空间对象的属性之和sum=4+0+0(first row)+2+2+4(second row)+4+1+4(third row)=21,节点2中空间对象的属性之和sum2=3+0+0+0+1+2+0+1+4=11,而节点2中在R范围内的空间对象属性之和res2=1+2+1=4,则可得到范围R所有对象属性和的近似计算结果4×(21/11)=7.6

    其中,论文在节点k的本地查询过程中提出一种特殊的称为LSR-Forest的索引技术,为每个数据筒仓加速了本地的范围聚合查询。

    整体算法流程描述如下:

    不过上述算法假定空间数据对象在不同节点间呈现IID分布,这样才能直接从来自某个随机节点的查询结果resk(论文中称为partial answer,可视为一种有偏估计)推出所有节点的查询结果。 而对于Non-IID的情况,则需要将算法修改为:

    • 随机选取一个节点k

    • 将查询(R,F)发送到节点k

    • 从节点k接收查询结果res1k,,res|gk|k(其中resik表示k节点内i网格中的对象属性和)。

    • ans=0

    • 对网格索引集合g中的每一个与查询范围R有交集的网格i,执行:

      esti=resik×F({ao|oi})F({ao|oiigk})ans=ans+esti

    • 返回ans

    2.3 KDD 2022:《Fed-LTD: Towards Cross-Platform Ride Hailing via Federated Learning to Dispatch》[3]

    本篇论文旨在解决跨平台叫车问题,即多平台在不共享数据的情况下协同进行订单分配。本文的靓点在于将原本用于求解多时间步二分图最大匹配问题的强化学习算法扩展到联邦场景下,同时结合MD5+局部敏感性哈希保证了数据的隐私性。

    U为司机集合,uU表示一个司机,u.loc为该司机的位置(用网格坐标表示); V为订单集合,vV表示一个订单,v.originv.destination分别为乘客目前位置和目的地位置,v.reward为订单的收入。司机和用户集合能够形成一个二分图G=(UV,E),这里每条边e=(u,v)E都有对应权重w(u,v)=v.reward。当u.locv.origin之间的距离超过阈值R时边会被截断。

    定义M是一个在二分图G上的匹配结果,该匹配结果为司机-订单对的集合,其中每个元素(u,v)满足uU,vVuv只在M中出现一次。我们定义以下功效函数做为M中的边权和:

    SUM(M(G))=(u,v)Mw(u,v)

    给定二分图G,找到能够最大化SUM(M(G))的匹配结果M是经典的二分图最大匹配问题,可以用匈牙利算法在多项式时间内求解。不过在实际的订单分配场景下,订单和司机都是以在线(online)的形式到达的,基于批处理的模型在这种场景下被广泛应用。若给定批量序列1,2,,T,在t时刻待匹配的司机和订单形成二分图Gt, 此时订单分配问题可以定义如下:

    maxTt=1SUM(Mt(Gt))

    最朴素的方法是为每个批量分别进行二分图最大匹配。不过,在大规模历史数据的帮助下,基于强化学习的方法能够取得更好的效果。

    我们将司机视为智能体,他们的地理位置视为状态,选定接下某个订单或保持空闲为动作,价值函数为在特定状态的期望累积奖励:

    V(st)=E[trt|st]

    这里st是状态向量,rt是第t个批量的奖励和。价值函数按照Bellman方程来更新:

    V(st)V(st)+αu(rtu+γV(st+1v)V(stu))

    这里uv分别是司机和订单,α是学习率,γ是折扣因子。然后,分配决策可以由各个参与方基于学得的价值来决定。

    w(u,v)=v.reward+γV(st+1e)V(stu)

    在对二分图的边权进行更新后,就能够使用匈牙利算法来求解本地分配决策问题了。

    具体在联邦场景下,正如local SGD有其联邦版本FedAvg,这里的基于强化学习的Learning-to-Dispatch(LTD)方法也有其对应的联邦版本Fed-LTD,算法每轮迭代(对应一个批量)的流程可描述如下:

    (1) 第k个client节点执行:

    • 更新Vk:

    Vk(st)=Vk(st)+ηu(rtu+γVk(st+1v)Vk(stu))

    • 计算ΔVk=VkVk
    • ΔVk进行编码:Δ˜Vk=Encode(ΔVk)
    • 更新边权:

      w(u,v)=v.reward+γV(st+1e)V(stu)

    • 运行匹配算法并得到M(Gk)
    • 计算残差二分图GΔk=GkM(Gk)
    • GΔk进行编码:˜GΔk= EncodeRBG (GΔk)
    • Δ˜Vk˜GΔk发送到server。

    (2) server执行:

    • td轮聚合一次价值:V=V+Kk=1Δ˜Vk.
    • 对各节点残差二分图进行聚合:GΔ=DecodeRBG(˜GΔ1,ˉGΔK)
    • 运行匹配算法得到M(GΔ)
    • VM(GΔ)发往各client节点。

    上面的算法描述中对ΔVkEncode操作为随机掩码(random masking)。其中残差二分图(residual bipartite graph, RBG)GΔk是指在每一轮迭代进行局部二分图匹配后,每个client剩下的还未匹配的节点。对GΔkEncodeRBG操作为MD5+局部敏感性哈希(locality sensitive hashing, LSH), 还函数会生成图节点的安全签名;server则能够通过DecodeRBG操作恢复残差二分图。

    完整的算法流程示意图如下:

    参考

    • [1]
      Meng C, Rambhatla S, Liu Y. Cross-node federated graph neural network for spatio-temporal data modeling[C]//Proceedings of the 27th ACM SIGKDD Conference on Knowledge Discovery & Data Mining. 2021: 1202-1211.
    • [2] Shi Y, Tong Y, Zeng Y, et al. Efficient Approximate Range Aggregation over Large-scale Spatial Data Federation[J]. IEEE Transactions on Knowledge and Data Engineering, 2021.
    • [3] Yansheng Wang, Yongxin Tong, Zimu Zhou, Ziyao Ren, Yi Xu, Guobin Wu, Weifeng Lv. "Fed-LTD: Towards Cross-Platform Ride Hailing via Federated Learning to Dispatch", in Proceedings of the 28th ACM SIGKDD Conference on Knowledge Discovery and Data Mining, Washington D.C., USA, August 14-18, 2022.

    __EOF__

  • 本文作者: 猎户座
  • 本文链接: https://www.cnblogs.com/orion-orion/p/16500126.html
  • 关于博主: 本科CS系蒟蒻,机器学习半吊子,并行计算混子。
  • 版权声明: 欢迎您对我的文章进行转载,但请务必保留原始出处哦(*^▽^*)。
  • 声援博主: 如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。
  • 相关阅读:
    解决VSCODE 终端中显示中文乱码的问题
    FullGC 过多 为什么会让CPU飙升100%
    c语言经典测试题7
    抱怨身处黑暗,不如提灯前行
    mybatisplus多租户原理略解
    SpringBoot基于Netty实现对接硬件,接受硬件报文
    《阿里云天池大赛赛题解析》——O2O优惠卷预测
    【无标题】
    HTTP/1.1、HTTP/2
    运行检测Java版本的代码出现Failed to resolve SDK
  • 原文地址:https://www.cnblogs.com/orion-orion/p/16500126.html