神经网络架构搜索——可微分搜索(SGAS)

简介: KAUST&Intel发表在CVPR 2020上的NAS工作,针对现有DARTS框架**在搜索阶段具有高验证集准确率的架构可能在评估阶段表现不好**的问题,提出了分解神经网络架构搜索过程为**一系列子问题**,SGAS使用**贪婪策略选择并剪枝候选操作**的技术,在搜索CNN和GCN网络架构均达到了SOTA。- Paper: SGAS: Sequential Greedy Architecture Search- Code: https://github.com/lightaime/sgas

动机

NAS技术都有一个通病:在搜索过程中验证精度较高,但是在实际测试精度却没有那么高。传统的基于梯度搜索的DARTS技术,是根据block构建更大的超网,由于搜索的过程中验证不充分,最终eval和test精度会出现鸿沟。从下图的Kendall系数来看,DARTS搜出的网络精度排名和实际训练完成的精度排名偏差还是比较大。

"Accuracy GAP"

方法

整体思路

本文使用与DARTS相同的搜索空间,SGAS搜索过程简单易懂,如下图所示。类似DARTS搜索过程为每条边指定参数α,超网训练时通过文中判定规则逐渐确定每条边的具体操作,搜索结束后即可得到最终模型。

SGAS架构示意图

算法伪代码

为了保证在贪心搜索的过程中能尽量保证搜索的全局最优性,进而引入了三个指标两个评估准则

三个指标

边的重要性

非零操作参数对应的softmax值求和,作为边的重要性衡量指标。

$$ S_{E I}^{(i, j)}=\sum_{o \in \mathcal{O}, o \neq z e r o} \frac{\exp \left(\alpha_{o}^{(i, j)}\right)}{\sum_{o^{\prime} \in \mathcal{O}} \exp \left(\alpha_{o^{\prime}}^{(i, j)}\right)} $$

alphas = []
for i in range(4):
    for n in range(2 + i):
        alphas.append(Variable(1e-3 * torch.randn(8)))
# alphas经过训练后
mat = F.softmax(torch.stack(alphas, dim=0), dim=-1).detach() # mat为14*8维度的二维列表,softmax归一化。 
EI = torch.sum(mat[:, 1:], dim=-1) # EI为14个数的一维列表,去掉none后的7个ops对应alpha值相加
选择的准确性

计算操作分布的标准化熵,熵越小确定性越高;熵越高确定性越小。

$$ \begin{array}{c} p_{o}^{(i, j)}=\frac{\exp \left(\alpha_{o}^{(i, j)}\right)}{S_{E I}^{(i, j)} \sum_{o^{\prime} \in \mathcal{O}} \exp \left(\alpha_{o^{\prime}}^{(i, j)}\right)}, o \in \mathcal{O}, o \neq z e r o \\ S_{S C}^{(i, j)}=1-\frac{-\sum_{o \in \mathcal{O}, o \neq z e r o} p_{o}^{(i, j)} \log \left(p_{o}^{(i, j)}\right)}{\log (|\mathcal{O}|-1)} \end{array} $$

import torch.distributions.categorical as cate
probs = mat[:, 1:] / EI[:, None]
entropy = cate.Categorical(probs=probs).entropy() / math.log(probs.size()[1])
SC = 1-entropy
选择的稳定性

