深度学习的未来:神经架构搜索

本文转载自:专知

【导读】我们中的很多人知道ResNet的成功,当我们使用ResNet作为预训练网络时,有没有好奇过,怎么会有人能够想出这样的网络呢?这就是神经架构搜索做的事。

我们只需要将数据集输入神经架构搜索系统,它就能针对该数据集找到最适合的神经架构。神经架构搜索可以看出是一个AutoML的一个子领域,并与参数优化有显著的替身。为了理解神经架构搜索,我们需要仔细思考它在做什么。它是在所有可能的结构中,以一定的搜索策略,找到最大化性能的结果。下图是对神经架构搜索的一个总结。

它有三个主要组成部分:搜索空间、搜索策略与性能评估。

搜索空间定义了神经架构搜索可能给出的模型。它可以是链式的结构,第n-1层的输出作为第n层的输入,或者也可以是现代化的复杂架构,包括skip connection等。

很多时候,人们都想手动设计外层的架构,在这种情况下,外层的架构是固定的,神经架构搜索只搜索一个网络单元的结构。这种类型的搜索被称为micro-search 或者单元搜素。

在许多神经架构搜索的方法中,细节与整体架构同时层次化地搜索。

第一层确定了一系列主要的操作,第二层确定了这些操作的链接方法,第三层确定了第二层中的一些模块是如何连接的,以此类推。

强化学习

强化学习通过一些策略来执行一些操作,然后智能体更加执行操作后得到的奖励更新策略的参数。在神经架构搜索的情况下,智能体产出一些模型架构,称为子网络,然后然后训练模型,并把在数据集上的性能表现作为奖励,以此完成对智能体的迭代更新。

经典的RNN神经网络作为一个控制器或者智能体,它生成一个字符串,然后从该字符串中构建模型。

例如,上图中RNN的输出构建了一个滤波器,包括滤波器的大学与补偿。输出锚点用于预测跳跃链接。在N层之后,锚点会包含N-1个基于内容的sigmiod函数,用于预测之前的层时候需要被连接。

渐进式神经架构搜索(PNAS)

PNAS是一种网络单元搜索方法,他们从网络块中构建单元然后使用一种预定义的方法逐步增加单元。

每个模型块有几个预定义的操作构成。

原始论文中使用了如上图所示的几个操作,但是这些操作是可以被扩展的。

上图是一个完整的例子,即使只是为了确定这个单元内的结构是否是最好的,也需要10^14 次验证。

因此,为了减少复杂度,第一个单元只有一个模型块。这很简单,因为前面提到过,我们只有256个模型块可以选择。然后前K个表现最好的单元被选中,然后开始构建第二个模型块,直到构建完第5个模型块。

但是对于一个合理的K,需要测试太多两个代码块的候选了。一个很简易的解决方案是使用surrogate模型。

举例而言,我们可以构建256个单个单元的模型,然后测试它们的性能。然后用这些数据训练surrogate模型。然后用这些模型来预测2个单元的性能,而并不实际训练这个模型。当然,surrogate模型需要对不同大小的输入数据鲁棒。在这之后,前K个两个单元的模型被选定了,当两个单元的模型用真实数据真正训练好之后,这个surrogate模型被微调,然后扩展到第三个单元。

可微架构搜索

神经架构的搜索空间是离散的,每一个神经架构与另外一个至少神经架构至少有一个层是不一样的。这种方法应用了一个连续的松弛方法,可以用梯度下降法来优化这个离散域的搜索。

单元可以看成是一个有向无环图,每个节点X可以看成是一个隐式的表示(如卷积神经网络中的特征图),每个有向边可以看成是一些操作(如卷积,最大池化等),这些操作可以将节点i储存的隐式表示转移到节点j储存的隐式表示。

每个节点的输出可以由左边的公式求出。

在连续松弛下,与连接两个节点的单个操作不同,使用每个操作的凸组合来刻画两个节点之间的多种可能的边,每个边对应了一个特定的操作。每条边上也有一个权重alpha

