龙空技术网

利用粒子群方法进行超参数优化

林小婵的店 633

前言:

而今你们对“粒子群算法加速度”可能比较注重,咱们都想要了解一些“粒子群算法加速度”的相关文章。那么小编在网摘上搜集了一些有关“粒子群算法加速度””的相关知识,希望大家能喜欢,朋友们快快来学习一下吧!

数据的持续增长与计算硬件的发展相结合,导致我们处理和分析信息的方式发生了重大变化。虽然对于许多人而言,这种变化仍然是抽象的,但我们已经可以看到它如何导致新的商业模式和技术塑造我们应对日常生活的方式。数据驱动的商业模式多年来一直蓬勃发展,物联网正在慢慢融入我们的起居室,而(半)自动驾驶似乎也使得远离成为日常现实。然而,由于关键的支持技术 - 人工智能,或更确切地说:机器学习,我们仍处于可以和将要实现的目标的最开始。

随着可用于分析的数据的规模和复杂性的增加 - 让我们考虑一组图像,其中每个图像由数千个像素组成 - 经典的机器学习方法很快就达到了它们的局限性,尤其是因为它们的浅层结构无法捕获高级抽象特征表示。这些困难和挑战激发了更先进技术的利用和发展。深度神经网络(DNN)在这种情况下已经变得非常流行,并且在高维数据上表现出优异的性能。DNN由多层神经元组成,已成功应用于各种高度非线性问题。

神经网络的概念及其在机器学习问题上的应用并不新奇,事实上可以追溯到20世纪50年代末期。尽管自那以后学术方面有了一些进展,但由于计算成本高昂,更广泛的应用几乎不存在。之前还没有被大规模并行性提供了图形处理单元(gpu)近年来已成为可用的,更深和更大的网络可以利用和深度学习技术起飞。然而,计算资源不是无限可扩展的,不是技术上的,也不是经济上的。

这导致我们想在本文中讨论的问题:深度神经网络的有效设计。

概述问题

在为给定的任务和数据集设计深度神经网络时,没有“正确”且明显有利的解决方案。较深的网络可能比较浅的网络表现更好,尽管情况可能正好相反——这完全取决于网络设计的选择,最明显的是隐藏层中的神经元数量。这些网络参数称为超参数。

图1:神经网络的图示

在为给定任务设计网络时,这些超参数的配置通常是在依赖于先前经验的情况下手动完成的。当数据类型与共享相似性时,这种方法非常适合。例如,适用于图像中的对象识别的设计可以在所有可能性中用于具有微小调整的类似图像识别项目。当数据的性质发生显着变化时,例如,从一个项目中的图像到下一个项目中的时间序列传感器数据,选择合适的架构变得更具挑战性。我们一直在寻找自动选择超参数的方法并且几乎没有先验知识的方法,对每个项目处理完全不同的数据并不罕见。

自动超参数选择也存在于经典机器学习技术中,例如学习率的优化和回归的正则化。在回归示例的情况下,优化相对简单:使用网格搜索对每个参数测试各种值,最后选择最佳结果。这种方法适用于回归,因为搜索空间的维度相对较低 - 在上述示例中只有两个维度:学习率和正则化。我们假设我们要测试每个维度的十个值。在这种情况下,执行全网格搜索需要我们训练1⁰²模型。然而,当我们考虑用于深度神经网络的类似网格搜索方法时,例如,可以用于图像中对象跟踪的26层YOLO网络,我们已经希望将自己限制为仅优化层中具有10个测试值的神经元数量,这将需要我们训练10²⁶模型。即使是对完成这项任务所需时间的最乐观的估计也会超过我们所有的生命周期 - 总之。

优化的另一个候选者是其中一种口味的随机梯度下降。当使用梯度下降进行超参数优化时,将针对一组参数评估模型。然后随机更改参数并再次评估模型。由此产生的性能变化(梯度)确定了在下一次迭代中要尝试的参数集。这样,该组参数最终将收敛到最佳值。但是,该方法还有其他警告。当评估的性能在本质上是凹的或接近凹的时,该方法很有效,这意味着它具有一个明显的最佳值。在评估经典回归模型和浅层神经网络时经常会出现这种情况。随着网络深度的增加以及优化问题的维度,但是,性能函数的性质不会与凹行为相似。相反,它将是一个具有许多局部最小值的函数。当进行梯度下降时,优化仍然会趋向于最优,这种情况的可能性特别好,更不用说全局最优是非常微小的并且都是偶然的。