将历史信息纳入操作分布评估,使用直方图交叉核计算平均选择稳定性。直方图交叉核的原理详见(https://blog.csdn.net/hong__fang/article/details/50550656)。

$$ S_{S S}^{(i, j)}=\frac{1}{K} \sum_{t=T-K}^{T-1} \sum_{o_{t} \in \mathcal{O}, o_{t} \neq z e r o} \min \left(p_{o_{t}}^{(i, j)}, p_{o_{T}}^{(i, j)}\right) $$

def histogram_intersection(a, b):
  c = np.minimum(a.cpu().numpy(),b.cpu().numpy())
  c = torch.from_numpy(c).cuda()
  sums = c.sum(dim=1)
  return sums

def histogram_average(history, probs):
  histogram_inter = torch.zeros(probs.shape[0], dtype=torch.float).cuda()
  if not history:
    return histogram_inter
  for hist in history:
    histogram_inter += utils.histogram_intersection(hist, probs)
  histogram_inter /= len(history)
  return histogram_inter

probs_history = []

probs_history.append(probs)
if (len(probs_history) > args.history_size):
  probs_history.pop(0)
  
histogram_inter = histogram_average(probs_history, probs)

SS = histogram_inter

两种评估准则

评估准则1:

选择具有高边缘重要性和高选择确定性的操作

$$ S_{1}^{(i, j)}=\text { normalize }\left(S_{E I}^{(i, j)}\right) * \text { normalize }\left(S_{S C}^{(i, j)}\right) $$

def normalize(v):
  min_v = torch.min(v)
  range_v = torch.max(v) - min_v
  if range_v > 0:
    normalized_v = (v - min_v) / range_v
  else:
    normalized_v = torch.zeros(v.size()).cuda()

  return normalized_v

score = utils.normalize(EI) * utils.normalize(SC)
评估准则2:

在评估准则1的基础上,加入考虑选择稳定性

$$ S_{2}^{(i, j)}=S_{1}^{(i, j)} * \text { normalize }\left(S_{S S}^{(i, j)}\right) $$

score = utils.normalize(EI) * utils.normalize(SC) * utils.normalize(SS)

实验结果

CIFAR-10(CNN)

CIFAR-10(CNN)

ImageNet(CNN)

ImageNet(CNN)

ModelNet40(GCN)

ModelNet40(GCN)

PPI(GCN)

PPI(GCN)

参考

[1] Li, Guohao et al. ,SGAS: Sequential Greedy Architecture Search

[2] https://zhuanlan.zhihu.com/p/134294068

[3] 直方图交叉核 https://blog.csdn.net/hong__fang/article/details/50550656


![更多内容关注微信公众号【AI异构】]

目录
相关文章
|
29天前
|
运维 监控 数据可视化
Python 网络请求架构——统一 SOCKS5 接入与配置管理
通过统一接入端点与标准化认证,集中管理配置、连接策略及监控,实现跨技术栈的一致性网络出口,提升系统稳定性、可维护性与可观测性。
|
2月前
|
算法 关系型数据库 文件存储
ProxylessNAS:直接在目标任务和硬件上进行神经架构搜索——论文解读
ProxylessNAS是一种直接在目标任务和硬件上进行神经架构搜索的方法,有效降低了传统NAS的计算成本。通过路径二值化和两路径采样策略,减少内存占用并提升搜索效率。相比代理任务方法,ProxylessNAS在ImageNet等大规模任务中展现出更优性能,兼顾准确率与延迟,支持针对不同硬件(如GPU、CPU、移动端)定制高效网络架构。
291 126
ProxylessNAS:直接在目标任务和硬件上进行神经架构搜索——论文解读
|
2月前
|
机器学习/深度学习 算法 物联网
μNAS:面向微控制器的约束神经架构搜索——论文解读
μNAS是一种专为微控制器设计的神经架构搜索方法,旨在解决物联网设备中资源受限的挑战。通过多目标优化框架,μNAS能够在有限的内存和计算能力下,自动搜索出高效的神经网络结构。该方法结合了老化进化算法与贝叶斯优化,并引入结构化剪枝技术,实现模型压缩。实验表明,μNAS在多个数据集上均取得了优异的精度与资源使用平衡,显著优于现有方法,为边缘计算设备的智能化提供了可行路径。
334 129
|
6月前
|
小程序 前端开发
2025商业版拓展校园圈子论坛网络的创新解决方案:校园跑腿小程序系统架构
校园跑腿小程序系统是一款创新解决方案,旨在满足校园配送需求并拓展校友网络。跑腿员可接单配送,用户能实时跟踪订单并评价服务。系统包含用户、客服、物流、跑腿员及订单模块,功能完善。此外,小程序增设信息咨询发布、校园社区建设和活动组织等功能,助力校友互动、经验分享及感情联络,构建紧密的校友网络。
255 1
2025商业版拓展校园圈子论坛网络的创新解决方案:校园跑腿小程序系统架构
|
6月前
|
人工智能 监控 安全
NTP网络子钟的技术架构与行业应用解析
在数字化与智能化时代,时间同步精度至关重要。西安同步电子科技有限公司专注时间频率领域,以“同步天下”品牌提供可靠解决方案。其明星产品SYN6109型NTP网络子钟基于网络时间协议,实现高精度时间同步,广泛应用于考场、医院、智慧场景等领域。公司坚持技术创新,产品通过权威认证,未来将结合5G、物联网等技术推动行业进步,引领精准时间管理新时代。
|
2月前
|
机器学习/深度学习 人工智能 资源调度
MicroNAS:面向MCU的零样本神经架构搜索——论文阅读
MicroNAS是一种专为微控制器单元(MCU)设计的零样本神经架构搜索(NAS)框架,无需训练即可通过理论驱动的性能指标评估网络架构。相比传统NAS方法,其搜索效率提升高达1104倍,同时兼顾精度与硬件效率,适用于边缘计算场景。该框架结合神经切线核(NTK)条件数、线性区域计数及硬件感知延迟模型,实现快速、高效的架构搜索,为资源受限设备上的AI部署提供了新思路。
191 2
MicroNAS:面向MCU的零样本神经架构搜索——论文阅读
|
3月前
|
机器学习/深度学习 算法 文件存储
神经架构搜索NAS详解:三种核心算法原理与Python实战代码
神经架构搜索(NAS)正被广泛应用于大模型及语言/视觉模型设计,如LangVision-LoRA-NAS、Jet-Nemotron等。本文回顾NAS核心技术,解析其自动化设计原理,探讨强化学习、进化算法与梯度方法的应用与差异,揭示NAS在大模型时代的潜力与挑战。
755 6
神经架构搜索NAS详解:三种核心算法原理与Python实战代码
|
2月前
|
机器学习/深度学习 人工智能 vr&ar
H4H:面向AR/VR应用的NPU-CIM异构系统混合卷积-Transformer架构搜索——论文阅读
H4H是一种面向AR/VR应用的混合卷积-Transformer架构,基于NPU-CIM异构系统,通过神经架构搜索实现高效模型设计。该架构结合卷积神经网络(CNN)的局部特征提取与视觉Transformer(ViT)的全局信息处理能力,提升模型性能与效率。通过两阶段增量训练策略,缓解混合模型训练中的梯度冲突问题,并利用异构计算资源优化推理延迟与能耗。实验表明,H4H在相同准确率下显著降低延迟和功耗,为AR/VR设备上的边缘AI推理提供了高效解决方案。
371 0
|
6月前
|
机器学习/深度学习 算法 测试技术
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析
本文探讨了基于图的重排序方法在信息检索领域的应用与前景。传统两阶段检索架构中,初始检索速度快但结果可能含噪声,重排序阶段通过强大语言模型提升精度,但仍面临复杂需求挑战
206 0
图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析
|
6月前
|
Cloud Native 区块链 数据中心
Arista CloudEOS 4.32.2F - 云网络基础架构即代码
Arista CloudEOS 4.32.2F - 云网络基础架构即代码
138 1

热门文章

最新文章