现在,O(i,j)是节点i,j 之间的边o(i,j)的线性组合, o(.)ϵ S, S是所有可能的操作的集合。

输出O(i,j) 由上边的公式得到。

w∗ = argmin L_train(w, α∗ ).

使用L_train和L_val作为训练与验证的误差,两个误差都由模型的参数alpha与网络的参数w决定。架构搜索的目标是找到最好的alpha,最小化验证误差L_val,而权值w则是最小化训练误差得到的。这是因为alpha是高层的变量而w是低层的变量。

α * = argmin L_val(w ∗ (α), α)

s.t. w ∗ (α) = argmin L_train(w, α)

随着训练的进行,一些边的权值会比另一些高很多,为了再将这个连续的模型变为离散的,每两个节点之间只保留最大的边。

当所有的节点都确定之后,就可以构建更大的网络了。

原文链接:

https://medium.com/@ashiqbuet14/neural-architecture-search-nas-the-future-of-deep-learning-c99356351136

CVer
CVer

一个专注于计算机视觉方向的平台。涉及目标检测,图像分割,目标跟踪,人脸检测&识别,姿态估计,GAN和医疗影像等。

理论神经架构搜索深度学习计算机视觉
5
相关数据
权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

超参数优化技术

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

有向无环图技术

在图论中,如果一个有向图从任意顶点出发无法经过若干条边回到该点,则这个图是一个有向无环图(DAG图)。 因为有向图中一个点经过两种路线到达另一个点未必形成环,因此有向无环图未必能转化成树,但任何有向树均为有向无环图。

超参数技术

在机器学习中,超参数是在学习过程开始之前设置其值的参数。 相反,其他参数的值是通过训练得出的。 不同的模型训练算法需要不同的超参数,一些简单的算法(如普通最小二乘回归)不需要。 给定这些超参数,训练算法从数据中学习参数。相同种类的机器学习模型可能需要不同的超参数来适应不同的数据模式,并且必须对其进行调整以便模型能够最优地解决机器学习问题。 在实际应用中一般需要对超参数进行优化,以找到一个超参数元组(tuple),由这些超参数元组形成一个最优化模型,该模型可以将在给定的独立数据上预定义的损失函数最小化。

最大池化技术

最大池化(max-pooling)即取局部接受域中值最大的点。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

梯度下降技术

梯度下降是用于查找函数最小值的一阶迭代优化算法。 要使用梯度下降找到函数的局部最小值,可以采用与当前点的函数梯度(或近似梯度)的负值成比例的步骤。 如果采取的步骤与梯度的正值成比例,则接近该函数的局部最大值,被称为梯度上升。

卷积神经网络技术

卷积神经网路(Convolutional Neural Network, CNN)是一种前馈神经网络,它的人工神经元可以响应一部分覆盖范围内的周围单元,对于大型图像处理有出色表现。卷积神经网路由一个或多个卷积层和顶端的全连通层(对应经典的神经网路)组成,同时也包括关联权重和池化层(pooling layer)。这一结构使得卷积神经网路能够利用输入数据的二维结构。与其他深度学习结构相比,卷积神经网路在图像和语音识别方面能够给出更好的结果。这一模型也可以使用反向传播算法进行训练。相比较其他深度、前馈神经网路,卷积神经网路需要考量的参数更少,使之成为一种颇具吸引力的深度学习结构。 卷积网络是一种专门用于处理具有已知的、网格状拓扑的数据的神经网络。例如时间序列数据,它可以被认为是以一定时间间隔采样的一维网格,又如图像数据,其可以被认为是二维像素网格。

强化学习技术

强化学习是一种试错方法,其目标是让软件智能体在特定环境中能够采取回报最大化的行为。强化学习在马尔可夫决策过程环境中主要使用的技术是动态规划(Dynamic Programming)。流行的强化学习方法包括自适应动态规划(ADP)、时间差分(TD)学习、状态-动作-回报-状态-动作(SARSA)算法、Q 学习、深度强化学习(DQN);其应用包括下棋类游戏、机器人控制和工作调度等。

推荐文章
暂无评论
暂无评论~