进化算法可以不再需要计算集群,开普敦大学的新方法用一块GPU也能刷新MNIST记录

简介: 他们实验中只使用了一块GTX1070 GPU,训练时间6到24小时,就可以取得这样的成果,他们觉得非常满意。他们的研究也首次尝试了把神经进化用在一维卷积网络的创造中,用来解决情感分析、包括嵌入层的优化问题。

进化算法可以不再需要计算集群,开普敦大学的新方法用一块GPU也能刷新MNIST记录

雷锋网 AI 科技评论按:进化算法和生成式对抗性网络GANs类似,提出时大家都觉得是很好的想法,可以帮人类极大地拓展行为和想象空间,然而找到好的、可控的实现方法却没那么简单。GANs方面现在已经有了许多的成果,但是进化算法仍然停留在较为初期的状态,无法生成大规模、复杂的网络,需要的计算资源也是在计算集群的级别上。

不过,进化算法的研究也是一步步在“进化”的,最近这项来自南非开普敦大学的研究就带来了新的发现,只用单块GPU的资源就进化出了理想的网络结构,还刷新了三项测试的结果。雷锋网(公众号:雷锋网) AI 科技评论把背景和这篇论文的成果简单介绍如下。

进化算法可以不再需要计算集群,开普敦大学的新方法用一块GPU也能刷新MNIST记录

深度神经网络是强大但是反直觉的野兽,要有丰富的经验、反复试错,才能驾驭它们得到好的表现。也有许多例子证明,神经网络的表现会随着深度的增加不断提高。这些特性加上深度学习在各个领域内越来越强的影响力都表明,能自动找到最优或者接近最优的网络结构和超参数的方法越来越重要。

不过显然,网络中每一层的特性、层与层的顺序、激活函数、全连接层里的单元数量、卷积层里卷积核的数量等等建立深度学习网络需要的参数,挑选的时候每一项都不算容易。不过现在有一个好处是,我们有丰富的计算资源,一般来说都可以尝试许多种不同的组合,找到效果比较好的。那有没有可能只用非常有限的计算资源,比如一块GPU,就取得不错的结果呢?

这篇论文就讨论了一种思路,通过进化算法,发展出优秀的神经网络。这样的神经进化算法并不是新鲜事物,大概三十年前就有人提出过,最开始是在一项跟神经网络中的连接权重相关的研究中。

神经进化算法的近期成果

下面介绍一下神经进化算法方面的近期相关工作,跟这篇论文中的成果相比,它们都用到了很多的计算资源。E. Real 等在“Large-scale evolution of image classifiers”(arXiv:1703.01041, 2017)中提出了一种神经进化的方法,优化用于图像分类的神经网络,其中用到了含有250台计算机的并行计算集群,而在CIFAR图像数据集任务中取得了可观的成果。B. Zoph 和 Q. V. Le 则在“Neural architecture search with reinforcement learning”(arXiv:1611.01578, 2016)中用了一个综合了强化学习的循环神经网络,用来学习优秀的架构,他们一共在800个GPU上训练了800个网络。

R. Miikkulainen 等人提出了CoDeepNEAT(“Evolving deep neural networks”,arXiv:1703.00548, 2017),其中产生了一大批模型和蓝图。这些蓝图是由数个节点组成的,节点指向表征了神经网络的特定模块。这样一来,他们所提的方法就让重复结构的进化变得可能,因为蓝图可以重复使用进化后的模块。T. Desell 提出了 EXACT(“Large scale evolution of convolutional neural networks using volunteer computing” ,arXiv:1703.05422, 2017),这是一种用来部署在分布式计算集群上的神经进化算法,他们当时使用了4500台志愿参与者的计算机,进化出了12万个网络用来搞定MNIST数据集。他们的方法中没有使用池化层,也仅限于使用2维的输入和滤波器。

作者们还发现,近期有研究中只用一个GPU就可以进化出能够准确判断出监督学习任务中需要的是回归模型还是分类模型的深度神经网络,在一系列不同的任务中获得了96%的平均准确率。(E. Dufourq 和 B. A. Bassett, “Automated problem identification: Regression vs classification via evolutionary deep networks”,Annual Conference of the South African Institute of Computer Scientists and Information Technologists, ACM, 2017)这项成果是作者们的这篇论文的直接先驱,而且只要有足够的计算资源就可以无缝衔接到这篇论文中的网络优化过程中来。

