当前位置: 首页 > article >正文

ENAS和DARTs的比较

ENAS(Efficient Neural Architecture Search)和DARTS(Differentiable Architecture Search)都是神经架构搜索(NAS)的有效方法,目标是自动化地找到高性能的神经网络结构。尽管它们都旨在解决NAS的计算成本问题,但它们的思路和技术实现有所不同。下面我们详细探讨它们的主要区别。


1. 搜索空间的定义方式

ENAS:ENAS通过共享参数的方式,将架构搜索过程简化成一个单一的训练过程。在ENAS中,所有子网络共享相同的参数,因此在搜索阶段不需要为每个候选网络重新训练。具体来说,ENAS将整个搜索空间表示为一个大型图结构,每条边代表一个操作(如卷积、池化等),每个路径表示一个子网络。ENAS通过控制器(通常是一个RNN)来选择图中的路径,从而定义一个特定的子网络架构。

DARTS:DARTS使用一种连续松弛的策略,将架构搜索转化为一个可微分的优化问题。DARTS通过“混合操作”的方式,让每一条边都包含所有候选操作,并对这些操作分配一个权重。通过对这些权重进行微分优化,DARTS逐步确定最优的架构参数。最终架构是通过选取每条边上最优的操作来确定的,因此DARTS无需像ENAS一样训练控制器,而是直接通过梯度优化找到最佳架构。

2. 搜索与优化方法

ENAS:ENAS使用强化学习来搜索架构。它包含两个部分:一个控制器网络和一个共享的权重网络。控制器通过强化学习来选择子网络的架构,并基于子网络的性能来更新控制器。这样可以保证控制器在搜索时不断改进生成的架构质量。同时,由于权重共享,ENAS无需为每个子网络重新训练权重,这显著加快了搜索过程。

DARTS:DARTS的优化方法基于梯度下降,属于一种微分架构搜索方法。它将架构参数和模型权重都作为优化变量,通过双层优化(bilevel optimization)来联合优化架构和模型权重。DARTS的梯度优化过程使其不需要强化学习,从而大幅度减少了计算时间,并且相较于ENAS具有更稳定的优化效果。

3. 参数共享方式

ENAS:在ENAS中,所有候选子网络共享同一个参数集,因此在每次采样子网络时,它们的参数均是从同一个大网络中继承的。这种权重共享方式可以大大减少计算资源,因为只需训练一个大的网络而不需要单独训练每个候选架构。然而,这种权重共享可能会引入“架构权重干扰”问题,不同的子网络可能会相互干扰,影响最终的性能。

DARTS:DARTS并没有采用ENAS的完全权重共享方式,而是通过一种“混合操作”的方式进行优化。DARTS在每个节点的边上同时应用所有候选操作,并通过权重来控制每个操作的影响。这种连续松弛的方法使得DARTS能够在整个搜索过程中保留更多的架构信息,并且不同的操作不会像ENAS那样因为权重共享产生干扰。

4. 搜索效率和计算开销

ENAS:ENAS通过强化学习和权重共享显著降低了计算开销,使得NAS的搜索效率大大提高。相比于传统的NAS方法,ENAS在单一GPU上就可以在较短时间内完成搜索。它在复杂度和性能之间做了一定的折衷,通过共享权重来节省资源,但也因此可能导致架构性能不如独立训练。

DARTS:DARTS通过梯度优化实现了高效的架构搜索,避免了强化学习的计算成本。DARTS将搜索空间连续化,使得架构搜索可以通过微分操作完成,从而在资源开销上比传统的NAS方法低很多。DARTS还避免了ENAS中可能出现的权重干扰问题,但其双层优化带来的计算复杂度依然较高,尤其是当搜索空间较大时。

5. 搜索结果的确定性

ENAS:ENAS的搜索过程是基于强化学习的,由于随机性因素的影响,最终的架构不一定是唯一确定的,每次运行ENAS可能会产生不同的结果。

DARTS:DARTS通过梯度下降直接优化架构参数,其结果通常更具确定性。因为DARTS的架构参数优化是基于梯度的,具有相对稳定的收敛效果,因此多次运行DARTS往往会得到较为一致的架构结果。


总结

特性ENASDARTS
搜索方法强化学习微分优化
权重共享权重完全共享混合操作的权重分配
搜索效率较高(通过共享权重减少计算开销)较高(通过梯度优化减少计算开销)
计算开销低(适合在较少资源的条件下进行NAS)中等(双层优化仍有一定计算开销)
确定性低(强化学习中的随机性影响结果稳定性)高(梯度下降的稳定性带来一致性结果)
优势计算资源需求少,搜索速度快搜索结果稳定,不易受权重干扰影响
劣势共享权重可能导致架构权重干扰双层优化有一定复杂性,且对内存需求较高

总结来说,ENAS通过强化学习和权重共享大幅降低了NAS的计算需求,适合在资源有限的场景下快速进行架构搜索;而DARTS则通过连续松弛和梯度优化实现了稳定的架构搜索,更适合在对架构稳定性和性能要求较高的应用场景中使用。


http://www.kler.cn/a/385927.html

相关文章:

  • 27-压力测试
  • Python酷库之旅-第三方库Pandas(218)
  • 嵌入式硬件电子电路设计(五)MOS管详解(NMOS、PMOS、三极管跟mos管的区别)
  • Python 中常用的格式符号
  • ETH挖矿显卡超频信息汇总
  • QT_CONFIG宏使用
  • 1、了解家庭网络历史
  • InfluxDB性能优化指南
  • 用 Collections.synchronizedSet 创建线程安全的 HashSet
  • 健尔康在A股上市:市值84亿元,陈国平、陈麒宇父女成大赢家
  • 机器学习之集成学习算法
  • Mac M1下运行端到端语音模型Mini-Omni
  • 虚拟化数据恢复—XenServer虚拟机中SQL Server数据库数据恢复案例
  • STM32 BootLoader 刷新项目 (九) 跳转指定地址-命令0x55
  • GEE 案例——利用哨兵-2 图像时间序列和谷歌地球引擎云计算自动绘制和监测香港海洋水质参数
  • 蓝桥杯 Python组-神奇闹钟(datetime库)
  • 深入了解 curl:使用和功能详解
  • Android OpenGL ES详解——纹理过滤GL_NEAREST和GL_LINEAR的区别
  • 数据分析-41-时间序列预测之机器学习方法XGBoost
  • Spark Plan 之 SQLMetric
  • 电影插曲《牧羊曲》
  • 推荐一款面向增材制造的高效设计平台:nTopology
  • 新闻稿件管理:SpringBoot框架实战指南
  • css中pointer-events:none属性对div里面元素的鼠标事件的影响
  • qt QSyntaxHighlighter详解
  • 如何解决传统能源企业后备人才不足、人才规划缺失问题