首页 > 编程语言 >【AutoML】进化算法如何用于自动模型搜索(NAS)

【AutoML】进化算法如何用于自动模型搜索(NAS)

时间:2022-10-12 21:03:25浏览次数:111  
标签:进化 迭代 模型 NAS 算法 AutoML Stage


大家好,欢迎来到专栏《AutoML》,在这个专栏中我们会讲述AutoML技术在深度学习中的应用,这一期讲述进化算法用于模型搜索的基本概念和流程。

作者&编辑 | 言有三

一直以来,网络结构的设计是一个非常需要经验且具有挑战性的工作,研究人员从设计功能更加强大和更加高效的模型两个方向进行研究,随着各类经典网络设计思想的完善,如今要手工设计出更优秀的模型已经很难,而以AutoML为代表的自动化机器学习技术就成为了大家关注的热点,本期我们介绍基于进化算法的方法。

1 进化算法简介

进化算法是一类算法的统称,是模拟自然选择和遗传等生物进化机制的一种搜索算法,其中最为我们熟悉的一类就是遗传算法。

各类进化算法本质上都是迭代算法,其中涉及到几个最基本的概念和流程,首先作出解释:

(1) 种群。所谓种群,其实就是解空间中的一个子集,即若干个模型。

(2) 个体。所谓个体,就是其中一个解,即某一个模型。

(3) 编码。所谓编码,就是将搜索对象用计算机语言描述,比如将网络结构用固定长度的二进制字符串表示。

基于进化算法搜索的迭代过程如下:

【AutoML】进化算法如何用于自动模型搜索(NAS)_迭代

在以上搜索过程中,每一次迭代操作就是从一组解到更好的一组解,它要解决的最核心的问题是如何产生新一代。

每一次产生下一代需要3个步骤,即选择,交叉,变异:

(1) 选择过程,要实现的就是从群体中选择更优的对象,比如精度更高的模型。

(2) 交叉过程,它就是要实现不同优秀对象的信息交换,比如两个好模型的模块交换。

(3) 变异过程,它是对个体的微小改变,相对于交叉过程,能引入更多的随机性,有助于跳出局部最优解。

关于进化算法的具体细节和种类,已经超出了本文的内容,读者可以单独阅读资料来学习进化算法。

2 基于进化算法的网络搜索

使用进化算法来进行网络搜索,要完成的步骤就是:

【AutoML】进化算法如何用于自动模型搜索(NAS)_迭代_02

下面我们以Genetic CNN[1]算法作为案例来解读如何实现前两个步骤,该网络关心的是block级别的搜索。

2.1 网络编码

首先我们来看网络编码方式,它要完成的是将模型结构用二进制进行编码,其中最简单的方式就是用固定长度的字符串进行表示。

下面我们只考虑卷积拓扑结构本身,一个层称之为一个Stage,它们使用池化方式进行连接,Stage本身不改变特征图大小,并且内部卷积操作具有相同的卷积核和通道数。

假如一个网络包括S个Stage,其中每一个Stage包括Ks个节点,总共有1+2+...+(Ks −1)个连接,因此也需要这么多位进行表示。

如下图中Stage 1,有4个节点,则总共有6位进行表示,其中1表示A2与A1之间有连接,00表示A3与A1,A2之间没有连接,111表示A4与A1,A2,A3都有连接。下图中的Stage 2,有5个节点,则总共有10位进行表示。

【AutoML】进化算法如何用于自动模型搜索(NAS)_搜索_03

下图则展示了K=4时,VGGNet,ResNet,DenseNet网络结构的示意及其编码向量。

【AutoML】进化算法如何用于自动模型搜索(NAS)_迭代_04

2.2 种群迭代

有了编码过程后,接下来就可以进行种群迭代, 具体来说就是实现3个步骤,选择,交叉与变异,其中整个流程的伪代码如下。

【AutoML】进化算法如何用于自动模型搜索(NAS)_迭代_05

T表示要迭代次数,N就是产生的个体数,初始时每一个bit都从伯努利分布中采样进行随机初始化,并计算初始识别精度。

每一次的迭代中,首先使用俄罗斯转盘选择法选择其中精度较高的模型,然后两两配对进行交叉(为了保证拓扑结构,交叉的最小单元是Stage),最后对没有交叉的个体进行变异,评估精度,再进行下一次的迭代。

最终的输出结果就是一系列个体和识别精度。

由于以上训练过程中计算量非常大,因此训练时首先在较小的数据集(如MNIST,CIFAR10)上训练,然后再迁移到更大的数据集(如ImageNet)。

下图展示了学习到的两个网络结构,它的特点是,在网络浅层,类似于AlexNet和VGGNet,在网络中间层,类似于GoogleNet,在网络深层,类似于ResNet。

