Datawhale
作者:瞿晓阳,AutoML书籍作者
寄语:让计算机自己去学习和训练规则,是否能达到更好的效果呢?自动机器学习就是答案,也就是所谓“AI的AI”,让AI去学习AI。
随着深度神经网络的不断发展,各种模型和新颖模块的不断发明利用,人们逐渐意识到开发一种新的神经网络结构越来越费时费力,为什么不让机器自己在不断的学习过程中创造出新的神经网络呢?
正是出于这个构思,2017年Google推出了AutoML,一个能自主设计深度神经网络的AI网络。
自此,人工智能又有了更进一步的发展,人们开始探索如何利用已有的机器学习知识和神经网络框架来让人工智能自主搭建适合业务场景的网络,人工智能的另一扇大门被打开。
随着深度神经网络的广泛应用和不断发展,越来越强大的网络模型被构建,从AlexNet,到VGGNet,GoogleNet以及ResNet。
虽然这些模型足够灵活,但人工神经网络结构仍然需要大量的专业知识并且需要充足的时间,而且调参对于深度模型来说也是一项非常痛苦的事情,众多的超参数和网络结构参数会产生爆炸性的组合。
是否有可能使这一过程自动化,让每一个人,甚至是不了解机器学习的人可以轻松地将机器学习应用于所面临的问题,自动化深度学习(AutoDL)就是答案。
如图1所示,是现在的深度学习方法与自动化深度学习的对比图,自动化深度学习的目标是通过超参数优化的方法让机器学会自动设计网络及调参优化。
图1:传统深度学习与AutoDL比较
神经架构搜索(NAS)是一种针对特定数据集从头开始自动设计性能良好的模型的技术,NAS技术与超参数优化所解决的问题相同:在搜索空间中找到对目标任务表现良好的网络结构。
NAS主要由三个基本问题组成,分别是搜索空间、优化方法、以及评估方法。
搜索空间针对目标任务定义了一组可能的神经网络结构。
优化方法确定如何探索搜索空间以找到好的架构。
评估方法评估通过优化方法考虑的每种网络结构的性能。
由于神经网络的结构和连接通常可以由可变长度的字符串指定,在实际问题中,根据特定数据集生成指定的“子网络”,通过训练得到验证集的准确性。
图2:NAS组件
网络的结构(如:神经网络的深度,即隐藏层个数,和特定的隐藏层宽度)
配置(如:操作/网络间的链接类型,核的大小,过滤器的数量)
因此,给定搜索空间,可以将其中的神经网络结构编码成该空间下的表示。这种搜索空间被称为marco(宏)搜索空间。
好的搜索空间为好的搜索结果提供可能性,搜索空间的设计不断发展,除了传统的链式结构外,“多分支”结构也开始起着越来越重要的作用,启发于ResNet和DenseNet提出的跳跃连接和密集连接,这些跳跃连接也已经被加入到搜索空间的定义中。
另一个趋势是设计一个只包含一个基本单元(cell)搜索空间,被用作整个网络中的block(如卷积块)的构建。这类搜索空间被称为micro(微)搜索空间,其中搜索成本和复杂性可以被显著的降低。
除了减小搜索复杂度外,仅仅通过改变单元(cell)堆叠的数量,可以很容易地把找到的最好的block的设计推广到其他任务。
搜索算法是一个迭代过程,用于确定以何种规则来探索搜索空间。
在搜索过程的每个步骤或迭代中,一个来自于搜索空间的样本会被生成,即子网络(child network)。所有的子网络在训练集上被训练,在验证集上的准确率作为目标被优化(或者是强化学习中的奖励)。
搜索算法的目的是找到最佳子网络,例如最小化验证集损失或最大化奖励。主流的NAS搜索策略大致可以分为强化学习、进化算法和可微分的梯度下降算法。
1. 基于强化学习的方法
强化学习有三个基本要素:智能体(Agent)、环境(Environment)和奖励(Reward),智能体以 “试错”的方式进行学习,通过与环境交互获得奖励来指导行为。智能体和环境之间的交互可以被视为顺序决策过程:在每个时间t,Agent在动作集合中选择动作与环境交互并接收奖励。
图3: 强化学习中智能体与环境的交互过程
神经架构自动搜索中,强化学习把架构的生成看成一个智能体(agent)在选择动作(action)的过程,通过在测试集上测试网络性能来获取奖励值(reward),从而指导架构的生成。
与传统的强化学习问题略有不同的是构建了一个RNN控制器,通过迭代的方式来更新控制器从而生成合适的架构。
图4:基于强化学习的网络架构搜索示意图
2. 基于进化算法的方法
基于进化算法的神经网络结构搜索,在演化步骤中,把子模型作为种群来进化。群体中的每个模型都是训练过的网络,并被视为个体,模型在验证集上的表现(例如,准确度)作为每个个体的质量好坏。基于进化算法神经架构搜索的通用流程如下:
初始化操作,对现有的各个个体进行编码,把这些个体编码成种群。
选择操作,从种群中根据适应度挑选出优秀的个体。
繁殖操作,分为两种:有性繁殖操作和无性繁殖操作,无性繁殖的操作包括变异操作,有性繁殖包括交叉操作或者组合操作。
网络训练操作,对上一步繁殖操作得到的所有个体神经网络进行训练,训练到收敛为止。
适应度计算操作,使用指定的验证集对每个已训练的网络计算验证准确率,把验证准确率作为适应度。
具体流程如下图所示:
图5: 基于进化算法的神经架构搜索通用流程
3. 基于可微分架构搜索的方法
可微分架构搜索方法很多种,其中比较出名的是卡内基梅隆大学提出的
DARTS(DifferentiableArchitecture Search)。
与传统的在离散的和不可微的搜索空间尚采用进化或强化学习搜索结构的方法不同,该方法是基于将结构表示的松弛化(relaxation),允许使用梯度下降来解决架构搜索的问题,所以效率可以比之前不可微的方法快几个数量级。
简单来说就是给操作(operations)的每个连接都赋一个权值alpha,优化的目的是为了通过梯度下降优化alpha矩阵,根据alpha的大小来确定连接方式。
神经网络原有的权重称为矩阵,在训练集上固定alpha矩阵的值,然后梯度下降矩阵的值,再验证集上固定矩阵的值,然后梯度下降alpha的值,循环往复直到这两个值都比较理想。
图6:DARTS搜索空间
无论是基于强化学习还是进化算法的搜索,子网络都要被训练和评估,以指导搜索过程。但是从头开始训练每个自网络需要超大的资源和时间。所以NAS的加速方案被提出,主要代表方案是改进代理模型和权值共享。
1. 改进代理(Improve proxy)
很明显代理模型的引入会带有误差,研究证明子网络的FLOPs(每秒计算的浮点数)和模型大小与最终准确度呈负相关,因此引入了一种应用于奖励计算的校正函数,通过早期停止获得子网络的精度,弥合代理与真实准确性之间的差距。
根据这一想法,研究者们提出了几种通过“预测”神经架构的精度来改进代理度量的方法,预计精确度较差的子网络将被暂停训练或直接放弃。以下是三种预测神经架构搜索的方法:
根据子网络的学习曲线预测神经架构的精度。
回归模型。使用基于网络设置和验证曲线的特征来预测部分训练模型的最终性能。
训练代理模型,基于progressively architectural properties预测子网络的准确性。
2. 权值共享(Weight sharing)
在神经网络的搜索和训练过程中,涉及到很多权值和超参数,权值共享可以实现加速,在这里列举几个权值共享的经典方法:
在进化过程中,允许子网络继承父本的权重,而不是从头训练每个子模型。使用One shot 模型实现共享。
设计带有辅助超网络的“主”模型,以生成以模型架构为条件的主模型的权重。从超网络代表的分布中采样的权重。
使用one-shot模型,主要有两种方法:
第一种是训练表示各种候选结构的one-shot模型,然后使用预训练的one-shot模型权重在验证集上随机评估这些候选结构。
另一种是使用包含整个搜索空间的one-shot模型训练所有权重,同时,使用梯度下降来优化候选结构的分布。
通过网络转换/态射来探索搜索空间,它使用诸如插入层或添加跳过连接之类的操作将训练好的神经网络修改为新的结构。由于网络转换/态射从现有的训练网络开始,因此重用权重并且仅需为数不多的训练迭代来完成新的结构的训练。
图7:one-shot结构图,实现连接无法删除而虚线连接可以删除
使用开源的开源自动机器学习项目例如微软的NNI和亚马逊的AutoGluon可以快速实现常用NAS算法。下面简单介绍使用AutoGluon在10分钟内快速实现ENAS的过程:
1. 定义基础Block结构
2. 定义ENAS单元结构
3. 定义超网络
4. 构造ENAS_Scheduler开始训练
5. 训练结束可以查看搜索到的最佳结构
传统的人工智能旨在使用机器帮助人类完成特定的任务,随着人工智能的发展,在计算机领域衍生出了机器学习,机器学习旨在通过计算机程序完成对数据的分析,从而得到对世界上某件事情的预测并做出决定。当机器学习不断发展,其复杂程度也不断增加,完全依靠人为对计算机进行规定,使其按照人为设定的规则运行时,耗费了大量的人力资源。
如果让计算机自己去学习和训练规则,是否能达到更好的效果呢?自动机器学习就是答案,也就是所谓“AI的AI”,让AI去学习AI,从而减少人工的参与,让机器完成更复杂的工作,掀起下一代人工智能的浪潮。
本文摘编自《深入理解AutoML和AutoDL》,经出版方授权发布。作为国内首本系统介绍AutoML的中文书籍,该书提供了大量AutoML和AutoDL的启发性思路和理解角度,确实是一本AutoML入门的好书。
“为沉迷学习点赞↓
Scanner input = new Scanner(System.in); int a = -1; int min = 0; int max = 0; System.out.print("请输入一个整数(输入0结束):"); a = input.nextInt(); if (a != 0) { min = a; max = a; while (t...
顾名思义,响应式布局就是为适应不同终端而形成的一种技术。我总结了一个简单的例子帮助大家了解和学习响应式布局。实现响应式布局的几种方式:媒体查询、JS、流体布局、弹性布局…常用的meta标签<meta content="width=device-width,initial-scale=1.0, maximum-scale=1.0, user-scalable=0;"name="viewp..._响应式布局demo
翻了一篇workflow上关于yield的用法,翻的有点烂,在这里贻笑大方了,慢慢来,总是期待着一点一点的进步。为了理解yield的机制,我们需要理解什么是生成器。在此之前先介绍迭代器iterables。Iterables当你创建一个list,你可以一个一个的获取,这种列表就称为迭代:>>> mylist = [1, 2, 3]>>> for i in m
一、需求分析: 1、设置了生命时间的key,过期的时候能不能提示,能够监听过期的key? 2、怎样用redis实现定时任务? 二、应用场景: 在我们程序中经常会有需要定时执行的程序,比如:商品下单后半小时内不支付自动撤单等等。 最简单粗暴的办法,就是写一个程序,让它定时执行,但是这样对服务器压力比较大。 这里说的是用Redis去实现这样的一个功能。 三、Redis键空间通知介绍 在 Redis 的...
以下是新东方在线为大家整理的计算机统考408的相关资料,快来看看吧啊!首先介绍一下,什么是408计算机统考?计算机考研专业课在2009年年初实行了第一次统考,统考是国家教育部出题,全国统一考试,计算机考研统考编号是408,408考试科目包括:数据结构、计算机组成原理、操作系统和计算机网络这四门科目。那么408到底应该考多少分,这个要看学校,并不是所有学校都要求看很高的分数,复旦上交就不说了起码10..._计算机考研408英语几
方案一(解决控制台输出的乱码问题)打开文件以后(没有此文件可以点击创建)添加一行代码 -Dfile.encoding=UTF-8方案二(解决代码编译时的乱码error)中文注释有时候会出现的编码异常,在工程的gradle文件中添加tasks.withType(JavaCompile) {options.encoding = "UTF-8"}方案三(解决代码编译时的乱码error)在报乱码error的文件中右键选择在文件夹中打开用文本文档打开文件,点击文件-另存为,修改编码格式_android 乱码
2019独角兽企业重金招聘Python工程师标准>>> ...
原文:https://blog.csdn.net/ljzology/article/details/81287500选择最优模型的指导思想是从两个方面去考察:一个是似然函数最大化,另一个是模型中的未知参数个数最小化。似然函数值越大说明模型拟合的效果越好,但是我们不能单纯地以拟合精度来衡量模型的优劣,这样回导致模型中未知参数越来越多,模型变得越来越复杂,会造成过拟合。所以一个好的模型应该是拟合精..._最小信息准则
小程序-报错 xxx is not defined (已解决)问题情境:这样一段代码,微信的小程序报错 is not defined我 wxml 想这样调用//wxml 代码<view class='ltext'>{{_typeTitle}}</view>我出错的情况是这样的//程序 js 代码Page({data: { titleArray: ..._app is not defined
0x00 简介Exchange Server是微软公司的是一套电子邮件服务组件,是个消息与协作系统,主要提供包括从电子邮件、会议安排、团体日程管理、任务管理、文档管理、实时会议和工作流等协作应用。0x01 漏洞概述CVE-2021-26855该漏洞是Exchange中的服务端请求伪造漏洞(SSRF),利用此漏洞的攻击者能够发送任意HTTP请求并绕过Exchange Server身份验证,远程未授权的攻击者可以利用该漏洞以进行内网探测,并可以用于窃取用户邮箱的全部内容。危害:该漏洞是Exch_exchange proxylogon 复现
监控系统是整个运维环节,乃至整个产品生命周期中最重要的一环,事前及时预警发现故障,事后提供翔实的数据用于追查定位问题。监控系统作为一个成熟的运维产品,业界有很多开源的实现..._big brother btf
智能设备功能的日益强大和用户使用场景的多样性,使一款APP在移动设备端中断操作非常频繁,APP在中断场景的表现直接影响用户体验,中断测试是APP功能测试的必测内容。 说到手机的中断测试,来电中断是大家最容易想到的,常规的测试包括呼叫和通话中断。贴近智能手机的用户应用场景,我们发现打电话已经不局限于使用运营商网络,常用的社交软件如QQ、微信都支持语音和视频电话。这些软件使用网络进行通话或者视_软件测试发生异常中断时的处理