在这篇文章中,咱们将探讨分布式学习和联邦学习的次要原理以及它们是如何工作的。首先,咱们从一个简略的单机示例开始,而后将其倒退为分布式随机梯度降落(D-SGD),最初是联邦学习(FL)。

集中学习(单机)

一个最简略的例子,咱们想学习人的身高和体重之间的线性关系,并且咱们领有100人的体重和身高数据,想训练一种线性模型,该模型应用身高预测人们的体重,线性回归W = [a,b]如下:

咱们怎么找到w?为了求w,应用梯度降落法(GD),从一个随机的w开始,而后通过沿误差的相同方向在100个数据点上最小化模型的误差。

设置A = 0和B = 2,并为每个数据点计算咱们的模型,如下所示:

下面的方程必定是不成立的,因为2 * 1.70 + 0不等于72。咱们的指标是找到一个a和b使这个等式成立。所以须要计算该模型对于所有100人的数据点的误差:

指标是找到使所有数据点的误差为零的模型,咱们假设负误差与正误差相等。因而将总误差定义为所有数据点平方误差的平均值,如下所示:

强调一下这个总误差或者说损失函数的关键点是对所有数据点的平均值,也就是说每个数据点对总误差的奉献是相等的。损失函数是通过均匀所有数据点的误差来计算的,每个数据点对损失函数的奉献是相等的。

为了用梯度降落法求出a和b的最优值,须要计算b在初始b点的梯度,并按如下形式更新值:

Lambda是学习率,持续看下图

要计算F的梯度,首先须要以残缺的模式编写F。

当初,筹备计算F绝对于B的梯度:

到梯度是每个数据点谬误梯度的平均值!应用下面定义的符号,咱们能够按以下形式实现梯度降落更新规定:

通过均匀每个数据点的误差来计算损失函数的实在梯度,而后将新B替换为上一个B,直到咱们的总谬误足够小。这是一个迭代过程,通过屡次宠物能够找到A和B的最佳价值。

随机梯度降落(SGD)

咱们通过在100个数据点的所有梯度上均匀来计算F的梯度。如果咱们仅应用20个数据点进行预计,该怎么办?

这被为小批量的随机梯度降落,仅利用数据子集来计算梯度。

分布式随机梯度降落(D-SGD)

让咱们看一下从另一个角度计算的梯度。

如果咱们依照下面的公式重写梯度并将其分为2局部求和时,每个和式都有其意义。第一局部实际上是前50个点数据的均匀梯度,第二局部是数据集后50个点数据的均匀梯度。

这意味着咱们不须要将所有的100个数据点放在一个中央(同一台服务器)!咱们能够将数据分成两局部而后别离计算每个局部的梯度,而后对这两个梯度求平均值,来计算整个数据的梯度。这就是D-SGD的次要思维。

当初,咱们有两个客户机的分布式SGD。

如上所示,在D-SGD中两个客户端都从雷同的b点开始,而后各自用50个数据点计算每个客户端的梯度。而后将部分梯度发送到充当协调器的服务器上。该协调器会对两个梯度求平均值,而后计算整个数据的梯度或叫全局梯度。服务器返回这个全局梯度给两个客户端,客户端应用这个全局梯度来更新他们的b值或他们的模型。b的新值对每个客户端都是一样的,因为全局梯度是一样的,计算出来的新b也应该是一样的。这个过程如下图所示。

从1(计算部分梯度)到4(下载全局梯度)的步骤一直迭代,直到达到预约义的误差程度。在这个示例中,咱们只应用了两个客户端,然而它能够扩大到许多客户端。

须要阐明的是,咱们是用部分梯度来预计全局梯度!

联邦学习(FL)

如果咱们利用每个客户端的部分梯度来计算每个部分模型,或者在咱们的例子中,b如下所示,会产生什么?

在这个场景中,会以每个客户端不同的b值完结,如上图所示,咱们称之为本地模型。

如果咱们这样做,每个部分模型都会进行参数b的更新,这意味着不须要发送部分梯度。而是将部分模型的参数或者两头后果发送到服务器进行均匀,而后失去全局模型。这是联邦学习的次要思维。

FL零碎通过反复以下过程来优化全局机器学习(ML)模型:

i)每个客户端设施对其数据进行本地计算以最小化全局模型w。

ii)而后将其本地更新的模型发送到FL服务器进行聚合;

iii) FL服务器对接管到的部分模型进行聚合,生成改良的全局模型;

Iv),服务器将更新后的全局模型发送给客户端设施,客户端设施应用新的全局模型进行下一次的计算。

这个过程会一直迭代,直到模型达到预约义的精度程度。这个过程如下图所示。

联邦学习vs分布式SGD

在FL中应用模型权重,但在D-SGD中只应用梯度。在咱们探讨的例子中,在发送更新之前只进行了梯度降落的一个部分步骤。在这种状况下,FL相当于分布式sgd。如果要进行多个步骤,须要应用FL发送模型权重。个别模式的FL的收敛剖析(多个部分步骤)不同于咱们所做的分布式- sgd剖析。然而原理都是差不多的。

咱们在本文中形容的D-SGD算法(中心化D-SGD)和FL算法(FEDAVG)只是D-SGD和FL的泛滥算法之一。

为什么联邦学习是有用的?

咱们须要FL的次要起因是因为隐衷。咱们不心愿将私人原始数据泄露给任何用于训练机器学习模型的服务器。所以须要一种不须要从客户端设施发送原始数据就能够训练机器学习算法,这就是联邦学习的作用。例如,谷歌利用FL来改良它的键盘应用程序(Gboard)。FL在不同的利用中有用还有其余起因。例如FL使零碎可能利用挪动设施等本地计算,以加重服务器的压力。

联邦学习的挑战

咱们能够将FL面临的挑战分为两类。第一类是在运行FL流程之前的数据筹备流程流程。这个的关键问题是,不能拜访原始数据,甚至不能拜访FL零碎的设施。咱们须要晓得如何在不拜访设施的状况下设计模型或评估数据?

第二类的挑战是运行FL流程时呈现的问题。须要思考到参加FL零碎的客户端资源是受限的,他们在发送或解决ML模型方面的能力无限,例如在本文的例子中,咱们的参数只有b,传输残缺的参数是可行的,然而如果模型很大,例如BERT,那么咱们不可能在客户端和服务器之间传输几个G的数据,这是不可能的。

总结

联邦学习是一个建设在分布式学习框架上的新兴主题,它试图解决事实应用程序中训练ML模型的隐衷问题。在本文中,咱们只涉及了这些零碎的外表,如果你想深刻理解这方面的常识能够本人搜素相干的文章或者期待咱们后续的相干文章。

https://avoid.overfit.cn/post/ea6d50f42f904c97b4fa299be0c389b5

作者:Mahdi Beitollahi