如何用自动机器学习实现神经网络进化互联网+

雷锋网 2017-07-27 10:41
分享到:
导读

然后我们需要对参数不断地进行调整和优化,我在这个算法实施过程中避开了跨界交叉的问题,是因为我们需要对网络进行足够的训练。

对大多数从事机器学习工作的人来说,设计一个神经网络无异于制作一项艺术作品。神经网络通常始于一个常见的架构,然后我们需要对参数不断地进行调整和优化,直到找到一个好的组合层、激活函数、正则化器和优化参数。在一些知名的神经网络架构,如VGG、Ince

  对大多数从事机器学习工作的人来说,设计一个神经网络无异于制作一项艺术作品。神经网络通常始于一个常见的架构,然后我们需要对参数不断地进行调整和优化,直到找到一个好的组合层、激活函数、正则化器和优化参数。在一些知名的神经网络架构,如VGG、Inception、ResNets、DenseNets等的指导下,我们需要对网络的变量进行重复的操作,直到网络达到我们期望的速度与准确度。随着网络处理能力的不断提高,将网络优化处理程序自动化变得越来越可行。

  在像Random Forests和SVMs这样的浅模型中,我们已经能够使超参数优化的操作自动化进行了。一些常用的工具包,比如sk-learn,向我们提供了搜索超参数空间的方法。在其最简单的、最基础的格式中,“超参数”是我们在所有可能的参数中搜索得到的,或者是通过从参数分布中任意采样得到的。(详情请点击此链接查看。)这两种方法都面临着两个问题:第一,在错误参数区域进行搜索时会造成资源浪费;第二,处理大量的动态特征参数集将导致效率过低。因此,改变处理器的架构变得相当困难。虽然现在有很多看似高效的方法,比如Bayesian优化方法。但Bayesian优化法虽然能够解决了第一个问题,却对第二个问题无能为力;另外,在Bayesian优化设置中也很难进行探索模型。

  自动识别最佳模型的想法就现在来说已经不算新鲜了,再加上最近大幅度提升的处理能力,实现这一想法比以往任何时候都要容易。

  问题设定考虑超参数优化的方式之一,就是将它看做一个“元学习问题”。

  我们究竟能否打造出一个可以用于判断网络性能好坏的算法呢?

  注意:接下来我将继续使用“元学习”这个术语,即使将这个问题描述为“元学习”有点混淆视听,但我们千万不能把它与“学习”相关的一些方法弄混了。

  我们的目标是定义网络隐含层(绿色)的数量以及每个隐含层的参数。

  具体而言,就是探究模型架构和模型的参数空间,从而在给定的数据集上优化其性能。这个问题复杂难解,而回报稀薄。之所以说它回报稀薄,是因为我们需要对网络进行足够的训练,还要对它进行评估;而在训练、评估完成后,我们得到回报的仅仅是一些得分。这些得分反映了整个系统的性能表现,而这种类型的回报并不是可导函数!说到这,是不是让你想起了什么呢?没错,这就是一个典型的“强化学习”情境!

  维基百科对“强化学习”的定义:

  “强化学习”(RL)是一种重要的机器学习方法,它的灵感来自于心理学的行为主义理论。具体来说,“强化学习”是关于有机体(agent)如何在环境(environment)的刺激下,将累计奖励最大化的方法。

  “强化学习”与标准的监督式学习之间的区别在于它不需要出现正确的输入或输出对,也不需要精准校正其次优化行为。另外,“在线性能”也是“强化学习”关注的焦点,即在未知领域的探索与现有知识的开发之间找到平衡。

  上图情境中的有机体(agent)是一个模型,环境(environment)就是我们用于训练和评估的数据集。解释器(interpreter)是对每一行为进行分析以及设置有机体状态(在我们这个情境中,解释器设置的是网络参数)的过程。

  通常情况下,“强化学习”问题都被定义为一个Markov决策过程。其目的就是优化有机体的总回报。每一步,你需要对优化模型输出作出决策,或者是探索出一个新的行为。在环境的刺激下,有机体将根据得到的反馈,形成一个调整政策,不断改进其行为。

  注意:这个话题超出了本文讨论的范围,R.Sutton和A. Barto的《强化学习介绍》可能是关于这个主题的最佳入门指导书。

  进化算法

  解决“强化学习”问题的另一种方法是“进化算法”。在生物进化的启发下,进化算法通过创建一个解决方案的集合,寻找解决方案的空间;然后,它会对每一解决方案进行评估,并根据评估得分不断调整这个方案集合。生物进化论中所讲的“进化”涉及到一个种群中最佳成员的选择和变异。因此,我们的解决方案集合也会不断进化发展,以提高其整体适应性,并为问题找到提供可行的解决方案。

  进化算法中的“进化”

  上图的左边介绍了进化的过程,设计一个“进化算法”涉及到两个部分――“选择”,以及需要遵循的“跨界”或“变异”策略。

  “选择”:对于“选择”,我们通常的做法是挑选最佳的个体和一些任意的个体,以达到多样性。更先进的选择方法是在种群下设立不同的“次群”,即“物种”;然后在物种中选择最佳的个体,以保护其多样性。另一种比较受欢迎的做法是“竞赛选择”,即任意选择一些个体参与竞赛,挑选出胜者(基因优胜的个体)。

  “跨界”:“跨界”也称“交叉跨界”,指的是两组或两组以上亲本交叉混合,产生后代。“交叉跨界”高度依赖于问题结构的方式。常见的方法是用一个项目列表(一般是数值)对亲本进行描述,然后从亲本中挑选任意部分来生成新的基因组合。

  “变异”:“变异”或“突变”指的是任意改变基因组的过程。这是主要的开发因素,有助于保持种群的多样性。

  实施启用“进化算法”的实施启用使用了PyTorch来建立代理,这个代理将会探索用于完成简单分类任务的DNNs。这个实验使用的是MNIST,因为它小且快,即使在CPU上也能完成训练。我们将建立一组DNN模型,并将其发展进化为N个步骤。

  我们所讲的“进化”主题实际上就是“物竞天择”的实施,完整的高水平“进化算法”如下所示:

  new_population = []

  while size(new_population) < population_size:

  choose k(tournament) individuals from the population at random

  choose the best from pool/tournament with probability p1

  choose the second best individual with probability p2

  choose the third best individual with probability p3

  mutate and aPPend selected to the new_population

  附注:当涉及到架构合并时,跨界问题就变得相当复杂了。究竟该如何将两个亲本的架构合并呢?缺陷图样及环境整合训练将对此产生什么影响呢?近期的一篇来自Miikkulainen等人的论文提出了一种被称为CoDeepNEAT的解决方案。基于Evolino进化理论,一个架构由部分单元模块组成,其中的每一单元模块都是服从于进化理论的。这个架构是一个合并了所有组成成分的理想蓝图。在这样的情境下,将亲本的组成成分混合是十分合理的,因为其成分是一个完整的微型网络。为了使文章更简洁易懂,我在这个算法实施过程中避开了跨界交叉的问题,而是简单介绍了类似NEAT(或CoDeepNEAT)这样的解决方案。(我打算在下一篇文章中详细介绍这些解决方案。)

问题 学习 网络 参数 方法
分享到:

1.TMT观察网遵循行业规范,任何转载的稿件都会明确标注作者和来源;
2.TMT观察网的原创文章,请转载时务必注明文章作者和"来源:TMT观察网",不尊重原创的行为TMT观察网或将追究责任;
3.作者投稿可能会经TMT观察网编辑修改或补充。


观点约架