基于改进进化算法的循环神经网络架构搜索方法、系统及介质与流程

文档序号:20705285发布日期:2020-05-12 16:20阅读:220来源:国知局
基于改进进化算法的循环神经网络架构搜索方法、系统及介质与流程

本发明涉及深度神经网络的架构设计及优化技术,具体涉及一种基于改进进化算法的循环神经网络架构搜索方法、系统及介质。



背景技术:

在过去的几年中,深度神经网络在许多具有挑战性的应用中取得了巨大的成功,例如语音识别,图像识别和机器翻译。然而直到最近,大多数这些先进的神经网络架构还是由人类专家手动设计。为了加快这一过程,研究人员研究了自动化方法,这些方法现在通常称为神经网络架构搜索(nas),传统的神经网络架构搜索方法是使用进化算法。

进化算法的基本步骤包括:首先初始化种群,然后从种群中选取最优的模型作为父亲模型进行变异操作生成子模型,之后更新种群,并将子模型加入种群。不同的进化算法主要体现在对种群的更新上。

老化进化(agingevolution,ae)算法是进化算法中的一种,老化进化算法丢弃了种群中年龄最大的模型来更新种群,并发现了超出手动设计性能的图像分类器。非老化进化算法则(non-agingevolution,nae)则丢弃种群中最差模型来更新种群。与nae算法相比,ae算法可以探索更多的搜索空间,但是收敛速度较慢。nae使搜索更快,但有过早收敛并陷入局部最优的风险。

enas(efficientneuralarchitecturesearch)通过在所有子模型上共享参数大大减少了训练时间。实验结果表明,在penntreebank(ptb)数据集上,与nas相比,enas方法寻找到的最优循环神经网络语言模型的困惑度要低5.8,可以达到业内最先进的性能。困惑度是自然语言处理中,评价文本数据集的重要指标。语言模型是可以用来计算一个句子概率的模型。而循环神经网络语言模型在测试集上的对句子的概率越大,语言模型的性能就越好,困惑度就越低。与原始的nas相比,使用单个nvidia1080ti的enas搜寻时间仅为12小时,搜索时间减少了1000倍以上。这主要是因为enas受到了迁移学习的启发,在子模型中共享权值,对生成的新的子模型架构不需要重新训练,仅仅通过之前架构权重参数对新生成的架构进行测试。而nas则要对每个新生成的子模型架构重新进行训练,然后测试性能。但是,enas需要训练150周期来不断更新子模型中的共享权重,并且需要训练lstm作为控制器来搜索最佳架构,这无疑会增加搜索的时间和复杂性。



技术实现要素:

本发明要解决的技术问题:针对现有技术的上述问题,提供一种基于改进进化算法的循环神经网络架构搜索方法、系统及介质,本发明能够加快对循环神经网络架构进行搜索的过程,在更新种群时采用了指定概率ε来丢弃种群中最差模型否则最老的模型以达到算法收敛和搜索更多空间的平衡,以便在每个步骤更新种群时同时考虑到性能和搜索时间,能够极大地提高循环神经网络架构搜索的效率。

为了解决上述技术问题,本发明采用的技术方案为:

一种基于改进进化算法的循环神经网络架构搜索方法,实施步骤包括:

1)训练多个循环神经网络子模型来更新共享权重ω;

2)初始化产生种群,通过共享权重ω评估种群中各个循环神经网络子模型的性能并添加到用于记录所有循环神经网络模型性能的历史记录表history

3)从种群中随机采样产生样本,选取样本最优模型进行变异操作,以指定概率ε移除种群中最老或最差模型,将变异后的子节点加入种群和历史记录表history;判断是否满足预设的结束条件,如果不满足则跳转执行步骤3);否则跳转执行下一步;

4)输出历史记录表history中的最优模型。

可选地,步骤2)的详细步骤包括:

2.1)产生种群population并初始化为空队列,并初始化用于记录循环神经网络模型性能的历史记录表history为空;

2.2)判断种群population的数量小于预设阈值p是否成立,如果成立则跳转执行步骤2.3);否则,跳转执行步骤3);

2.3)随机产生循环神经网络模型架构生成子模型model

2.4)在预设的验证集上通过共享权重ω评估子模型model的性能;

2.5)将子模型model加入种群;

2.6)将子模型model的性能记录在历史记录表history中,跳转执行步骤2.2)。

可选地,步骤3)的详细步骤包括:

