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往往会得到较为一致的架构结果。
总结
特性 | ENAS | DARTS |
---|---|---|
搜索方法 | 强化学习 | 微分优化 |
权重共享 | 权重完全共享 | 混合操作的权重分配 |
搜索效率 | 较高(通过共享权重减少计算开销) | 较高(通过梯度优化减少计算开销) |
计算开销 | 低(适合在较少资源的条件下进行NAS) | 中等(双层优化仍有一定计算开销) |
确定性 | 低(强化学习中的随机性影响结果稳定性) | 高(梯度下降的稳定性带来一致性结果) |
优势 | 计算资源需求少,搜索速度快 | 搜索结果稳定,不易受权重干扰影响 |
劣势 | 共享权重可能导致架构权重干扰 | 双层优化有一定复杂性,且对内存需求较高 |
总结来说,ENAS通过强化学习和权重共享大幅降低了NAS的计算需求,适合在资源有限的场景下快速进行架构搜索;而DARTS则通过连续松弛和梯度优化实现了稳定的架构搜索,更适合在对架构稳定性和性能要求较高的应用场景中使用。