Neural Architecture Search[Nas的入门笔记.1]

本文探讨了神经网络架构搜索(NAS)的基本原理,如何通过随机搜索在超参数空间中寻找最佳结构,如CNN中的卷积层、滤波器尺寸和步长。着重介绍了搜索空间的设定、随机搜索方法的应用以及NAS面临的挑战,包括高成本和搜索空间过大。

1、引言

引言
  在超参数中,Architecture指神经网络结构,比方说有多少个卷积层,每层有多少个卷积核,卷积核的大小等。Optimization Algorithm指优化算法,比方说算法类型(SGD等),batch大小,epoch数量,学习率等。
  我们的目标是在测试集上得到更高的测试精确度,以此来评价模型好坏。所以要更优的权重参数,而超参数决定能否得到更好的权重参数。
  以下来自我在youTube上总结的学习笔记,Neural Architecture Search: Basics & Random Search。除了最后一张在ppt截图了,其它两张都是自己画的,不要白嫖哦。

2、结构超参数 Architectural hyper-parameters

  以CNN的结构为例子
程 序 = { 卷 积 层 ( c o n v   l a y e r s ) 和 全 连 接 层 ( d e n s e   l a y e r s ) 的 数 量 卷 积 核 的 数 量 , 卷 积 核 的 大 小 和 每 一 个 卷 积 层 的 s t r i d e 大 小 全 连 接 层 的 宽 度 ( 输 出 向 量 的 大 小 ) 程序=\left\{ \begin{matrix} 卷积层(conv\ layers)和全连接层(dense\ layers)的数量 \\ 卷积核的数量,卷积核的大小和每一个卷积层的stride大小\\ 全连接层的宽度(输出向量的大小) \end{matrix} \right. =(conv layers)(dense layers)stride()

目前流行的CNN网络结构的超参数都是人工手动设计的

CNN卷积层结构

3、Neural Architecture Search(NAS)神经架构搜索

3.1 定义

  寻找最优的神经网络结构,使得validation 准确率最好。当然,除了准确率,还要考虑计算内存、计算量开销等指标。
  比方说,MobileNet计算内存开销比ResNet要小,但是准确率却低于ResNet。

3.2 Search Space 搜索空间

  搜索空间是用户事先指定的,如下表所示:
  我们想搭建一个10层的CNN网络。我们知道10-100的整数都是可行的卷积核的数量,但不可能全部都罗列进去搜索,否则搜索开销会非常非常大,所以要人工设定候选超参数。

Hyper-parameter TypesCandidates
the number of filters { 24 , 36 , 48 , 64 } \{24,36,48,64\} {24364864}
size of filters { 3 × 3 , 5 × 5 , 7 × 7 } \{3 \times 3,5 \times 5,7 \times 7\} {3×35×57×7}
stride { 1 , 2 } \{1,2\} {12}

  我们的目标搜索空间
{ 24 , 36 , 48 , 64 } 10 × { 3 × 3 , 5 × 5 , 7 × 7 } 10 × { 1 , 2 } 10 \{24,36,48,64\}^{10} \times \{3 \times 3,5 \times 5,7 \times 7\}^{10} \times \{1,2\}^{10} {24364864}10×{3×35×57×7}10×{12}10
  目标搜索空间大小:
是所有可能的神经网络架构的数量, ( 4 × 3 × 2 ) 10 (4\times3\times2)^{10} (4×3×2)10
  Nas的输出:

Layer 1Layer 2 … \dots Layer 10
the number of filters3648 … \dots 64
size of filters 5 × 5 5 \times 5 5×5 3 × 3 3 \times 3 3×3 … \dots 7 × 7 7 \times 7 7×7
stride21 … \dots 2

3.3 Baseline : Random Search

  Nas最简单的方法就是随机搜索,首先在搜索空间中均匀随机搜索出一组超参数,然后搭建神经网络。一直训练,学习参数,直到算法收敛。最后用训练好的模型做预测,用validation准确率来评价模型的好坏。重复这个过程,最终找到最好的validation准确率所对应的那一组超参数,作为定下来的神经网络结构。这种随机搜索的方法也称为交叉验证(Cross-validation)。
最终结果
  最终我们选择达到94%validation准确率的这组超参数来设计CNN的神经网络结构。
  交叉验证维基百科的定义
  交叉验证,有时亦称循环估计,是一种统计学上将数据样本切割成较小子集的实用方法。于是可以先在一个子集上做分析,而其它子集则用来做后续对此分析的确认及验证。一开始的子集被称为训练集。而其它的子集则被称为验证集或测试集。交叉验证的目的,是用未用来给模型作训练的新数据,测试模型的性能,以便减少诸如过拟合和选择偏差等问题。

3.4 Nas的挑战

  1. 每次测试/训练的成本/代价都很高
  2. 搜索空间太大
  3. 灾难性遗忘

PS:觉得不错的话,可以三连支持一下,有错误也请指出,谢谢!

### 图神经网络中的神经架构搜索 #### 神经架构搜索概述 神经架构搜索(Neural Architecture Search, NAS)旨在自动化设计最优的神经网络结构,从而减少人工干预并提高模型性能。NAS通过算法自动探索可能的网络配置空间来寻找最佳架构,在深度学习领域具有重要意义。 #### 原理与方法 在神经架构搜索过程中,通常采用强化学习、进化算法或基于梯度的方法来进行优化。这些技术能够有效地缩小庞大的假设空间,并找到适合特定任务的最佳架构。例如,利用强化学习框架下的控制器生成子网参数;或者借助遗传算法实现种群迭代更新以获得更优解集[^1]。 对于图神经网络而言,考虑到其特殊的输入形式——即非欧氏几何特性明显的图数据结构,专门针对此类问题定制化的NAS策略显得尤为重要。这涉及到如何定义合理的操作集合以及评估指标体系等问题。具体来说: - **操作集合**:为了适应图特有的拓扑特征,需要引入一系列适用于处理节点间连接关系的操作符,如消息传递机制等; - **评价标准**:除了常见的准确性外,还需考虑计算复杂性和内存占用等因素作为衡量依据之一。 #### 应用场景 神经架构搜索不仅限于传统图像识别等领域,在图神经网络的应用同样广泛而深入。特别是在涉及大规模社交网络分析、推荐系统构建等方面展现出巨大潜力。通过对不同类型的任务需求进行针对性的设计调整,可以显著提升最终解决方案的效果表现。 ```python import torch.nn as nn class CustomGNN(nn.Module): def __init__(self, input_dim, hidden_dim, output_dim): super(CustomGNN, self).__init__() # 定义自动生成的层结构 self.layers = nn.Sequential( GraphConvolution(input_dim, hidden_dim), # 自动选择的消息传递函数 nn.ReLU(), GraphPooling(hidden_dim, ratio=0.5), GraphConvolution(hidden_dim, output_dim) ) def forward(self, x, adj_matrix): return self.layers((x, adj_matrix)) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TerryBlog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值