3.1)判断历史记录表history中的记录数量小于预设阈值c是否成立,如果成立则跳转执行步骤3.2);否则,跳转执行步骤4);

3.2)初始化建立空的样本sample;

3.3)从种群随机采样产生样本并放入样本sample中;

3.4)从样本sample中取困惑度最低的最优模型作为父亲节点;

3.5)按照突变规则更改父亲节点;

3.6)使用共享权重ω在预设的验证集上对突变后的子节点测试性能;

3.7)判断生成的概率值random(0,1)小于指定概率ε是否成立,如果成立则移除种群中困惑度最高的最差模型,否则移除种群中最左边的最老模型;

3.7)将突变后的子节点加入种群,使用历史记录表history记录变异后的子节点性能;跳转执行步骤3.1)。

此外,本实施例还提供一种基于改进进化算法的循环神经网络架构搜索系统,包括:

共享权重训练程序单元,用于训练多个循环神经网络子模型来更新共享权重ω;

种群初始化程序单元,用于初始化产生种群,通过共享权重ω评估种群中各个循环神经网络子模型的性能并添加到用于记录所有循环神经网络模型性能的历史记录表history

变异进化程序单元,用于从种群中随机采样产生样本,选取样本最优模型进行变异操作,以指定概率ε移除种群中最老或最差模型,将变异后的子节点加入种群和历史记录表history;判断是否满足预设的结束条件,如果不满足则跳转执行变异进化程序单元;否则跳转执行输出程序单元;

输出程序单元,用于返回历史记录表history中的最优模型。

此外,本实施例还提供一种基于改进进化算法的循环神经网络架构搜索系统,包括计算机设备,该计算机设备被编程或配置以执行所述基于改进进化算法的循环神经网络架构搜索方法的步骤。

此外,本实施例还提供一种基于改进进化算法的循环神经网络架构搜索系统,包括计算机设备,该计算机设备的存储器上存储有被编程或配置以执行所述基于改进进化算法的循环神经网络架构搜索方法的计算机程序。

此外,本实施例还提供一种计算机可读存储介质,该计算机可读存储介质上存储有被编程或配置以执行所述基于改进进化算法的循环神经网络架构搜索方法的计算机程序。

和现有技术相比,本发明具有下述优点:

1、与enas训练150周期更新共享权重不同的是,本发明仅对共享权重ω更新一次来评估所有的子模型,通过对所有生成的子模型使用共享权重ω评估性能以加快搜索过程。

2、本发明在更新种群时采用了指定概率ε(0<ε<1)来丢弃种群中最差模型,否则最老的模型以达到算法收敛和搜索更多空间的平衡,以便在每个步骤更新种群时同时考虑到性能和搜索时间,能够极大地提高循环神经网络架构搜索的效率。实验结果表明,在ptb数据集上,使用单个nvidia1080ti搜索得到最佳循环神经网络架构可以达到最先进的性能,而搜索速度可以提高20倍。

附图说明

图1为本发明实施例方法的基本流程示意图。

图2为本发明实施例中的有向无环图表示的nas搜索空间示意图。

图3为对应于图2的循环神经网络架构。

图4为本发明实施例中的两种类型的突变示意图。

图5为本发明实施例方法在ptb找到的最佳循环神经网络架构。

具体实施方式

如图1所示,本实施例基于改进进化算法的循环神经网络架构搜索方法的实施步骤包括:

1)训练多个循环神经网络子模型来更新共享权重ω;

2)初始化产生种群,通过共享权重ω评估种群中各个循环神经网络子模型的性能并添加到用于记录所有循环神经网络模型性能的历史记录表history

3)从种群中随机采样产生样本,选取样本最优模型进行变异操作,以指定概率ε移除种群中最老或最差模型,将变异后的子节点加入种群和历史记录表history;判断是否满足预设的结束条件,如果不满足则跳转执行步骤3);否则跳转执行下一步;

4)输出历史记录表history中的最优模型。

有向无环图(directedacyclicgraph,dag)可用于表示nas的搜索空间,其中节点表示激活,边缘表示信息流。图2显示了一个dag示例,在具有6个计算节点的搜索空间中,较粗的箭头定义了dag中的一个模型。在这里,节点1是模型的输入,节点4和6是模型的输出。图2的示例的神经网络架构可以通过从dag中提取子图来实现。这里所有黑色的箭头表示dag搜索空间中中所有可能的连接情况,较粗的箭头表示随机产生的一个循环神经网络架构。显然,dag是搜索空间中所有可能的子模型的组成。与使用控制器生成dag的enas不同,本实施例中采用随机确定:使用哪些边,以及在dag中的每个节点上使用哪些计算。本实施例中搜索空间为两个激活函数,tanh和relu。

