自动化机器学习(AutoML)最近变得越来越火,是机器学习下个发展方向之一。其中的神经网络结构搜索(NAS)是其中重要的技术之一。人工设计网络需要丰富的经验和专业知识,神经网络有众多的超参数,导致其搜索空间巨大。NAS即是在此巨大的搜索空间里自动地找到最优的网络结构,实现深度学习的自动化。自2017年谷歌与MIT各自在ICLR上各自发表基于强化学习的NAS以来,已产出200多篇论文,仅2019年上半年就有100多篇论文。此系列文章将解读AutoDL领域的经典论文与方法,笔者也是刚接触这个领域,有理解错误的地方还请批评指正!
此系列的文章:
- AutoDL论文解读(一):基于强化学习的开创性工作
- AutoDL论文解读(二):基于遗传算法的典型方法
- AutoDL论文解读(三):基于块搜索的NAS
- AutoDL论文解读(四):权值共享的NAS
- AutoDL论文解读(五):可微分方法的NAS
- AutoDL论文解读(六):基于代理模型的NAS
- AutoDL论文解读(七):基于one-shot的NAS
此篇博文介绍CMU的《DARTS:Differentiable Architecture Search》。之前介绍的NAS方法搜索空间都是离散的,而可微分方法将搜索空间松弛化使其变成连续的,则可以使用梯度的方法来解决。
DARTS也是搜索卷积cell然后堆叠cell形成最终的网络。这里的cell是一个包含有向无环图,包含一个有 N N N个节点的有序序列。每个节点 x ( i ) x^{(i)} x(i)是一个隐含表示(比如特征图),每个有向的边 ( i , j ) (i,j) (i,j)是变换 x ( i ) x^{(i)} x(i)的操作 o ( i , j ) o^{(i,j)} o(i,j)。作者假设cell有两个输入加点和一个输出节点,cell的输入输出设置和《Learning Transferable Architectures for Scalable Image Recognition》里的一致。每个中间节点是它所有的前驱节点计算得到:
x ( i ) = ∑ j < i o ( i , j ) ( x ( j ) ) x^{(i)}=\sum_{jx(i)=j<i∑o(i,j)(x(j))
一个特殊的操作: z e r o zero zero,包括在可能的操作集合里,表示两个节点之间没有连接。学习cell结构的任务就转换成了学习边上的操作。
令 O \mathcal O O为可选操作的集合(比如卷积、最大池化、 z e r o zero zero),每个操作表示作用在 x ( i ) x^{(i)} x(i)上的函数 o ( ⋅ ) o(\cdot) o(⋅)。为了使搜索空间连续化,作者将特定操作的选择松弛化为在所有可能操作上的softmax:
o ˉ ( i , j ) ( x ) = ∑ o ∈ O exp ( α o ( i , j ) ) ∑ o ′ ∈ O exp ( α o ′ ( i , j ) ) o ( x ) \bar{o}^{(i, j)}(x)=\sum_{o \in \mathcal{O}} \frac{\exp \left(\alpha_{o}^{(i, j)}\right)}{\sum_{o^{\prime} \in \mathcal{O}} \exp \left(\alpha_{o^{\prime}}^{(i, j)}\right)} o(x) oˉ(i,j)(x)=o∈O∑∑o′∈Oexp(αo′(i,j))exp(αo(i,j))o(x)
一对节点 ( i , j ) (i,j) (i,j)之间的操作被一个 ∣ O ∣ |\mathcal O| ∣O∣维向量 α ( i , j ) \alpha^{(i,j)} α(i,j)参数化。松弛化之后,搜索任务就变成了学习一组连续的变量 α = { α ( i , j ) } {\alpha} = \{\alpha^{(i,j)} \} α={α(i,j)},如下图所示:
图(a)表示初始化的边,操作是未知的。图(b)通过在每条边放置混合的候选操作来松弛搜索空间,每个颜色的线表示不同的操作。图(c)是通过解决一个优化问题,联合训练候选操作的概率和网络的权重,不同的粗细表示了 α ( i , j ) \alpha^{(i,j)} α(i,j)的大小。图(d)是最终学习到的结构。
学习到了所有操作的可能性 o ˉ ( i , j ) \bar{o}^{(i, j)} oˉ(i,j)后,选择其中最优可能的操作,也就是 o ( i , j ) = a r g m a x o ∈ O α o ( i , j ) o^{(i,j)}={\rm argmax}_{o \in {\mathcal O}}\alpha_{o}^{(i,j)} o(i,j)=argmaxo∈Oαo(i,j)。接下来,我们都用 α \alpha α表示结构。
松弛化之后,我们的目标就是共同地学习结构 α \alpha α和权重 w w w,DARTS的目标是用梯度下降优化验证集损失。令 L t r a i n \mathcal L_{train} Ltrain和 L v a l \mathcal L_{val} Lval分别表示训练和验证损失,我们就是要找到一个最优的 α ∗ \alpha^{\ast} α∗最小化验证集损失 L v a l ( w ∗ , α ∗ ) \mathcal L_{val}(w^{\ast},\alpha^{\ast}) Lval(w∗,α∗),其中 w ∗ w^{\ast} w∗通过最小化训练集损失 L t r a i n ( w , α ∗ ) \mathcal L_{train}(w,\alpha^{\ast}) Ltrain(w,α∗)。这是一个双层优化问题(bilevel opyimization problem), α \alpha α是上层变量, w w w是下层变量:
min α L v a l ( w ∗ ( α ) , α ) s.t. w ∗ ( α ) = argmin w L train ( w , α ) (1) \begin{aligned} \begin{array}{cl}{\min _{\alpha}} & {\mathcal{L}_{v a l}\left(w^{*}(\alpha), \alpha\right)} \tag1\\ {\text { s.t. }} & {w^{*}(\alpha)=\operatorname{argmin}_{w} \mathcal{L}_{\text {train}}(w, \alpha)}\end{array} \end{aligned} minα s.t. Lval(w∗(α),α)w∗(α)=argminwLtrain(w,α)(1)
解决上面的双层优化问题是困难的,因为任何 α \alpha α的改变都会要求重新计算 w ∗ ( α ) w^{\ast}(\alpha) w∗(α)。因此作者提出了一种近似的迭代解法,用梯度下降在权重空间和结构空间中轮流地优化 w w w和 α \alpha α:
在第k步,给定当前结构 α k − 1 \alpha_{k-1} αk−1,我们通过在最小化 L t r a i n ( w k − 1 , α k − 1 ) {\mathcal L}_{train}(w_{k-1},\alpha_{k-1}) Ltrain(wk−1,αk−1)的方向上移动 w k − 1 w_{k-1} wk−1来获得 w k w_{k} wk。然后固定 w k w_{k} wk,用单步梯度下降最小化验证集损失,以此更新结构:
L v a l ( w k − ξ ∇ w L t r a i n ( w k , α k − 1 ) , α k − 1 ) (2) \mathcal{L}_{v a l}\left(w_{k}-\xi \nabla_{w} \mathcal{L}_{t r a i n}\left(w_{k}, \alpha_{k-1}\right), \alpha_{k-1}\right) \tag2 Lval(wk−ξ∇wLtrain(wk,αk−1),αk−1)(2)
其中 ξ \xi ξ是学习率。通过求用式(2)关于 α \alpha α的导数得到结构梯度(为了简介,省略了角标k):
∇ α L v a l ( w ′ , α ) − ξ ∇ α , w 2 L t r a i n ( w , α ) ∇ w ′ L v a l ( w ′ , α ) (3) \nabla_{\alpha} \mathcal{L}_{v a l}\left(w^{\prime}, \alpha\right)-\xi \nabla_{\alpha, w}^{2} \mathcal{L}_{t r a i n}(w, \alpha) \nabla_{w^{\prime}} \mathcal{L}_{v a l}\left(w^{\prime}, \alpha\right) \tag3 ∇αLval(w′,α)−ξ∇α,w2Ltrain(w,α)∇w′Lval(w′,α)(3)
其中 w ′ = w − ξ ∇ w L t r a i n ( w , α ) w^{\prime}=w-\xi \nabla_{w} \mathcal{L}_{t r a i n}(w, \alpha) w′=w−ξ∇wLtrain(w,α)。上式第二项包含了矩阵向量乘积,难以计算。不过使用有限差分近似可以大大降低复杂度,令 ϵ \epsilon ϵ是一个很小的数, w + = w + ϵ ∇ w ′ L v a l ( w ′ , α ) w^{+}=w+\epsilon \nabla_{w^{\prime}} \mathcal{L}_{v a l}\left(w^{\prime}, \alpha\right) w+=w+ϵ∇w′Lval(w′,α) , w − = w − ϵ ∇ w ′ L v a l ( w ′ , α ) w^{-}=w-\epsilon \nabla_{w^{\prime}} \mathcal{L}_{v a l}\left(w^{\prime}, \alpha\right) w−=w−ϵ∇w′Lval(w′,α),那么:
∇ α , w 2 L t r a i n ( w , α ) ∇ w ′ L v a l ( w ′ , α ) ≈ ∇ α L t r a i n ( w + , α ) − ∇ α L t r a i n ( w − , α ) 2 ϵ (4) \nabla_{\alpha, w}^{2} \mathcal{L}_{t r a i n}(w, \alpha) \nabla_{w^{\prime}} \mathcal{L}_{v a l}\left(w^{\prime}, \alpha\right) \approx \frac{\nabla_{\alpha} \mathcal{L}_{t r a i n}\left(w^{+}, \alpha\right)-\nabla_{\alpha} \mathcal{L}_{t r a i n}\left(w^{-}, \alpha\right)}{2 \epsilon} \tag4 ∇α,w2Ltrain(w,α)∇w′Lval(w′,α)≈2ϵ∇αLtrain(w+,α)−∇αLtrain(w−,α)(4)
当 ϵ = 0 \epsilon=0 ϵ=0时,式(3)的二阶导数消失,结构梯度仅由 ∇ α L v a l ( w , α ) \nabla_{\alpha} \mathcal{L}_{v a l}(w, \alpha) ∇αLval(w,α)提供,通过假设 α \alpha α和 w w w相互独立来启发式地最优化验证集损失。这会加速计算,但通过实验发现效果并不好。因此要选择一个合适的 ϵ \epsilon ϵ值。作者称 ϵ = 0 \epsilon=0 ϵ=0的情况为一阶近似, ϵ > 0 \epsilon>0 ϵ>0为二阶近似
[1] Liu, Hanxiao, Karen Simonyan, and Yiming Yang. “Darts: Differentiable architecture search.” arXiv preprint arXiv:1806.09055 (2018).
[2] 《深度理解AutoML和AutoDL》