总之,由于其复杂性,优化深度神经网络的超参数证明具有挑战性,并且需要一种超出经典机器学习优化的方法。我们希望覆盖一个大的搜索空间,以确保我们不会陷入局部最小值,同时我们必须将我们训练的模型数量限制在可接受的数量。对于这种情况,今天发现基于多种群的随机搜索方法是最有希望的。这些包括遗传算法,差异进化,果蝇优化,蚁群优化和粒子群优化。

所有上述算法在产生大量搜索实体的意义上共享相似性,然后执行某种局部优化,同时彼此协调以找到全局优化的解决方案。大多数算法属于群体智能类别,它从生物群体行为中获取灵感,例如一群鸟类或蚂蚁群体处理某些情况的方式。

粒子群优化

粒子群优化算法(PSO)是一种典型的群体智能算法。它于1995年首次引入,灵感来自于一群寻找食物来源的鸟改变它们的位置的方式,基于它们之前的个体位置和群体的位置。该算法已被广泛应用于现实世界的高维问题中,证明了其有效性和鲁棒性。这是一种基于种群的元启发式优化技术,意味着它首先初始化了一些单个搜索“粒子”,每个粒子都代表了一种可能的解决方案。这些粒子群通过进化过程改变了它们的位置。PSO相对于其他群体智能算法的优点是,该算法可以在一个简单而高效的过程中遍历一个大的、多维的搜索空间。虽然它不能保证找到全局最优解,但它很可能在相对较少的迭代中找到接近最优解。

在没有先验知识的情况下,首先用随机位置P和速度v初始化粒子,在每一代中,速度都要考虑到之前的速度,粒子的个体最佳Pbest,以及当前总体最佳解。然后根据当前位置和速度更新位置。式1表示数学表示。上标表示代。

系数w表示惯性权重,C1和C2由于在进化过程中的作用,分别为加速度系数,称为认知参数和社会参数。这三个系数用于控制单个粒子的自学习与粒子群的学习率的平衡。R1和R2是随机生成的值,在搜索算法中引入一个随机分量来扩展搜索空间。

图2:粒子群优化其在“Himmelblau函数”上的位置的示例

离散步骤和动态惯性

在前面的例子中,我们使用粒子群优化来找到连续数学函数的全局最优。将算法转化为神经网络时,我们发现大多数超参数,即层的大小,不是连续的,只能取离散的整数值。作为回报,这意味着我们的算法需要提供整数值,这可以通过四舍五入计算速度轻松实现。然而,四舍五入意味着我们创造了一个固有的速度阈值,在这个阈值以下,一个粒子基本上被“卡住”,不会再改变它的位置。因此,尽管它并不经常发生,但我们已经实现了粒子的提前退役,以节省不必要的计算工作。

当观察速度方程时,我们发现当粒子的当前位置等于或接近它们的局部和/或全局最优时,它们特别容易降到阈值以下。因为我们对这些粒子特别感兴趣,继续并优化它们当前的最佳速度,或者更准确地说,惯性权重w,需要动态调整。提出了不同的动态惯性称重方法。综上所述,动态调整惯性的最佳方法取决于优化问题。在下面给出的结果中,我们选择了一种简单的方法,我们用指数方式衡量粒子的局部最优距离:

这种惯性的增加使粒子能够进一步超越其当前的局部最佳状态,而不是被过早地卡住。

粒子群优化在深层神经网络中的应用

为了在神经网络上测试粒子群优化,我们用Python编写了一个实现。DNN使用Keras进行训练,在两个gpu上并行运行一个Tensorflow后端。由于粒子在每一代都是相互独立的,因此算法在GPU级别上是完全并行的,其优点是数据开销不会显著增加,因此加速与使用GPU的数量接近线性。PSO算法的所有运行参数都相同,其中w=c1=c2=0.5。最大的代数被设定为10,然而正如之前提到的,如果粒子低于速度阈值,它们就会提前退役。