基因算法

基因算法(genetic algorithm,GA)是一种可以用来解决优化问题的进化算法。首先初始化一群染色体,每个染色体都表征了优化问题的一个解决方案。然后通过一个匹配度函数评价每个染色体,以确定哪个染色体可以解决这个问题。在迭代进化模型中,基因算法会迭代很多次,可以称作“世代”(generations),一直迭代到预定义的条件达成为止(比如最大世代数目)。每一个染色体由很多个基因组成,这些基因就可以用基因操作器进行替换。经过基因操作器操作之后的染色体,就可以称为原来染色体的子代(offspring)。根据染色体群落数目的不同,可以产生多个子代。每个世代中,子代染色体都会代替现有的染色体群落。

这篇论文中,作者们使用了传统的基因算法。他们还额外增加了世代数目和网络训练中epoch的数目,用来探索最佳的epoch的数目。所用的基因算法如下图。

进化算法可以不再需要计算集群,开普敦大学的新方法用一块GPU也能刷新MNIST记录

作者们采用基因算法的原因是,染色体的复杂程度可以根据编码的基因数目增大或者降低。基因算法相比其它进化算法还有一些好处:它们可以流畅地处理离散(比如层类型)和连续(比如学习速率)的连续空间,进行神经进化研究的时候这就是理想的选择。

EDEN

在这篇论文中,作者们提出了进化性深度网络(Evolutionary DEep Networks,EDEN),这算一种结合了基因算法和深度神经网络的的神经进化算法,用来探索神经网络架构、相关的超参数以及epoch数目的搜索空间。在这项研究中,作者们探索了例如嵌入层的优化这类的额外特征,并且提高了现有研究的复杂度。作者们希望通过EDEN解答两个问题:1,能否通过进化的方法得出总体来说较为优秀的架构和超参数用来解决许多不同的问题(并不仅限于图像识别)?2,与之前研究中使用的大规模计算集群相反,他们能否用单个GPU就达到这一目标?

作者们将EDEN接入了TensorFlow,这样新的层、函数以及其它的特征都可以轻松地被EDEN集合、应用,因为这些特征的表征函数都可以作为TensorFlow函数调用。而且,EDEN也不局限于TensorFlow,其它的现代深度神经网络框架也可以用来实现EDEN。下图就是一个EDEN的染色体在编码后得到的神经网络结构的例子。

进化算法可以不再需要计算集群,开普敦大学的新方法用一块GPU也能刷新MNIST记录

每个EDEN染色体包含两个基因,编码学习速率和一个神经网络。图中展现的是一个用EDEN进化出的用于情绪分析的神经网络。EDEN创造了一个输出维度为120的嵌入层,其后有3个一维卷积层。EDEN进化出了滤波器的数目、每个滤波器的维度,以及每个滤波器响应的激活函数。对于最后一个层,EDEN决定使用的激活函数是sigmoid。这个染色体上的学习速率是0.0023。

下面这个动图展示了EDEN执行的过程中染色体进化的过程,要解决的问题是一个MNIST图像分类问题。这个过程中神经元群落向着一个高效的解决方案收敛,最终主要由二维卷积层组成。

进化算法可以不再需要计算集群,开普敦大学的新方法用一块GPU也能刷新MNIST记录

实验结果

运用EDEN,在10个世代和13个训练epoch后,作者们在多项测试中分别得到的网络结果如下。

进化算法可以不再需要计算集群,开普敦大学的新方法用一块GPU也能刷新MNIST记录

对于不同的任务,网络中进化出的学习速率和参数数目也不一样。其中EMNIST-balanced、EMNIST-digits 和 Fashion-MNIST 三项任务中取得了最好的结果,刷新了目前的最好成绩。对于CIFAR-10中低很多的表现,作者们认为原因是,由于他们这项研究关注效率更多,所以对模型的深度做出了一定限制,也就限制了CIFAR-10任务中的表现。

进化算法可以不再需要计算集群,开普敦大学的新方法用一块GPU也能刷新MNIST记录

这张图是在MNIST任务中,网络进化到不同世代的平均匹配度变化图。其中的竖线标出的是整个群落中5%到95%的匹配度值。在进化刚开始时,群落中的匹配度有很大的不同,然后随着解决方案变好、群落收敛,匹配度的变化幅度开始减小。图中也标出了自进化开始之后,最初、中间、最终三个世代时的网络结构以及相关的超参数。

