你的 AI 有训练样本吗?从 0 到 1 教你解决 AI 数据短缺问题

六年前,IBM Watson 进军智能医疗领域,欲通过 AI 解决人类医生都难以解决的医疗问题,一度成为 AI 界的“绝对明星”。但随后,Watson 被爆出无法在现实中胜任医生的工作,给出了一大堆不可靠的医疗建议。最终,Watson 被重磅合作伙伴弃用,其研发团队在经过数次裁员后,也所剩无几。

其实,IBM Watson 的设计思想不但没有错,可能还堪称 AI 医疗“方法论”的缔造者之一。但为什么 IBM Watson 就这样陨落了呢?罪魁祸首其实是数据。

AI 模型的训练需要大量的优质数据。在所有 IBM Watson 可以诊断的单病种中,数据样本量最大的是肺癌,可关于肺癌的数据样本竟然只有 635 例,其中一部分还是人工设计的案例,并非真实的案例。

想以这样的数据量训练出一个可以实际投入生产的 AI 模型无异于痴人说梦。并非 IBM 不想获取更多数据,实是无法获取更多数据。由于隐私保护相关法案的限制,加上一些行业数据离散分布的特性,一个 AI 模型想要获取充足的训练数据是非常困难的。

AI 的现实远比理想要骨感的多。

正是在这种情况下,联邦学习走入了大众眼中。联邦学习本质上是一种加密的分布式机器学习技术,可以在不披露底层数据和加密形态的前提下共建模型。

2016 年,谷歌提出“联邦学习”的概念,为解决此类数据问题提供了新的思路。2018 年,微众银行向 IEEE 标准协会提交关于建立联邦学习标准的提案获批,这也是国际上首个针对人工智能协同技术框架订立标准的项目。2019 年 1 月,微众 AI 团队将工业级联邦学习平台 FATE 开源,终于为数据的联合应用问题夯实了基础。

一、纵、横向联邦学习,保护隐私的同时联合建模

为了在保护数据隐私的情况下实现模型共建,微众银行将联邦学习的应用范畴进行业务扩展,形成了三类体系:纵向联邦学习、横向联邦学习和联邦迁移学习,大赛主要聚焦纵向和横向联邦学习。

纵向和横向联邦学习主要参照用户和用户特征两个维度进行划分。其中,用户维度是指用户 ID,此 ID 一般为一个数据集合,可能包括电话号码、身份证号码等一系列数据,用以区分不同的用户;用户特征维度是指用户财务数据、出行数据、爱好数据等与用户画像有关的特征数据。

接下来,我们分别了解纵向和横向联邦学习的概念,以及其是如何按照用户和用户特征维度进行划分的。

纵向联邦学习

纵向联邦学习是指,在两个数据集的用户重叠较多而用户特征重叠较少的情况下,我们把数据集按照纵向(即特征维度)切分,并取出双方用户相同而用户特征不完全相同的那部分数据进行训练。

比如说,拥有用户财务数据的银行和拥有用户画像的社交媒体公司,在法律层面上是不允许共享数据建立模型的。在这种情况下,纵向联邦学习就派上了用场,先进行样本对齐,继而进行算法拆解,最终在保证数据隐私的情况下建立联合模型,双方皆大欢喜。

横向联邦学习

横向联邦学习是指,在两个数据集的用户特征重叠较多,而用户重叠较少的情况下,我们把数据集按照横向(即用户维度)切分,并取出双方用户特征相同而用户不完全相同的那部分数据进行训练。

最典型的例子是银行间共建反洗钱模型。虽然用户特征重叠很多,但各自样本数量非常单薄。最终的诉求还是在保证各自数据隐私的情况下,共建联合的反洗钱模型,且模型效果超过单边数据建模。

两种联邦学习最终都在不共享数据的情况下,实现了模型的共建,解决了 AI 的数据问题,但业界仍然需要一个工业级的开源平台作为探索联邦学习的基础。

运气不错,微众银行 AI 团队完成了 FATE 平台 的建设并于 2019 年 1 月宣布开源,3 月诞生第一位外部代码贡献者。一个开源的、工业级联邦学习应用构建平台终于到来了。

二、认识 FATE,构建联邦学习应用

FATE 平台通过一站式联合建模帮助开发者快速构建联邦学习应用。

联邦统计主要是对数据进行预处理,比如进行样本对齐、求系数之间的相关性和 IV 值等等;联邦特征工程环节主要是进行数据的特征分箱和特征选择,特征分箱是指将数据进行离散化处理,特征选择主要是指选择部分适合建模的样本特征;在模型训练环节,FATE 已经提供了多种算法给用户进行模型训练,如 Secureboost 等;联邦在线推理则将训练完的模型部署到生产环境,做在线推理。

通过这样的 workflow 就可以非常方便的训练并部署一个联邦学习模型。

而从架构上看,FATE 的核心功能主要分为四层:

  • FATE Workflow:通过 DAG 图定义联邦学习算法工作流。
  • FATE FederatedML Functions:包含联邦学习算法各个功能组件。
  • EggRoll:分布式计算和存储抽象。
  • Federated Network:跨站点网络通信抽象。

其中最核心的部分是 FederatedML Function,分为五层结构:

在部署方式上,FATE 支持单机版部署和集群版部署,集群版部署相对复杂一些,需要大家参考文档进行。

单机 Docker 版安装部署命令如下:

复制代码

git clonehttps://github.com/WeBankFinTech/FATE.git
FATE$sh build_standalone_docker.sh
FATE$CONTAINER_ID='docker run -t -d fate/standalone'
FATE$docker exec -t -i${CONTAINER_ID} bash

部署完成后通过三步即可验证是否成功:

  • 单机版单元测试验证:

复制代码

sh./federatedml/test/run_test.sh
  • Toy-example 测试:用于测试 eggroll 的接口是否完整可用
  • 最小化测试:测试一个最小的建模任务是否能完成

在项目的 example 文件夹下,也实现了很多例子可以作为参考,比如 hetero_feature_binning

这个例子可以方便的让你测试 Feature binning 算法,即一种特征构造方法,测试命令为:

复制代码

shrun_feature_binning_standalone.sh

运行后的日志存放在:

复制代码

your_install_path/ logs /feature_binning_ {timestamp}

也可以点击 这里 访问直播录像教学。

一旦你开始从代码入手,踏上了学习 FATE 及联邦学习的旅途,人工智能就不再是一个空有模型、没有数据的高新概念,而是一个你真正可以触达,可以解决的技术问题。