以CIFAR-10图像分类数据集为例,采用交叉熵优化性能指标对算法进行了测试。用于评估算法的CIFAR-10数据集是免费提供的。数据集包含60000张32x32x3的RGB图像,属于10个平衡类。这个集合的分类需要一个具有挑战性的抽象级别,这个抽象级别是通过一个足够深的网络来实现的,以测试我们的算法。在这里给出的示例中,我们直接使用了提供的数据,而没有进行任何额外的预处理。图2显示了CIFAR-10中包含的图像示例。

图3:CIFAR-10数据集中的图像示例

为了避免偏差,数据集已经分为两部分;我们又将训练集分为70%学习集和30%交叉验证集,使用学习和交叉验证集对模型进行训练。然后利用评价集确定粒子群优化的交叉熵。使用RMSprop优化对30个epoch进行训练,学习率为5E-4,衰减率为1E-6。

作为神经网络的配置,选择了八层结构。它由六个卷积层(内核3x3层)和一个dense 层组成。在每两个卷积层之后,另外一个最大池化层被实现。在dense 层之后,添加了20%的dropout层。此后,网络被一个10个神经元dense层所终止,该层与10个可能的类相对应的softmax激活。图3说明了体系结构。虽然这种设计可能不是最好的解决方案,但它是有目的的选择,因为从优化的角度来看,它的高维性和多局部最优的出现是具有挑战性的。

每个卷积层的大小在16到128个神经元之间,以16为单位递增。密集层的大小在64到1024个神经元之间,每增加64个。这将产生超过400万种可能的网络配置。在这个案例研究中,我们允许最多10代,取决于群中粒子的数量,我们的算法在提供解决方案之前可以尝试40到160种配置——少于总搜索空间的0.004%。

图4:神经网络架构的示意图。所有conv2d以及dense_1层的相应大小将由算法选择

图4显示了整个群体在十代中发现的全局最佳解决方案的典型行为。在这种情况下,使用十个粒子群来优化我们的分类模型。该算法评估成本函数,在这种情况下交叉熵最小化。当粒子找到比当前全局最佳解决方案更好的新解决方案时,请注意步骤的典型外观。

图5:优化过程中的优化函数(交叉熵)。仅显示全局最佳位置。

选择合适的群体大小可能是决定PSO算法性能的最重要因素。如果选择的群体太小,则算法更有可能被吸引到局部最小值而不会遇到全局良好的解决方案。随着群体尺寸的增加,寻找良好解决方案的可能性增加,但是计算要求也随着粒子数量线性增加。图5显示了针对多个群体大小和最多十代获得的最佳解决方案的准确性。

图6:获得各种群体大小的准确度

值得注意的是,即使相对较小的群体规模也能够始终如一地提供合适的解决方案。我们发现,就我们的目的而言,群体大小在优化维度数量的1.2到2倍之间可以提供良好的权衡性能。

对于CIFAR-10数据集,足够大的群体大小始终如一地提供大约81%准确度的解决方案,这与为未改变的数据集提出的其他好的解决方案相当。平均而言,该结果是在第六代标记附近实现的,但是优化运行之间的差异非常大并且高度依赖于粒子初始化的位置。

发现的整体最佳配置分别是前后卷积层的112-128-96-96-80-32神经元,dense 层为640个神经元。该配置在测试集上产生82.1%的可观准确度,该测试集是针对未修改的CIFAR-10数据集发布的最高结果之一。

总之,我们发现深度神经网络超参数的粒子群优化是一种非常有趣且有前途的方法。事实证明,PSO能够有效地遍历大型解决方案搜索空间,并且无需先验知识即可提供一致,性能良好的解决方案,显然超越了人类在这方面的能力。

就未来在这方面的工作而言,我们建议将重点放在开发和平衡探索和利用更大更深层神经网络的超参数空间的方法上。在这种情况下,我们特别感兴趣的是,更积极的粒子退役和再生的改编以及动态惯性的其他实施如何影响结果质量和效率的结果。我们也非常有兴趣将PSO与其他本地化搜索方法配对,例如随机梯度下降。

标签: #粒子群算法加速度