1.一种基于Spark框架的生成对抗网络分布式实现方法,采用以下步骤:步骤1:主节点随机初始化网络配置并产生参数集,确定生成对抗网络模型的相关参数;
步骤1.1:生成对抗网络模型分布式训练目标函数:
将用于生成对抗网络模型训练标定好的真实数据进行归一化,使得每个值在范围[0,
1]内,生成器的训练是尽量去学习真实的数据分布;判别器被训练用来区分样本来自于真实的数据分布还是生成器,生成对抗网络模型的训练在生成器生成样本和实际样本的训练判别之间交替进行,通过保持判别器权重恒定,并且通过判别器反向传播误差来更新生成器的权重;
生成对抗网络模型训练的目标函数如下:
式中,可微分函数D和G分别表示判别器和生成器,x表示输入的真实数据,Pdata(x)表示真实数据集分布,D(x)代表x来源于真实数据而非生成数据的概率,z表示随机变量,pz(z)表示先验分布,G(z)为由G生成的尽量服从真实数据分布的样本,E(.)表示计算期望值;
步骤1.2:生成对抗网络模型训练分布式并行化训练:
同时训练几组生成对抗网络,并令每个判别器周期性地对其他生成对抗网络的生成器所生成的样本进行判别;
步骤2:将海量数据文件直接上传至分布式文件系统(HadoopDistributedFileSystem,HDFS)进行存储;
步骤3:构造Spark的弹性分布式数据集(ResilientDistributedDatasets,RDD):将原始输入数据分成多个批次,每次输入一批样本而不是一个单独的样本;通过相似性度量确保过于相似的样本不被放在同一个批次中;将数据缓存至Spark平台的RDD缓存中,然后广播到参与生成对抗网络模型算法分布式处理的Spark工作节点中;
步骤4:针对每个训练数据子集RDD,主节点将参数、配置、网络的更新态传递到所有从节点;
步骤5:每个从节点训练部分数据,并更新参数;每次迭代之后,所有参数和状态返回到主节点,主节点通过综合所有从节点的参数,并将参数进行平均,从而开始下一次迭代训练;平均值被传递到所有从节点,再进行进一步的训练;通过数据并行的方式并行训练生成对抗网络模型,直至达到纳什均衡,训练完成;
步骤5.1:生成对抗网络模型主节点工作流程:
主节点首先将用于训练的数据集参照上述步骤3进行数据分块,然后广播参数给从节点,从节点进行部分模型的训练后将参数返回给主节点,主节点综合从节点学习到的部分生成对抗网络模型,并将学习到的参数进行平均,来重建一个主控深度模型(又名Reduce步骤),再将平均到的参数广播给每个从节点,然后根据更新的参数开始下一轮的迭代,直至其达到纳什均衡,生成对抗网络模型训练完成;
5.2:生成对抗网络模型从节点工作流程:
每个从节点接收主节点广播的参数、网络、配置等信息,读取创建好的数据集分区数据RDD,然后计算梯度,每个工作节点基于RDD来计算其梯度的更新,并更新参数,直至其收敛,从节点将传递部分生成对抗网络模型学习而得的计算参数给主节点。