以前人脸识别在很多人的印象中,仅存在于虚拟的科幻电影中。但如今随着技术的快速发展,人脸识别技术已走进每家每户,平时进小区、过安检、用一下手机……都免不了需要“刷”脸。人脸识别技术给我们的生活制造了许多便利,但与此同时,也给我们带来了诸多安全挑战。
人脸数据作为个人信息的重要载体,“如何在人脸识别技术落地的过程中,安全有效地保护数据安全”成为大家需要探讨的问题。针对人脸识别训练的数据安全问题,腾讯优图实验室研发了一种基于联邦学习的人脸识别训练框架,通过引入局部联邦动量和联邦验证,可以有效提升联邦范式下的人脸识别效果,不仅能够解决数据孤岛问题,同时还具有模型质量无损、确保数据安全的优势。
近日,腾讯优图实验室优Tech分享系列以「基于数据安全保护的人脸识别方法」为主题,分别从人脸识别数据安全背景、人脸识别技术介绍、基于联邦学习的人脸识别训练等角度,进行了详细讲解。
01
人脸识别数据安全背景
近年来关于“人脸数据泄露事件”偶有发生,相关事件引起了社会大众的广泛关注,也推动了相关法律法规的完善和落地。
数据安全保护相关法律法规
数据安全保护相关的法律法规一直在不断演进中,影响比较大的是欧盟2018年提出的《通用数据保护条例》,简称为“GDPR”。我国于今年11月正式出台《个人信息保护法》,为保护个人信息权益提供了明确的法律依据。
02
人脸识别技术介绍
人脸识别技术流程
人脸识别应用通常由如下几个流程组成,输入一张图片后,首先会经过人脸检测、人脸配准、人脸活体、人脸识别提特征四个步骤,然后再去做1v1以及1vN的比对。
- 人脸检测:直接输出一个人脸检测框的位置;
- 人脸配准:输出人脸五点坐标,并且将图像做相应的处理;
- 人脸活体:判断这张照片是不是真人的照片;
- 人脸识别提特征:图片输入网络中得到特征向量;
- 1v1比对:将两张图片的特征做比对;
- 1vN比对:将一张图片与库内所有的特征做比对,检索出TOPk。
人脸识别模型训练与部署
人脸识别的流程核心在于人脸提特征模型,目前主流的人脸识别训练方法以数据集中式训练为主,通过对损失函数进行优化来提升模型的效果,需要收集数据,然后进行训练,随着监管力度的不断加强,这种集中式训练的方法未来很难持续。
03
基于联邦学习的人脸识别训练
联邦学习介绍
联邦学习是一种新型范式的分布式训练,传统的分布式训练中经常会使用到的一种架构为PS架构。PS架构中,worker节点每一步都需要向参数服务器传送梯度,参数服务器平均梯度后将参数更新,然后转发给worker节点再进行训练,worker节点与参数服务器通常在同一个网络域中,且每个worker数据上都有训练数据的副本。但是在联邦训练的架构中,worker节点与参数服务器是不同域的,这就造成了一些与分布式训练的区别:
- 联邦学习的worker节点是不稳定的;
- PS参数服务器和worker的通信代价是比较高的,因为是跨域的,会限制通信效率;
- 不同worker数据是非独立同分布的,不同数据分布的差异性会影响模型的收敛速度。
联邦学习目前的研究方向主要为以下三个方面:
01
联邦学习中的通信与效率问题:第一张为联邦学习与传统集中式训练随着epoch数变化的趋势图,可以看出联邦学习的同步次数比较少,所以联邦学习收敛速度相比集中学习慢一些,表现出的loss高一些;
02
联邦学习中的隐私保护问题:在联邦学习中,尽管传输的是梯度或者是模型参数,但是这部分信息仍然有可能泄露数据信息,为了解决这样的隐私保护问题,可以通过添加一些噪声来保护相关模型的梯度;
03
联邦学习中的抗鲁棒性问题:联邦学习有很多节点,因为这些节点本身是不太可控的,如果说节点的数据噪声很大,或者被人“投毒”,传到云端server,可能会影响联邦训练整体的性能,可以采用的方法是对传过来的模型参数做一些验证,从而识别“投毒”。
联邦平均算法
- 这里有三个客户端,每个客户端只训练本地的数据,并且周期性的会向参数服务器上传输本地骨干网络的参数;
- 因为本地数据的独立性,每个客户还需要维护独立的分类器,这个分类器的参数是不会上传给服务器端的;
- 参数服务器会周期性的聚合所有客户端的骨干参数,并计算平均;
- 参数服务器计算完平均模型后下发参数至客户端,然后继续进行训练。
联邦平均是一个比较简单的框架,经过实验发现,通过相同的epoch训练之后,联邦平均算法相比传统的集中式训练,其loss会更高,并且相关的测试精度也明显低一些。部分研究工作解释为这是一个Client-drift的问题,即客户端漂移,联邦学习每个客户端的数据是非独立同分布的,各个客户端在本地训练的过程中,每个方向要与集中式训练,或者与最优的方向存在一定的偏差。联邦学习只是简单的平均,与理想的优化方向是存在一定的偏差,所以才会导致性能的下降。
局部联邦动量
针对Client drift问题,优图提出了一种局部联邦动量方法。如上图所示,在服务端计算联邦动量估计全局模型更新的方向,并在在客户端Local训练的过程中加入联邦动量来“纠正”Local SGD训练中的客户端漂移,从而加快模型的收敛速度。
联邦验证
这里使用了三个数据集训练得到模型,做网格搜索,验证不同权重下组合的测试效果,发现不同的训练阶段中最优的点(红色代表效果最优)权重的组合不一样。在训练的过程中,联邦是简单平均的思路,权重比较固定,如果用静态的固定方法,每一步则不是最优。
针对上述现象,优图提出了联邦验证方法,对不同的权重组合进行验证,从中寻找出最好的权重。这个框架核心的模块包括了客户端的训练器、参数服务器以及验证器。将参数服务器产生的权重组合发给验证器进行验证,从中选择最优权重组合,重新聚合,再返回给客户端进行训练。
如果验证器由单验证器扩展到多验证器,考虑到不同验证集指标数值范围是不一样的,因此需要对不同验证集的分数进行规一化。此外,在搜索的过程中会出现一些比较极端的情况,对模型精度有比较大的影响,所以这里引入一个平滑的系数来平滑权重。
除此之外,权重搜索和模型评估是会增加整个系统的耗时,如果采用同步框架,计算效率非常低。这里实现了一种异步的联邦验证机制。右下角可以看到,带“A”的是异步的框架,“R”代表随机搜索,“B”代表贝叶斯搜索,异步与同步在几个测试集上的表现比较一致,甚至在部分数据集上异步效果略好一些。但是在时间上,异步的时间明显低于同步的时间。
以下是部分实验结果:
- 第一个实验是验证权重搜索策略的有效性,单验证器实验中对应的验证集上结果是最优的。
- 第二个是多验证器实验,除了在验证集上测试外,测试集IJBB和IJBC的结果验证了方法的泛化效果,随机搜索和贝叶斯搜索在精度上没有明显的差异,但是相比联邦平均有很大的提升。此外,联邦动量加联邦验证两个方法的效果是可以叠加的,甚至在部分指标上可以超过集中式训练的效果。
- 第三个实验是关于分数归一化的退化实验,验证了分数归一化的有效性。
- 第四个实验是训练方数增加实验,对原有的三个数据集进行了拆分,将联邦的方数增加至12方,继续验证了方法的有效性。