作为分布式的机器学习范式,联邦学习能够有效解决数据孤岛问题,让参与方在不共享数据的基础上联合建模,挖掘数据价值。
近两年,联邦学习技术发展迅速,阿里、腾讯、百度、京东、蚂蚁金服、微众银行等一众互联网大厂、金融科技公司皆涉足其中。前不久,字节跳动联邦学习技术团队也开源了自研的联邦学习平台 Fedlearner 。
据介绍,字节跳动联邦学习平台 Fedlearner 已经在电商、金融、教育等行业多个落地场景实际应用。字节跳动联邦学习技术负责人吴迪在接受 InfoQ 专访时表示,联邦学习面临的困难更多是如何为客户争取可感知的最大商业价值,不同行业的伙伴,其产品特点和价值诉求各不相同。
得益于字节跳动在推荐和广告领域长期积累的机器学习建模技术,字节跳动联邦学习找到了帮助企业客户取得可感知商业价值的方向,即基于字节跳动的个性化推荐算法、模型优势,探索、寻找落地场景。例如在电商广告场景的落地案例中,Fedlearner 已经帮助合作方取得了 10% 以上的投放效率增长,跑量消耗提升 15%+,电商平台 ROI 提升 20%+。
除了电商行业,在与教育行业头部客户共同探索联邦学习落地的过程中,效果也得到了比较好的印证,帮助教育客户广告跑量提升 124.73%,正价课续报人数提升 211.54%,续报率提升 32.69%,正价课续费用户获客成本降低 11.73%。
即便如此,从整个行业来说,目前联邦学习技术的落地仍然存在困难,在安全与效率的兼顾和平衡上,在建模能力和机器学习算法的进化上,平台与企业需要做的事情还有很多。
本文中,我们将分享字节跳动联邦学习平台 Fedlearner 的技术实现与落地应用经验,看字节跳动如何寻找联邦学习落地难题的突破口。
1、联邦学习平台 Fedlearner 的技术落地与挑战
字节跳动联邦学习团队在 2020 年初低调开源了自研的联邦学习平台 Fedlearner(项目地址:https://github.com/bytedance/fedlearner ),并一直持续更新,在 2020 年 10 月 26 日上线了 v1.5 版本。
吴迪对 InfoQ 表示:「之所以开源 Fedlearner ,一方面是字节跳动拥有海量的用户数据,深知保护用户数据安全的重要性,希望通过开源 Fedlearner ,和行业伙伴一起推动隐私计算的发展,与客户一起保护用户数据安全。另一方面,在保护用户数据安全的同时,也建立我们平台开放透明的机制,提升客户的信任度。」
Fedlearner 联邦学习平台可以支持多类联邦学习模式,整个系统包括控制台、训练器、数据处理、数据存储等模块,各模块对称部署在参与联邦的双方的集群上,透过代理互相通信,实现训练。
数据求交
Fedlearner 双方在发起训练之前,必须要基于双方的数据进行求交,找出交集从而实现模型训练。通常情况下,训练数据求交的方式主要分为两种,一种是流式数据求交,一种是 PSI 数据求交。
流式数据求交
流式数据通常是指由共同在线流量产生的数据,例如在广告场景下,用户点击一次广告,会在媒体平台和广告主两侧各自产生一条数据记录。为了基于 Fedlearner 联合训练模型,必须先把这两条数据记录对齐并生成一条样本。
不过,在流式数据的场景下,因为数据落盘时间、样本存储可靠性都无法统一,而且双方还会存在样本缺失和样本顺序不统一的问题。因此,必须有一套协议,把双方样本按样本 example_id 取交集并统一排序,计算出双方共有的样本条目用来进行模型训练。
如前所述,Fedlearner 目前应用的场景大多需要处理大规模数据,为此,在流式数据处理中,Fedlearner 预先把数据按照 example_id 哈希分为 N 个 partition。求交时双方各自拉起 N 个 worker,配对后形成 N 对,每对处理一个 partition。每对 worker 中,担任 leader 的 worker 向 follower 顺序发送自己数据流中的 example_id,follower 收到后和自己的本地数据流求交,然后把交集发送回 leader。
实际处理过程中,进行联邦学习训练的双方,其数据处理流程通常是不同的,样本在双方的存储调用顺序也都是不同的。所以在求交时,通常会使用 key-value 查询机制,这种查询机制是随机访问全量数据进行查询,但是随机访问全量数据的代价过大,比如为了处理大数据量,KV 数据库搭建和维护的成本就非常高。
为了解决这一问题, Fedlearner 采用了时间窗的方式,即在内存里维护两侧时间相近的样本,放弃少部分超出时间窗的样本,从而大大降低了设备和运维成本。
PSI 数据求交
与流式数据不同,还有一些场景下的数据,并不是由共同的线上流量产生的,而是由各方独自记录,例如不同金融机构记录的用户画像数据。
对于此类由各方独自记录的数据,进行模型训练之前,需要使用双方共有的用户信息(例如用户 ID )来找出双方用户的交集。例如,A 机构有 2 亿用户数据,B 机构有 4 亿用户数据,如果希望求出 A 与 B 机构共有的 1.5 亿用户,就需要找出双方机构中相同的用户 ID,以此来找出双方交集的 1.5 亿用户。
不过,在双方找出交集的过程中,A 机构不希望将自身用户中不与 B 机构相交的 0.5 亿用户泄露给对方,同样,B 机构也不希望将自身用户中不与 A 机构相交的 2.5 亿用户泄露给对方。
为此,Fedlearner 团队采用了 PSI(Private Set Interp,隐私保护集合交集)加密数据求交的方式。
PSI 加密数据求交方式允许持有各自集合的两方来共同计算两个集合的交集。在这个过程中,无论是在传输还是在计算时,双方真实的用户 ID 都会被加密和隐藏起来,这样,在计算交互的最后,一方或是两方都可以得到正确的交集,而且不会得到交集以外另一方集合中的任何信息。
由于需要处理离线单独存储的数据,PSI 加密数据求交的方式需要分为两步。首先是在离线场景下,对双方的全量 ID 进行安全加密,基本流程是:
字节将全量的原始字节 ID 用私钥加密并哈希,把原始字节 ID 映射到哈希加密字节 ID 落入数据库;
客户将全量或增量的原始客户 ID 加盲,传输给字节;
字节对收到的加盲数据用私钥加密,将加密的结果回传给客户;
客户对收到的加密加盲数据去盲并哈希,把哈希加密客户 ID 映射回原始客户 ID 落入数据库。
离线场景完成之后,双方就可以在在线场景中进行实时求交:
字节将实时流量的原始字节 ID 查询出哈希加密字节 ID,传输给客户;
客户把收到的哈希加密字节 ID 与数据库中的哈希加密客户 ID 求交,交集可映射回原始共有 ID;
客户根据业务决定是否回传、回传什么信息。
模型训练
联邦学习技术本质上是为了帮助联邦双方更好地训练模型。不同公司由于此前积累的数据类型特征不同,落地应用场景不同,会采用不同的模型训练方式。
常见的模型训练包括神经网络模型训练、树模型训练、线性回归模型训练等等。其中,神经网络训练模型最常见的落地应用场景是推荐,包括个性化内容推荐、广告推荐等等,而树模型更多在金融领域建模信用 / 风险等指标时常用。
由于字节跳动在个性化推荐技术上积累较多,Fedlearner 的模型训练也主要以神经网络模型训练、树模型训练为主。
神经网络模型训练
按照特征分布的不同,联邦学习的神经网络模型训练可以分为纵向(Cross-silo)和横向(Cross-device)两种模式。纵向模式下,每个参与方拥有相同样本的不同维度的特征,模型被分为两部分,类似模型并行训练。横向模式下,每个参与方拥有不同样本的相同维度的特征,每个参与方都有一份模型的拷贝,类似数据并行训练。
纵向与横向两种训练模式可以归约于一个框架,既一对 worker 各自执行一个神经网络,并通信中间结果和梯度。为了支持这种模式,Fedlearner 实现了一个基于 gRPC 的通信协议,并以算子的形式集成到 TensorFlow 中:
bridge = bfl.bridge.Bridge(50051, 'localhost:50052')
bridge.wait_for_remote_startup()
g = tf.Graph()
with g.as_default():
x = tf.placeholder(tf.float32)
w1 = bridge.receive_op('w1', dtype=tf.float32)
...
send_gw1 = bridge.send_op('gw1', gw1)
dataset = MnistData()
sampler = bfl.data.SequentialSampler(dataset)
data_loader = bfl.data.DataLoader(bridge, 'leader', dataset, 256, sampler)
with tf.Session(graph=g) as sess:
sess.run(tf.global_variables_initializer())
for round_id, (np_x, np_y) in data_loader:
bridge.start(round_id)
print sess.run([...], feed_dict={...})
bridge.commit()
利用该通信协议,算法工程师只要在普通 TensorFlow 模型代码里加上发送算子(send_op)和接收算子(receive_op),就可以将其改为支持联邦训练的模型。
基于神经网络模型训练,Fedlearner 目前最大处理过高达 40TB 的数据,在不稳定的公网通信环境下, 可以使用极少的资源快速稳定地完成训练数据求交和模型训练,迭代效率较高。
树模型训练
与神经网络模型训练不同,树模型训练目前只支持两方纵向学习模式,一方提供特征,另一方提供 label 和特征。为了在保护双方数据和标签隐私的前提下进行模型训练,同时性能要满足实际使用要求,Fedlearner 树模型的训练器采用了 SecureBoost 算法:
拥有 label 的一方对每个样本计算梯度后使用 Paillier 加密算法对梯度加密,然后发送给另一方;
另一方利用 Paillier 加密的半同态特性,在密文域上计算按特征值分桶的梯度统计,然后回传;
最后拥有 label 的一方解密统计值,找到最优分割点。
从模型训练的成绩来看,字节跳动联邦学习平台 Fedlearner 的数据已经可以和行业其他对手媲美,甚至超过了对手。
此前,字节跳动联邦学习团队将 Fedlearner 和微众银行 FATE 上的树模型在单机上进行了性能对比。基于 MINST 数据集的训练指标显示,在两边参数设置一致的情况下,双方训练后的模型准确度、F1、AUC、KS 等指标基本一致,差别在小数点后三位以后才出现。
MINST 数据集上的训练指标。
双方的主要差距出现在模型训练速度上,经过 5 轮迭代平均训练,Fedlearner 的训练速度相较于 FATE 有约 17.2% 的优势。
一键部署、可视化平台
为了处理大规模数据,Fedlearner 的数据求交和模型训练都依赖分布式计算和存储系统。为此,字节跳动联邦学习团队开发了基于 Kubernetes+HDFS/MySQL/Elasticsearch 的解决方案,由 Kubernetes 管理集群和任务。其中,在阿里云等公有云上,用户可以使用一键脚本快速建立整个集群。
整个系统使用 K8s Helm Charts 系统集成部署,用户只要准备好一个标准的 K8s 集群和 HDFS/MySQL 服务,就可以使用 Helm 一键部署好整个系统。
系统部署好之后,K8s 集群可以自动调度联邦学习任务,每个 Fedlearner 任务都需要在参与双方各自拉起一个 K8s 任务,两个任务的 worker 需要互相配对通信,字节跳动联邦学习团队通过自定义 K8s Controller 和 Ingress-NGINX 实现了配对和加密跨机房通信。
由于 K8s 自身只提供命令行 +YAML 管理任务,为了方便算法工程师使用,字节跳动联邦学习团队开发了可视化 Web 平台,用户可以在平台上提交任务、查看进度、分析结果。
Fedlearner 任务需要参与双方同步拉起,为了减少双方沟通成本,字节跳动联邦学习团队还开发了基于 Ticket 的预授权系统,一方只要创建一个 Ticket 规定授权范围,另一方就可以自主发起多次训练和预测任务。
2、Fedlearner 落地应用:广告投放增效 209%
目前,在字节跳动内部,Fedlearner 已经通过技术赋能的方式连通散落在各部门和业务的数据,在保护用户、公司数据隐私安全的前提下,帮助业务挖掘数据在各业务场景下的价值。在外部市场上,字节跳动也正推动 Fedlearner 在电商、金融、教育等各个垂直行业落地,与行业头部客户合作进行技术沉淀及商业收益的验证。
「最大的挑战是如何为客户争取可感知的最大商业价值,Fedlearner 提供了良好的安全保障以及完整的联邦学习生态,这为落地部署提供了扎实的基础。」吴迪表示,「但从‘技术基础’到‘最终的商业价值增量’之间,仍然有较大的距离。」
目前市场上开放的联邦学习平台很多,每家平台的数据优势各不相同。吴迪认为企业需要根据自己的业务目标选择合适的联邦学习平台。
而对于 Fedlearner 来说,最大的优势除了技术上的训练速度、效率之外,无疑是字节跳动在推荐和广告领域长期积累的机器学习建模技术。例如在电商广告场景,电商广告主会在字节跳动的巨量引擎平台上投放商品广告,巨量引擎和电商广告主都希望提升广告投放 ROI,共同优化深度转化,即购买事件。但电商广告主通常不希望将商品详情、用户购买历史等敏感信息回传到巨量引擎平台,这种情况下,Fedlearner 的能力就得以体现了。
这种场景下,联邦学习平台的实现流程大致可以分为两部分。
首先是在线部分流程:
当用户访问巨量引擎支持的抖音、头条等产品平台时,巨量引擎平台会使用 CTR/CVR 模型排序找到点击率 / 转化率最高的广告展示给用户;
用户点击广告后,会跳转到电商广告主一侧的购物页面上,同时电商广告主和巨量引擎平台都会记录下这次点击事件,并且两边使用相同的 example_id 进行标记;
在电商广告主一侧的购物页面上,用户可能选择购买(转化)或不购买相关商品,广告主会记录用户行为作为 label。
离线部分流程:
电商广告主和巨量引擎平台,双方使用在线记录的 example_id 对齐数据和 label ,然后按照对齐的顺序读取数据;
模型分为两半,巨量引擎平台将数据输入前一半,得到中间结果(embedding)后发送给电商广告主;
电商广告主计算后一半模型,然后用自己记录的 label 计算 loss 和梯度,然后将梯度回传给巨量引擎平台;
最后电商广告主和巨量引擎平台各自更新模型。
基于以上方案,结合巨量引擎平台一侧的用户内容兴趣标签和电商广告主一侧的用户交易行为及商品标签,使用 Fedlearner 联邦学习平台联合建模,可以充分发挥双方数据的互补性,优化广告召回、精排 CTR、CVR 模型等多个模块。
在实际合作案例中,取得了 10% 以上的投放效率增长,并辅助提升了拿量和 ROI 。
「这种落地与应用,除了技术上的优势之外,高质量的数据是非常关键的。」吴迪说道,「训练数据是机器学习的核心基石,在联邦学习场景也不例外,选择与商业目标高度相关、表达能力强的训练数据,可以加快获得极致的商业价值。」
字节跳动旗下的营销平台巨量引擎,依托今日头条、抖音的数据优势,基于 600T+ 的海量用户群体画像,对用户行为特征进行动态分析、深度建模,拥有超过 220 万用户标签。这些数据对于很多行业和企业都具有极高的商业价值。
例如,在线教育行业里,因为正价课付费人群数据是核心营收数据,所以很多客户对正价课付费人群数据严格保密,无法输出至巨量引擎服务器。但是,正价课付费是在线教育广告最核心的转化及考核目标,客户也希望提升正价课付费 / 续课率。
基于 Fedlearner,通过「联邦学习 - 巨量引擎单侧特征模型」的方法,可以实现巨量引擎侧和教育客户侧各自提供用户标识 + 特征 / 标签,数据取交集后共同建模。这种方法在不获知用户深度行为标签(即哪些人购买了正价课)的同时,具备预测深度正价课转化率的能力。结合在广告精排阶段的动态出价调整,就能优化在线教育广告的正价课转化率,提升客户获客 ROI。
基于以上方案,字节跳动联邦学习目前与在线教育行业多家头部客户深入合作探索,帮助教育客户广告跑量提升 124%,正价课续报人数提升 209%,续报率提升 33.1%,正价课续费用户获客成本降低 11.7%。
3、联邦学习亟需解决安全与效率的冲突
在吴迪看来,联邦学习目前还处于「早期采用」阶段,无论是字节跳动的 Fedlearner 还是过去两年国内外科技公司陆续推出的一系列联邦学习平台,都还面临着各式各样的挑战。
基于字节跳动开发 Fedlearner 联邦学习平台和字节跳动落地联邦学习技术的经验,吴迪总结了联邦学习技术的四大挑战。
第一是安全性。
联邦学习天然有无可比拟的安全性优势,近两年全球各国对数据安全的重视和严格规范,是联邦学习持续加速发展的动力。
但在机器学习范畴内,仍然存在一些安全方面的挑战。例如,训练过程中的梯度是否有可能让合作者 A 猜出合作者 B 的 label 分布从而泄露用户行为的统计信息?类似的,A 方是否有可能猜测出 B 方的特征分布,或者把 B 方传递过去的中间产物(例如 activation 的 output)使用在其他模型中?这些「安全性」问题,有些可以通过同态 / 半同态加密等传统手段解决,有些则需要通过创新的机器学习算法和框架解决。例如,为进一步确保客户侧的数据安全,Fedlearner 就在联邦学习框架及神经网络模型的基础上,针对 label 及 Embedding 采用加密算法升级隐私保护。
第二是效率。
虽然字节跳动的 Fedlearner 在推荐、广告、用户增长等场景下取得了一些成果,但吴迪表示,在这些场景中依然存在严峻的大规模数据和训练效率的挑战。例如能否在彼此数据不可见的情况下,在若干小时内完成超过几十亿行训练样本集合的对齐和预处理,并且通过有限且不稳定的网络连接在数小时内完成全部样本的多轮训练,这对团队的要求很高。
除了对团队的挑战之外,效率也会给安全带来挑战。「越强的数据安全要求,越会带来数据处理效率和训练效率的下降,还会限制机器学习算法的选择空间,安全和效率之间需要更优的兼顾与平衡。」吴迪表示,「团队正在探索新的机器学习算法和框架,也涵盖了软硬一体等诸多技术方案,目前整个行业也有大量的针对性投入,相信在不久的将来会看到大量技术突破。」
第三是建模能力和机器学习算法。
包括字节跳动 Fedlearner 在内的各种联邦学习平台上,联邦的双方都看不到对方的原始数据,甚至有时候双方还会隐藏各自的神经网络结构。这样的做法,很大程度上保证了数据的安全性,但从技术角度看,也使得「可解释性、可 debug」的难度升高了。
那么,如何在看不到双方特征的情况下进行特征工程处理,筛选出重要的「好特征」,如何进行模型效果的 troubleshooting,一步步把模型迭代到极致,这给联邦学习技术团队的建模能力、机器学习算法能力带来了极大的挑战。
第四是友好性。
联邦学习的一个关键词是「合作」,合作越广泛则达到的效果越好。这也意味着必须不断降低参与联邦建模的技术门槛,由此带来了诸多挑战,包括:快速部署(物理服务器 / 私有云 / 各种公有云等)、易于接入、一键式的训练和服务能力等。
以上这些,都是整个行业所面临的挑战,以及需要继续深入研究和探讨的问题。