【AutoML】进化算法如何用于自动模型搜索(NAS)_搜索_06

上述算法具有一定局限性,比如每一层内卷积核大小和通道数固定,这是后续可以改进的地方,更多工作请参考[2,3]。

3 关于模型优化

公众号写过很多的模型解读了,如下是一些文章总结和直播链接以及资源下载。

【完结】总结12大CNN主流模型架构设计思想

​「总结」言有三&天池深度学习模型设计直播汇总,赠超过200页课件​

并且最近也出了一本新书,供对模型设计和优化感兴趣的朋友阅读。

言有三新书来袭!业界首次深入全面讲解深度学习模型设计

【AutoML】进化算法如何用于自动模型搜索(NAS)_迭代_07

知识星球中最重要的板块就是模型结构1000变板块,比公众号的内容更深更广。其中的模型优化部分主要包括紧凑模型的设计,剪枝,量化,知识蒸馏,AutoML等内容的详细解读,感兴趣可以移步。

【AutoML】进化算法如何用于自动模型搜索(NAS)_迭代_08

[1] Xie L, Yuille A L. Genetic CNN[C]. international conference on computer vision, 2017.

[2] Miikkulainen R, Liang J, Meyerson E, et al. Evolving Deep Neural Networks[J]. arXiv: Neural and Evolutionary Computing, 2017: 293-312.

[3] Real E, Moore S, Selle A, et al. Large-scale evolution of image classifiers[C]. international conference on machine learning, 2017: 2902-2911.

总结

本次我们简单介绍了进化算法在模型的设计和优化中的基本流程,介绍了基于block作为最小搜索单元的代表性框架,但并没有对各种粒度的算法进行介绍。更多模型设计和优化,AutoML的内容

标签:进化,迭代,模型,NAS,算法,AutoML,Stage
From: https://blog.51cto.com/u_14122493/5751545

相关文章

  • 【AutoML】强化学习如何用于模型蒸馏?
    大家好,欢迎来到专栏《AutoML》,在这个专栏中我们会讲述AutoML技术在深度学习中的应用,这一期讲述在知识蒸馏中的应用。作者&编辑|言有三上一期给大家介绍了AutoML技术在模型......
  • go语言逆向技术之---恢复函数名称算法
    go语言是最近几年发展非常火的一种语言,它具备和C/C++一样的运行速度快的优点,同时又具备开发效率高,支持包管理机制高阶语言特点。其编译出来的二进制文件格式和C/C++一样运......
  • KMP算法中对于next数组构建的理解
     时间:2022/10/12 一.next数组原理的说明KMP算法一般用于解决字符串匹配的问题,在KMP算法出现之前,字符串匹配一般通过双层for循环的暴力方法解决,时间复杂度为O(......
  • 【AutoML】强化学习如何用于模型量化?
    大家好,欢迎来到专栏《AutoML》,在这个专栏中我们会讲述AutoML技术在深度学习中的应用,这一期讲述在模型量化中的应用。作者&编辑|言有三上一期给大家介绍了AutoML技术在模型......
  • 【杂谈】GAN对人脸图像算法产生了哪些影响?
    人脸图像是整个图像领域里面研究人员最多,应用最广的一个方向。GAN作为时下最新兴的深度学习模型,在人脸图像领域里已经颇有建树,今天咱们就聊聊GAN对人脸图像算法的一些主要影......
  • 【AutoML】当前有哪些可用的AutoML平台?
    大家好,欢迎来到专栏《AutoML》,在这个专栏中我们会讲述AutoML技术在深度学习中的应用,这一期讲述现有可用的AutoML平台。作者&编辑|言有三自从Google提出AutoML那天起,工业界......
  • 【每周CV论文推荐】换脸算法都有哪些经典的思路?
    欢迎来到《每周CV论文推荐》。在这个专栏里,还是本着有三AI一贯的原则,专注于让大家能够系统性完成学习,所以我们推荐的文章也必定是同一主题的。人脸伪造/换脸算法目前在一定......
  • 【机器学习实战学习笔记】之 2 k-近邻算法
    本学习笔记参考书目《机器学习实战》第二章。本章所有本书对应代码及数据集下载请点击(​​下载链接​​)。本文中博主自己写的代码如有需要,请点击(​​下载链接​​)。目录​​......
  • 代码随想录算法训练营第一天 | 704. 二分查找 35.搜索插入位置 27. 移除元素 (LeetC
    704.二分查找题目链接使用条件:数组有序无重复元素写法:根据搜索区间边界是左闭右开还是左闭右闭分为两种写法:左闭右开区间右侧不包括在区间内,在写代码的时候......
  • 插入排序算法步骤和思路
    算法步骤将待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置......