图3显示了对应于图2的循环神经网络架构。x[t]为循环神经网络的输入(例如单词嵌入),h[t-1]为前一时间步长的输出。每个节点都有一个前节点,例如节点n的前节点可以是j(0≤j<n)。对于没有后继节点的节点(例如,图3中的节点4和节点6),本实施例中对其取平均作为神经网络的最终输出。对于每对节点,都有一个独立的参数矩阵。本实施例随机选择前一个索引来确定要使用的参数矩阵。因此,本实施例提出的模型中的所有神经网络架构都具有相同的权重集。参见图3,对应于图2的循环神经网络架构,在此节点4和6没有后继者,本实施例中将它们取平均作为输出。搜索空间随节点数量呈指数增长。为了说明这一点,如果循环单元有n个节点,并且本实施例使用2个激活函数(tanh&relu),则搜索空间由2n×n!,在本实施例的实验中,n=12,这意味着搜索空间中大约有1.96×1012个模型。本实施例中,子模型的共享权重ω由表示。对于penntreebank数据集的实验,本实施例中在400个随机生成的子模型中进行了训练。训练批次大小为64,基于时间的反向传播(backpropagationthroughtime,bptt)长度为35。训练结束后,共享权重ω是固定的,并在所有子模型(种群和突变后的父模型)之间共享,然后在验证集上进行评估,选择具有困惑度最低的作为最佳模型。

本实施例中,步骤2)的详细步骤包括:

2.1)产生种群population并初始化为空队列,并初始化用于记录循环神经网络模型性能的历史记录表history为空;

2.2)判断种群population的数量小于预设阈值p是否成立,如果成立则跳转执行步骤2.3);否则,跳转执行步骤3);

2.3)随机产生循环神经网络模型架构生成子模型model

2.4)在预设的验证集上通过共享权重ω评估子模型model的性能;

2.5)将子模型model加入种群;

2.6)将子模型model的性能记录在历史记录表history中,跳转执行步骤2.2)。

本实施例中使用的改进进化方法中,种群是由具有随机架构的模型初始化的。进化算法逐周期改善了原始种群的循环。算法首先通过训练初始的400模型并在之后的所有的模型中共享权重ω。在每个周期中,本实施例从种群中随机选择模型作为样本集。之后,选择样本集中具有最低困惑度(perplexity,ppl)的模型作为父模型。然后,本实施例通过使用突变修改父模型的体系结构来重建新的子模型。突变是对网络体系结构进行简单随机的修改。本实施例中利用了图3中的两种类型的突变,即信息流突变和激活功能突变。在每个循环中仅应用这些突变之一,并在它们之间随机选择。选择子架构后,将使用共享权重ω对其进行评估,并将其添加到种群中。这个过程称为锦标赛选择。在锦标赛选择中,总体种群数量通常是固定的。nae丢弃了总体中最差的模型,因此可以更快地收敛,而ae则移除了总体中最老的模型,以探索更多所有模型来找到更好架构。相比之下,本实施例每次都以指定概率ε移除最差的模型,否则删除最老的模型。这样,本实施例可以同时考虑性能和年龄,并在nae和ae之间获得更好的平衡。它还使本实施例能够在搜索空间中快速并准确搜索到最佳模型。

本实施例中,步骤3)的详细步骤包括:

3.1)判断历史记录表history中的记录数量小于预设阈值c是否成立,如果成立则跳转执行步骤3.2);否则,跳转执行步骤4);

3.2)初始化建立空的样本sample;

3.3)从种群随机采样产生样本并放入样本sample中;

3.4)从样本sample中取困惑度最低的最优模型作为父亲节点;

3.5)按照突变规则更改父亲节点;图4记载了两种类型的突变,上方的较粗的节点表示激活突变,而下方的较粗的箭头表示信息流突变;

3.6)使用共享权重ω在预设的验证集上对突变后的子节点测试性能;

3.7)判断生成的概率值random(0,1)小于指定概率ε是否成立,如果成立则移除种群中困惑度最高的最差模型,否则移除种群中最左边的最老模型;

3.7)将突变后的子节点加入种群,使用历史记录表history记录变异后的子节点性能;跳转执行步骤3.1)。

