DARTS:Differentiable Architecture Search 可微分架构搜索(二)
加油加油!如果你感觉你现在很累,那么恭喜你,你现在正在走上坡路!让我们一起加油!
欢迎关注我的讲解视频,让我们一起学习:
Bilibili主页: https://space.bilibili.com/481802918
DARTS:Differentiable Architecture Search(二)
Differentiable Architecture Search
2.2 持续放松和优化
让 O \mathcal{O} O为一组候选运算(例如:卷积,最大池化或者零操作),其中每个运算代表要应用于x(i)的某个函数o。为了使搜索空间连续,我们将特定操作的分类选择放宽到所有可能操作的softmax:
o
ˉ
(
i
,
j
)
(
x
)
=
∑
o
∈
O
exp
(
α
o
(
i
,
j
)
)
∑
o
′
∈
O
exp
(
α
o
′
(
i
,
j
)
)
o
(
x
)
(2)
\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)\tag 2
oˉ(i,j)(x)=o∈O∑∑o′∈Oexp(αo′(i,j))exp(αo(i,j))o(x)(2)
其中一对节点 (i,j) 的运算混合权重由维度为 |
O
\mathcal{O}
O| 的向量 α(i,j) 参数化。然后架构搜索的任务就简化为学习一组连续变量α={α(i,j)},如图1所示。在搜索结束时,可以通过用最可能(likely)的操作替换每个混合操作
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)}=argmax_{o\in\mathcal{O}}α_o^{(i,j)}
o(i,j)=argmaxo∈Oαo(i,j)。在下文中,我们将α称为编码架构。
放松(搜索空间)之后,我们的目标是共同学习所有混合操作中的体系结构α和权重w(例如卷积滤波器的权重)。类似于使用强化学习或演算(evolution)的架构搜索,它们将验证集性能作为奖励或适用性的指标,DARTS旨在通过使用梯度下降来优化验证损失。
声明 L t r a i n \mathcal{L}_{train} Ltrain和 L v a l \mathcal{L}_{val} Lval来分别表示训练损失和验证损失。这两种损失不仅由架构α决定,而且由网络中的权重w决定。架构搜索的目标就是找到使验证损失 L v a l ( w ∗ , α ∗ ) \mathcal{L}_{val}(w*,\alpha^*) Lval(w∗,α∗)最小的 α ∗ \alpha^* α∗,其中与架构相关的权重w*通过最小化训练损失获得 w ∗ = a r g m i n w L t r a i n ( w , α ∗ ) w^*=argmin_w\mathcal{L}_{train}(w,\alpha^*) w∗=argminwLtrain(w,α∗)。
这暗示了一个双层优化问题,其中α为上层变量,w为下层变量:
min
α
L
v
a
l
(
w
∗
(
α
)
,
α
)
(3)
\min_\alpha \quad \mathcal{L}_{val}(w^*(\alpha),\alpha) \tag 3
αminLval(w∗(α),α)(3)
s
.
t
.
w
∗
(
α
)
=
a
r
g
m
i
n
w
L
t
r
a
i
n
(
w
,
α
)
(4)
s.t. \quad w^*(\alpha)=argmin_w\mathcal{L}_{train}(w,\alpha) \tag 4
s.t.w∗(α)=argminwLtrain(w,α)(4)
嵌套公式也出现在基于梯度的超参数优化中,这在某种意义上是相关的,即体系结构α可以看作是一种特殊类型的超参数,尽管它的维数大大高于标量值的超参数,例如学习率,并且(嵌套公式)很难优化。
注
:
∇
求
梯
度
注:\nabla 求梯度
注:∇求梯度
2.3 近似架构梯度
由于昂贵的内部优化,准确评估架构梯度可能会令人望而却步。因此,我们提出了一种简单的近似方案,如下所示:
∇
α
L
v
a
l
(
w
∗
(
α
)
,
α
)
≈
∇
α
L
v
a
l
(
w
−
ξ
∇
w
L
t
r
a
i
n
(
w
,
α
)
,
α
)
(6)
\nabla_\alpha\mathcal{L}_{val}(w^*(\alpha),\alpha) \tag 6 \\ \approx \nabla_\alpha \mathcal{L}_{val}(w- \xi\nabla_w \mathcal{L}_{train}(w,\alpha),\alpha)
∇αLval(w∗(α),α)≈∇αLval(w−ξ∇wLtrain(w,α),α)(6)
其中w表示算法保持的当前权重,ξ是内部优化步骤的学习率。这个想法是通过仅使用一个训练步骤就对w进行自适应来近似
w
∗
(
α
)
w^*(\alpha)
w∗(α),而不是通过训练直到收敛来完全解决内部优化问题(等式4)。 相关技术已经用于元学习中模型迁移,基于梯度的超参数调整和展开式的生成对抗网络GAN。注意,如果w对于内部优化来说是局部最优的,则方程6将简化为
∇
α
L
v
a
l
(
w
,
α
)
\nabla_\alpha\mathcal{L}_{val}(w,\alpha)
∇αLval(w,α),因此
∇
α
L
t
r
a
i
n
(
w
,
α
)
=
0
\nabla_\alpha\mathcal{L}_{train}(w,\alpha)=0
∇αLtrain(w,α)=0。
算法1中概述了这种迭代过程。虽然我们目前尚不了解优化算法的收敛性保证,但实际上,通过选择合适的
ξ
1
\xi^1
ξ1可以达到固定点。我们还注意到,当为权重优化启用动量(momentum)时,方程式6中的一步式展开学习目标会相应修改,我们所有的分析仍然适用。将链式规则应用于近似架构梯度(方程式6)可得出:
∇
α
L
v
a
l
(
w
′
,
α
)
−
ξ
∇
α
,
w
2
L
t
r
a
i
n
(
w
,
α
)
∇
w
′
L
v
a
l
(
w
′
,
α
)
(7)
\nabla_\alpha\mathcal{L}_{val}(w',\alpha)-\xi\nabla^2_{\alpha,w}\mathcal{L}_{train}(w,\alpha)\nabla_{w'}\mathcal{L}_{val}(w',\alpha) \tag 7
∇αLval(w′,α)−ξ∇α,w2Ltrain(w,α)∇w′Lval(w′,α)(7)
其中
w
′
=
w
−
ξ
∇
w
L
t
r
a
i
n
(
w
,
α
)
w'=w-\xi\nabla_w\mathcal{L}_{train}(w,\alpha)
w′=w−ξ∇wLtrain(w,α)表示单步前进模型的权重。上面的表达式在第二项中包含昂贵的矩阵向量乘积。幸运的是,使用有限差分近似( finite difference approximation)可以大大降低复杂度。使用
ϵ
\epsilon
ϵ为小标量2,并且有
w
±
=
w
±
ϵ
∇
w
′
L
v
a
l
(
w
′
,
α
)
w^{\pm}=w\pm\epsilon\nabla_{w'}\mathcal{L}_{val}(w',\alpha)
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
ϵ
(8)
\nabla^2_{\alpha,w}\mathcal{L}_{train}(w,\alpha)\nabla_{w'}\mathcal(L)_{val}(w',\alpha)\approx \frac{\nabla_{\alpha}\mathcal{L}_{train}(w^+,\alpha)-\nabla_\alpha\mathcal{L}_{train}(w^-,\alpha)}{2\epsilon} \tag8
∇α,w2Ltrain(w,α)∇w′(L)val(w′,α)≈2ϵ∇αLtrain(w+,α)−∇αLtrain(w−,α)(8)
计算有限差分仅需要权重两次前向传播,而α则需要两次后向传播,并且复杂度从O(|α|| w |)降低为O(|α| + | w |)。
一阶近似: 当ξ= 0时,等式7中的二阶导数将消失。在这种情况下,架构梯由 ∇ α L v a l ( w , α ) \nabla_\alpha\mathcal{L}_{val}(w,\alpha) ∇αLval(w,α)给出,对应于通过假设当前 w w w与 w ∗ ( α ) w^*(\alpha) w∗(α)相同来优化验证损失的简单启发式算法。根据我们在表1和表2中的实验结果,这会导致一些速度提升,但从经验上讲会降低性能。在下文中,我们将ξ= 0的情况称为一阶近似,而将ξ> 0的梯度公式称为二阶近似。
2.4 推导离散架构
为了形成离散体系结构中的每个节点,我们保留从所有先前节点收集的所有非零候选操作中排在前k位的最强操作(来自不同的节点)。一项操作的强度定义为 e x p ( α o ( i , j ) ) ∑ o ′ ∈ O e x p ( α o ′ ( i , j ) ) \frac{exp(\alpha_o^{(i,j)})}{\sum_{o'\in\mathcal{O}}exp(\alpha_{o'}^{(i,j)})} ∑o′∈Oexp(αo′(i,j))exp(αo(i,j)).为了使我们的派生架构与现有工作具有可比性,我们对卷积单元使用k = 2,对递归单元使用k = 1。
以上操作将零运算排除在外出于两个原因。首先,我们需要每个节点正好有k个非零输入边,以便与现有模型进行公平比较。其次,归零操作的强度是不确定的,因为增加归零操作的对数仅会影响所得节点表示的规模,并且由于存在批次归一化而不会影响最终分类结果。
3 实验与结果
我会以视频的形式与大家分享讲解:)
Bilibili主页: https://space.bilibili.com/481802918