作者们表示,他们实验中只使用了一块GTX1070 GPU,训练时间6到24小时,就可以取得这样的成果,他们觉得非常满意。他们的研究也首次尝试了把神经进化用在一维卷积网络的创造中,用来解决情感分析、包括嵌入层的优化问题。



本文作者:杨晓凡
本文转自雷锋网禁止二次转载, 原文链接
相关实践学习
部署Stable Diffusion玩转AI绘画(GPU云服务器)
本实验通过在ECS上从零开始部署Stable Diffusion来进行AI绘画创作,开启AIGC盲盒。
目录
相关文章
|
4月前
|
数据采集 机器学习/深度学习 算法
机器学习方法之决策树算法
决策树算法是一种常用的机器学习方法,可以应用于分类和回归任务。通过递归地将数据集划分为更小的子集,从而形成一棵树状的结构模型。每个内部节点代表一个特征的判断,每个分支代表这个特征的某个取值或范围,每个叶节点则表示预测结果。
145 1
|
2月前
|
JavaScript 算法 前端开发
JS算法必备之String常用操作方法
这篇文章详细介绍了JavaScript中字符串的基本操作,包括创建字符串、访问特定字符、字符串的拼接、位置查找、大小写转换、模式匹配、以及字符串的迭代和格式化等方法。
JS算法必备之String常用操作方法
|
2月前
|
JavaScript 算法 前端开发
JS算法必备之Array常用操作方法
这篇文章详细介绍了JavaScript中数组的创建、检测、转换、排序、操作方法以及迭代方法等,提供了数组操作的全面指南。
JS算法必备之Array常用操作方法
|
8天前
|
算法 C++
如何精确计算出一个算法的CPU运行时间?
如何精确计算出一个算法的CPU运行时间?
|
2月前
|
搜索推荐 算法 Java
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
该博客文章通过UML类图和Java源码示例,展示了如何使用适配器模式将QuickSort类和BinarySearch类的排序和查找功能适配到DataOperation接口中,实现算法的解耦和复用。
22 1
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
|
1月前
|
算法 数据可视化 数据安全/隐私保护
基于LK光流提取算法的图像序列晃动程度计算matlab仿真
该算法基于Lucas-Kanade光流方法,用于计算图像序列的晃动程度。通过计算相邻帧间的光流场并定义晃动程度指标(如RMS),可量化图像晃动。此版本适用于Matlab 2022a,提供详细中文注释与操作视频。完整代码无水印。
|
2月前
|
算法 定位技术 vr&ar
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
148 0
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
|
3月前
|
机器学习/深度学习 编解码 监控
算法金 | 深度学习图像增强方法总结
**图像增强技术概括** 图像增强聚焦于提升视觉效果和细节,广泛应用于医学、遥感等领域。空间域增强包括直方图均衡化(增强对比度)、对比度拉伸、灰度变换、平滑滤波(均值、中值)和锐化滤波(拉普拉斯、高通)。频率域增强利用傅里叶变换、小波变换,通过高频和低频滤波增强图像特征。现代方法涉及超分辨率重建、深度学习去噪(如CNN、Autoencoder)、图像修复(如GAN)和GANs驱动的多种图像处理任务。
82 14
算法金 | 深度学习图像增强方法总结
|
2月前
|
算法 Go Python
[算法]计算斐波拉契数列
[算法]计算斐波拉契数列
|
4月前
|
机器学习/深度学习 算法 数据挖掘
算法金 | K-均值、层次、DBSCAN聚类方法解析
**摘要:** 这篇文章介绍了聚类分析的基本概念和几种主要的聚类算法。聚类是无监督学习中用于发现数据内在结构的技术,常用于市场分析、图像分割等场景。K-均值是一种基于划分的算法,简单高效但易受初始值影响;层次聚类包括凝聚和分裂方式,形成层次结构但计算复杂;DBSCAN基于密度,能处理任意形状的簇,但参数选择敏感。文章还讨论了这些算法的优缺点和适用场景,并提供了相关资源链接和Python实现。
79 9
算法金 | K-均值、层次、DBSCAN聚类方法解析
下一篇
无影云桌面