本实施例代码在pytorch上实现。本实施例使用了单个nvidia1080tigpu来训练并搜索最佳的循环神经网络架构。数据集是penntreebank,操作系统是ubuntu,cpu为3.6ghzintelcorei7和内存为16gbddr42.4ghz。

本实施例首先搜索了改进进化算法的最优指定概率ε的值。在此,总的循环次数c设置为30,000,指定概率ε从0到1变化,变化幅度为0.1。

当指定概率ε等于0时,本实施例的改进进化算法等同于ae,当更新种群时,改进进化算法杀死最老的一个。当指定概率ε等于1时,本实施例的改进进化算法与nae相同,在那里最差的人群将被消除。本实施例中种群数量(population)为100,样本数量(sample)为25。本实施例将改进进化算法对循环神经网络架构搜索的模型参数大小限制为24m,以便与其他基准模型相比较。子模型的共享参数由随机梯度下降的方法训练,学习率为20.0。训练集批次大小为64,验证集批次大小为1。

当指定概率ε等于0.4时,改进进化算法会找到最佳的循环神经网络架构,如图5所示。改进进化算法在ptb找到的最佳循环神经网络架构平均了6个节点的结果作为输出。与ae(指定概率ε=0)和nae(指定概率ε=1)相比,困惑度分别降低了3.1和2.0。

结果分析:

本实施例的改进进化算法会找到最佳的循环神经网络架构困惑度为56.3,可以达到最先进的性能,同时搜索时间仅为0.6小时,与现有的enas方法12小时相比,搜索速度提高了20倍。与enas相比,本实施例具有更快的速度原因主要有三点:首先,本实施例只训练400个模型来更新共享权重,并使用它们来评估所有子模型。尽管enas在每个时期仍需要训练400个模型来更新权重以训练lstm,并且权重总共更新了150个周期(总共60000个模型)。其次,enas在每个周期都会使用整个验证集评估最高奖励的模型,这会占用很多时间。而本实施例仅在所有迭代结束后,从历史记录中选择最佳模型,然后从头开始进行训练评估。第三,与必须在每个周期训练循环神经网络作为控制器生成架构的enas相比,本实施例只需要在一个周期内进行简单的变异和删除操作,这要简单得多。

本实施例将在ptb数据集搜到的最佳循环神经网络架构以及enas找到的最优循环神经网络架构迁移到wikitext-2(wt-2)上进行训练测试,并将参数量增加到33m。实验结果表明,本实施例在ptb上搜到的最优循环神经网络架构在wt-2上测试集的困惑度可以达到68.0。尽管在wt-2上的总体测试集的困惑度不如目前最先进的性能(63.3),但其在wt2上迁移能力要好于enas(困惑度70.1)。主要原因是本实施例搜索时使用的源数据集(ptb)和wt-2相比较小,通过直接使用改进进化算法在上wt-2搜索最优架构,可以避免可移植性问题。

此外,本实施例提供一种基于改进进化算法的循环神经网络架构搜索系统,包括:

共享权重训练程序单元,用于训练多个循环神经网络子模型来更新共享权重ω;

种群初始化程序单元,用于初始化产生种群,通过共享权重ω评估种群中各个循环神经网络子模型的性能并添加到用于记录所有循环神经网络模型性能的历史记录表history

变异进化程序单元,用于从种群中随机采样产生样本,选取样本最优模型进行变异操作,以指定概率ε移除种群中最老或最差模型,将变异后的子节点加入种群和历史记录表history;判断是否满足预设的结束条件,如果不满足则跳转执行变异进化程序单元;否则跳转执行输出程序单元;

输出程序单元,用于返回历史记录表history中的最优模型。

此外,本实施例提供一种基于改进进化算法的循环神经网络架构搜索系统,包括计算机设备,该计算机设备被编程或配置以执行本实施例前述基于改进进化算法的循环神经网络架构搜索方法的步骤。

此外,本实施例提供一种基于改进进化算法的循环神经网络架构搜索系统,包括计算机设备,该计算机设备的存储器上存储有被编程或配置以执行本实施例前述基于改进进化算法的循环神经网络架构搜索方法的计算机程序。

此外,本实施例提供一种计算机可读存储介质,该计算机可读存储介质上存储有被编程或配置以执行本实施例前述基于改进进化算法的循环神经网络架构搜索方法的计算机程序。

以上所述仅是本发明的优选实施方式,本发明的保护范围并不仅局限于上述实施例,凡属于本发明思路下的技术方案均属于本发明的保护范围。应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理前提下的若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1