1.一种基于Spark框架的生成对抗网络分布式实现方法,采用以下步骤:
步骤1:主节点随机初始化网络配置并产生参数集,确定生成对抗网络模型的相关参数;在生成对抗网络模型的训练中,生成器和判别器的参数更新都是在其他模型的参数固定的前提下对自身参数使用梯度下降法进行更新;
步骤1.1:生成对抗网络模型分布式训练目标函数:
将用于生成对抗网络模型训练标定好的真实数据进行归一化,使得每个值在范围[0,
1]内,生成器的训练是尽量去学习真实的数据分布;判别器被训练用来区分样本来自于真实的数据分布还是生成器,生成对抗网络模型的训练在生成器生成样本和实际样本的训练判别之间交替进行,通过保持判别器权重恒定,并且通过判别器反向传播误差来更新生成器的权重;
生成对抗网络模型训练的目标函数如下:
式中,可微分函数D和G分别表示判别器和生成器,x表示输入的真实数据,Pdata(x)表示真实数据集分布,D(x)代表x来源于真实数据而非生成数据的概率,z表示随机变量,pz(z)表示先验分布,G(z)为由G生成的尽量服从真实数据分布的样本,E(.)表示计算期望值;
步骤1.2:生成对抗网络模型训练分布式并行化训练:
生成对抗网络的分布式并行化包括数据和模型的并行化,同时训练几组生成对抗网络并令每个判别器周期性地对其他生成对抗网络的生成器所生成的样本进行判别,生成对抗网络分布式并行化适用于生成对抗网络的任何扩展模型,因此将不同的生成对抗网络扩展模型分配给集群中不同的节点计算资源进行并行计算;
步骤1.3:生成对抗网络模型初始参数设置方法
调整参数的思路主要通过不断对模型效果验证分析得到,采用的参数设置方法如下:
A.学习率;在生成对抗网络学习模型中,学习率也没有可供参考的设置规律,使得权值的更新量为权值的千分之一左右;
B.权重和偏置的初始值;连接权重可初始化为来自正态分布N(0,0.01)的随机数,隐单元的偏置和第1个可见单元的偏置Q,初始化为0;
步骤2:将海量数据文件直接上传至分布式文件系统(Hadoop Distributed File System,HDFS)进行存储;
步骤3:构造Spark的弹性分布式数据集(Resilient Distributed Datasets,RDD):将原始输入数据分成多个批次,每次输入一批样本而不是一个单独的样本;通过相似性度量确保过于相似的样本不被放在同一个批次中;将数据缓存至Spark平台的RDD缓存中,然后广播到参与生成对抗网络模型算法分布式处理的Spark工作节点中;
步骤3.1:定义Spark分布式计算框架的InputSpilt,根据Spark提供API实现Java类InputSpilt的子类,自定义Java类InputFormat类的子类,实现该子类的java类getSpilts方法;
步骤3.2:SparkContext根据文件/目录及可选的分片创建RDD,首先应用程序创建SparkContext的实例;
步骤3.3:根据Hadoop配置中InputFormat创建HadoopRDD;
步骤3.4:定义读取InputSpilt数据的方式,根据Hadoop配置和分片从InputFormat中获取RecordReader进行数据读取;
步骤3.5:自定义java类RecordReader的子类,该子类的作用是自定义读取分片数据的方式,并结合步骤3中自定义的InputFormat构造Spark的分布式数据集;
步骤4:针对每个训练数据子集RDD,主节点将参数、配置、网络的更新态传递到所有从节点:步骤4.1:经过Transformation操作,原始的RDD转换为其他类型的RDD:首先在分布式数据集RDD的Transformation中完成分布式转换、实现RDD的map转化,对每一个map输入后转化的输出结果按key进行排序;RDD是根据每条记录的key进行分区的,具有相同key的数据会存储在同一个节点上,以保证两个数据集在join时能够高效运行;数据集中的内容规约为一个具体的数值,最后结果保存在HDFS指定路径下的SequenceFile文件中,用于后续生成对抗网络深度模型进行大数据分析;
步骤4.2:Job的生成和运行:
在Action中进行处理,RDD之间的依赖关系形成了DAG,生成对抗网络训练Job被分为多个Stages,每个stage包含多次基于MapReduce的迭代计算,前一次迭代的输出作为下一次迭代的输入,每次迭代都训练部分生成对抗网络模型;
步骤4.3:生成对抗网络模型训练对应Task流程分析:
当Stage被提交之后,由TaskScheduler根据Stage计算所需的Task,并将Task提交到相应Spark集群中的Worker;所有从节点基于数据分块的不同分区并行执行相同的Map任务,计算开销较大的生成对抗网络模型学习任务被划分成并行子任务;
步骤5:Spark分布式集群中,每个从节点训练部分数据,并更新参数;经过一次迭代之后,所有参数和状态返回到主节点,主节点进行参数的平均、更新训练神经网络的状态;接着,平均值被传递到所有从节点,再进行进一步的训练;通过数据并行的方式并行训练生成对抗网络模型,一直重复直至其达到纳什均衡,训练完成;
步骤5.1:生成对抗网络模型主节点工作流程:
主节点首先将用于训练的数据集参照上述步骤3进行数据分块,然后广播参数给从节点,从节点进行部分模型的训练后将参数返回给主节点,主节点综合从节点学习到的部分生成对抗网络模型,并将学习到的参数进行平均,来重建一个主控深度模型(又名Reduce步骤),再将平均到的参数广播给每个从节点,然后根据更新的参数开始下一轮迭代,直至其达到纳什均衡,生成对抗网络模型训练完成;
步骤5.2:生成对抗网络模型从节点工作流程:
每个从节点接收主节点广播的参数、网络、配置相关信息,读取创建好的数据集分区数据RDD,然后计算梯度,每个工作节点基于RDD来计算其梯度的更新,并更新参数,直至其收敛;训练生成对抗网络时,同一轮参数更新中,对抗模型D的参数更新k次再对生成模型G的参数更新1次;从节点将传递部分生成对抗网络模型学习的参数给主节点。