你想定制一套西装,传统做法是:裁缝先请一个“标准身材”的塑料模特,在模特身上反复试版、调肩线、改腰围,等样衣完美了,再照版型给你做一件。可问题恰恰出在这里——塑料模特的肩宽、臂长、胸围,都不是你的。它在模特身上笔挺服帖,套在你身上却勒得慌。ProxylessNAS 的思路,就是把那个塑料模特扔进仓库,直接拿着皮尺在你身上量、在你身上剪、在你身上缝。它不依赖任何“代理模型”来间接评估网络结构,而是把候选架构直接放到目标设备上训练、实测延迟,用真实反馈指导搜索。本篇就用这家“裁缝店”的故事,带你从裁缝的皮尺、骰子、试衣镜一路看到收银台,把 ProxylessNAS 的原理和落地讲清楚。

岗位关联

对 AI 从业者的价值:掌握 ProxylessNAS,意味着你不再靠“代理模型 + 事后部署”的旧流程赌运气,而是能面向手机、边缘设备等真实硬件直接产出高效网络结构,这是 AutoML 从论文走向工业落地的关键能力。

目录
  1. 可视化演示
  2. 代理模型痛点
  3. 路径级二值化
  4. 梯度估计方法
  5. 硬件感知延迟优化
  6. 搜索空间定制
  7. 交替优化流程
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

本节配有交互动效(进入视口后自动加载,约 3KB)。

ProxylessNAS超网络结构 超网络特点 超网络统一表示所有候选架构,一次训练完成搜索 路径级二值化机制 L = L_ce(y, ŷ) + λ · latency(arch, device) ProxylessNAS神经架构搜索可视化:超网络结构、路径二值化、梯度估计、硬件感知延迟优化。

代理模型痛点

裁缝店里原本有个塑料模特,师傅在模特上把版型改得无可挑剔,可你穿上身才发现腋下紧绷、裤腿吊脚。问题不在师傅手艺,而在“替身”和“真人”之间存在不可忽视的偏差。传统神经架构搜索(比如两阶段 NAS)也有同样毛病:它先用一个小数据集、小分辨率或轻量模型组成的“代理任务”把候选架构筛一遍,再用 FLOPs 或参数量这类间接指标打分,最后才到真实设备上重新训练。搜索阶段和部署阶段的环境不一致,导致“代理阶段排名靠前”的网络,到了真实设备上反而不一定好用。

ProxylessNAS 的核心主张正是“无代理”:搜索过程直接面向目标硬件、目标数据集和目标推理框架,每一步评估的对象就是将来真正要部署的那个模型。它把量体、剪裁、试穿放在同一个人身上完成,从根上消除了代理与真实之间的错位,也让搜索出的结构不再需要大幅度迁移调优。

所以,把塑料模特请出裁缝店,不是省事,而是为了避免“替身说好,真人说不”的灾难。ProxylessNAS 的第一个明智决定,就是让裁缝只对你一个人负责。

Δrank  =  ∣ Ranktarget(a)  −  Rankproxy(a) ∣{\displaystyle \Delta_{\text{rank}} \;=\; \left|\, \text{Rank}_{\text{target}}(a) \;-\; \text{Rank}_{\text{proxy}}(a)\,\right|}
这个公式刻画了“代理排名”与“真机排名”的偏差:偏差越大,说明代理模型越不可信。
  1. 真实设备排名把候选架构 $a$ 放到目标设备上实测,得到它在真实条件下的性能排名。
    Ranktarget(a){\displaystyle \text{Rank}_{\text{target}}(a)}
  2. 代理模型排名在代理任务上评估同一个架构,得到近似排名。
    Rankproxy(a){\displaystyle \text{Rank}_{\text{proxy}}(a)}
  3. 取绝对差两个排名差得越远,说明代理评估失真越严重,最终模型迁移到真机时风险也越大。
    ∣ Ranktarget(a)−Rankproxy(a) ∣{\displaystyle \left|\, \text{Rank}_{\text{target}}(a) - \text{Rank}_{\text{proxy}}(a)\,\right|}

路径级二值化

如果一件西装有两只袖子,裁缝却同时把左边荷叶袖、右边灯笼袖一起缝上去试穿,那就完全分不清哪只袖子好看,还会浪费双倍布料。传统的 DARTS 方法就有点像这样:每条边上所有候选算子同时保留,通过 softmax 加权混合,前向和反向都要遍历全部算子,显存开销随候选数量线性膨胀。ProxylessNAS 用路径级二值化解决这个问题:每个候选路径配一个 0/1 门控,前向传播时只激活一条路径,其余路径全部关闭。

具体来说,超网络中每条边都有一组架构参数 $\alpha_i$ 表示对各候选算子的偏好。搜索时按这些偏好随机采样一条路径,只有被采中的算子参与计算,因此单次迭代的显存和算力成本只相当于一个子网络,而不是整个超网络。这一招像极了裁缝试衣:一次只让顾客穿上一只袖子,看清效果再换另一只,布料的用量和判断的复杂度都大大降低。

每条路径像一只单独的袖子,每次只试一只,反馈清楚、成本可控。路径级二值化让搜索从“所有款式叠在一起”变成“逐一试穿、择优录取”,这正是 ProxylessNAS 能在真实硬件上高效搜索的基石。

pi  =  exp⁡(αi)∑j=1Kexp⁡(αj),Gi  ∼  Bernoulli(pi){\displaystyle p_i \;=\; \frac{\exp(\alpha_i)}{\sum_{j=1}^{K} \exp(\alpha_j)}, \qquad G_i \;\sim\; \text{Bernoulli}(p_i)}
$p_i$ 是第 $i$ 条候选路径被选中的概率,$G_i$ 是本次前向实际生效的二值化门控(0 或 1)。
  1. 偏好分数$\alpha_i$ 是裁缝手里记录“这款袖子好看程度”的原始评分,越大越被偏爱。
    αi{\displaystyle \alpha_i}
  2. softmax 归一化对所有候选的评分做指数归一化,变成一组和为 1 的概率,评分差距会被指数放大。
    pi=exp⁡(αi)∑j=1Kexp⁡(αj){\displaystyle p_i = \frac{\exp(\alpha_i)}{\sum_{j=1}^{K} \exp(\alpha_j)}}
  3. 伯努利采样按概率 $p_i$ 掷一次硬币,得到 0 或 1 的二值化掩码,决定本次只试穿哪一条路径。
    Gi∼Bernoulli(pi){\displaystyle G_i \sim \text{Bernoulli}(p_i)}

梯度估计方法

掷骰子本身是随机的,可裁缝想要的是“让骰子逐渐偏向好看的款式”。二值化门控 $G_i$ 是离散的 0/1,离散操作对架构参数 $\alpha$ 不可导,梯度无法直接穿过门控回传。ProxylessNAS 需要一套“可学习的骰子”:既要保持前向的离散采样,又要在反向传播时给出有用的梯度信号。

论文中讨论并对比了几种估计方法:Gumbel-Softmax 通过温度退火把离散采样变成可导的软采样;REINFORCE 使用策略梯度做无偏估计但方差较大;而最实用的做法是二进制连接——前向传播时使用二值化门控,反向传播时把门控近似为连续变量,让梯度“直通”过去。这个直通估计器就像裁缝不用等顾客把整件西装穿完,只看袖子试穿的效果就记下一笔“偏好修正”,既保持了前向的离散真实性,又让评分更新足够平稳。

骰子掷得多了,统计规律自然会浮现。梯度估计方法让裁缝店里的每一次“随机试穿”都能变成有方向的经验积累,而不是纯粹的碰运气。

∂L∂αi  ≈  EG∼pα[ L(G) ⋅ (Gi−pi) ]{\displaystyle \frac{\partial \mathcal{L}}{\partial \alpha_i} \;\approx\; \mathbb{E}_{G \sim p_\alpha}\left[\, \mathcal{L}(G)\,\cdot\, (G_i - p_i) \,\right]}
这是 REINFORCE 风格的对架构参数梯度估计:用“当前路径损失 × 概率打分函数”近似真实梯度,其中 $G_i - p_i$ 来自 softmax 的对数概率导数。
  1. 期望形式离散路径 $G$ 来自分布 $p_\alpha$,损失对 $\alpha$ 的梯度无法直接求,只能写成期望形式。
    EG∼pα[ L(G) ]{\displaystyle \mathbb{E}_{G \sim p_\alpha}\left[\, \mathcal{L}(G)\, \right]}
  2. 对数概率导数score function 把对分布的梯度转化为对 $\log p_\alpha(G)$ 求导,对 softmax 而言恰好等于 $G_i - p_i$。
    ∇αilog⁡pα(G)  =  Gi−pi{\displaystyle \nabla_{\alpha_i} \log p_\alpha(G) \;=\; G_i - p_i}
  3. 蒙特卡洛近似用一次采样近似期望,得到可反向传播的梯度估计:损失越大、越偏向当前路径,$\alpha_i$ 的修正量就越大。
    ∂L∂αi  ≈  L(G) ⋅ (Gi−pi){\displaystyle \frac{\partial \mathcal{L}}{\partial \alpha_i} \;\approx\; \mathcal{L}(G)\,\cdot\, (G_i - p_i)}

硬件感知延迟优化

西装好不好看,不能只看挂在那里的版型;同样,网络结构好不好,也不能只看 FLOPs 或参数量。ProxylessNAS 会在目标设备上实测候选路径的真实延迟,并把“延迟”本身写进损失函数。这就像裁缝让顾客穿上真西装后走几步、抬抬手臂、弯弯腰,用秒表记录动作是否顺畅,而不是对着图纸空想。

延迟项通常取对数形式,因为延迟值可能从几毫秒到几百毫秒跨两个数量级,直接相加会让大延迟样本主导梯度,取对数可以压缩长尾,让优化过程平稳。超参数 $\lambda$ 控制精度与速度的平衡:$\lambda$ 越大,搜索越偏向低延迟;$\lambda$ 越小,越偏向高精度。通过调节 $\lambda$,使用者可以在同一次搜索框架下得到一系列“帕累托最优”的架构,按业务需求灵活挑选。

真机实测、延迟入损失、超参调平衡——这三步让 ProxylessNAS 不只是“在目标设备上搜索”,而是“为目标设备量身优化”,真正做到了量体之后才下剪。

Ltotal  =  LCE  +  λ⋅log⁡(Latency){\displaystyle \mathcal{L}_{\text{total}} \;=\; \mathcal{L}_{\text{CE}} \;+\; \lambda \cdot \log(\text{Latency})}
总损失 = 分类损失 + 延迟惩罚项,延迟以对数形式参与梯度回传,让搜索过程真正“听见”硬件的脚步声。
  1. 分类损失衡量网络精度的交叉熵损失,是搜索的基础目标。
    LCE{\displaystyle \mathcal{L}_{\text{CE}}}
  2. 延迟对数项实测延迟取对数,把几十倍的延迟差距压缩到可控范围内。
    log⁡(Latency){\displaystyle \log(\text{Latency})}
  3. 平衡系数$\lambda$ 决定延迟惩罚的权重,相当于裁缝问顾客“你更在意贴身还是更在意活动方便”。
    λ⋅log⁡(Latency){\displaystyle \lambda \cdot \log(\text{Latency})}

搜索空间定制

一件定制西装的可选项很多:尖领还是方领、单排扣还是双排扣、羊毛面料还是棉麻混纺。搜索空间就是给裁缝开放的“款式菜单”。ProxylessNAS 的搜索空间通常由三部分构成:每层可选的算子集合(3x3 深度可分离卷积、5x5 深度可分离卷积、池化、跳跃连接等)、层间的拓扑连接方式、以及通道数等维度配置。

搜索空间必须根据目标设备裁剪:手机上跑模型,内存带宽有限,深度可分离卷积和轻量融合算子更受欢迎;服务器 GPU 上则可以考虑大卷积核和高通道数。ProxylessNAS 允许你像改菜单一样改搜索空间,把不合适的算子直接从候选里拿掉。这样一来,搜索算法不会浪费时间在“硬件跑不动的选项”上,也降低了搜索过程中的不确定性。

菜单定制得当,裁缝就不必为不存在的尺码浪费布料。搜索空间定制让 ProxylessNAS 能针对不同性能档位的设备给出不同的“菜单”,既尊重硬件差异,也控制搜索成本。

S  =  O1×O2×⋯×OL{\displaystyle \mathcal{S} \;=\; \mathcal{O}_1 \times \mathcal{O}_2 \times \cdots \times \mathcal{O}_L}
搜索空间 $\mathcal{S}$ 是每一层候选算子集合的笛卡尔积:层数越多、候选越多,组合数呈指数级增长。
  1. 单层候选集合第 $j$ 层的可选算子集合 $\mathcal{O}_j$,相当于菜单上某一栏的选项。
    Oj{\displaystyle \mathcal{O}_j}
  2. 逐层组合两层之间的候选两两相乘,形成更大一层的组合空间。
    O1×O2{\displaystyle \mathcal{O}_1 \times \mathcal{O}_2}
  3. 全局乘积连续乘到第 $L$ 层,得到全部网络结构的搜索空间;算子越多,空间越大,搜索难度也随之增加。
    ∏j=1LOj{\displaystyle \prod_{j=1}^{L} \mathcal{O}_j}

交替优化流程

裁缝和顾客的合作从来不是一锤子买卖:量体、试穿、修改、再试穿,反复迭代直到满意。ProxylessNAS 的优化过程也分两派交替进行:一派是“模型权重 $w$”,负责让网络在训练数据上把分类任务做好;另一派是“架构参数 $\alpha$”,负责决定哪条路径更值得保留。两者交替更新,就像裁缝一边缝线一边调整版型。

超网络作为一个共享权重的“大工作台”,其中每条路径都可以借用其他路径学到的参数,因此训练成本大幅降低。每次迭代先固定 $\alpha$,按采样的单一路径更新权重 $w$;再固定 $w$,用验证集上的性能和延迟反馈更新 $\alpha$。这种交替优化保证了搜索过程不需要从头训练每个候选网络,而是让所有候选在同一个工作台上公平竞争。

当交替优化收尾,裁缝会从工作台上抽出那件“综合表现最好”的西装——最优子网,再做一次最终试穿与微调。此时这件西装已经在你的身上量过、剪过、改过无数回,不再需要任何塑料模特。

min⁡αLval(w∗(α), α)s.t.w∗(α)  =  arg⁡min⁡wLtrain(w, α){\displaystyle \min_{\alpha} \mathcal{L}_{\text{val}}\big(w^*(\alpha),\, \alpha\big) \quad \text{s.t.} \quad w^*(\alpha) \;=\; \arg\min_{w} \mathcal{L}_{\text{train}}(w,\, \alpha)}
双层优化形式:内层在训练集上找到最优权重 $w^*$,外层再以验证损失为目标更新架构参数 $\alpha$,二者相互嵌套、交替推进。
  1. 内层最优权重给定当前架构偏好 $\alpha$,在训练集上把模型权重训练到损失最小,得到 $w^*(\alpha)$。
    w∗(α)=arg⁡min⁡wLtrain(w,α){\displaystyle w^*(\alpha) = \arg\min_{w} \mathcal{L}_{\text{train}}(w, \alpha)}
  2. 外层架构优化带着这组最优权重去验证集上评估,找到让验证损失最小的 $\alpha$。
    min⁡αLval(w∗(α),α){\displaystyle \min_{\alpha} \mathcal{L}_{\text{val}}\big(w^*(\alpha), \alpha\big)}
  3. 嵌套约束外层不能随意挑 $\alpha$,必须以内层训练充分为前提,两层一起优化才能避免“空有其表的版型”。
    s.t.w∗(α)  =  arg⁡min⁡wLtrain(w,α){\displaystyle \text{s.t.} \quad w^*(\alpha) \;=\; \arg\min_{w} \mathcal{L}_{\text{train}}(w, \alpha)}

AI 应用场景

手机端实时分类模型搜索

阶段:模型结构设计 / AutoML 架构搜索

解决的问题:传统做法先在 GPU 集群上用代理模型搜索,再移植到手机端,常常出现精度高但速度慢、算子不支持等问题。ProxylessNAS 直接在目标手机上实测每一段路径的延迟,把“手机跑得快不快”直接纳入损失函数,确保搜出的网络开箱即用。

具体案例:某图像识别团队要在中端 Android 手机上部署 100 类物体分类模型。他们用 ProxylessNAS 在骁龙芯片上直接搜索,候选算子只保留深度可分离卷积、池化和跳跃连接,延迟约束设为 30ms。最终搜索出的网络比手工调参的 MobileNetV3 在同样延迟下准确率高出 1.8 个百分点,且无需二次剪枝压缩。

边缘 NPU 专用模型定制

阶段:模型部署优化 / 硬件适配

解决的问题:NPU 对算子类型和通道对齐有严格约束,通用搜索空间搜出的网络迁移到 NPU 后可能触发低效算子。ProxylessNAS 允许把 NPU 算子库直接设为搜索空间,并在 NPU 上实测延迟,解决“通用模型上 NPU 水土不服”的痛点。

具体案例:一家智能安防公司为自研 NPU 搜索夜间人体检测模型。搜索空间只保留 NPU 加速效果好的 3x3 深度卷积和逐点卷积,配合延迟约束,最终模型在 NPU 上推理延迟从原来的 45ms 降到 21ms,精度仅损失 0.3%。

Python 演示

python46 行
import numpy as np class BinarizedPathDemo:    def __init__(self, num_paths=4):        self.num_paths = num_paths        self.alpha = np.zeros(num_paths)        self.latency_map = np.array([1.2, 2.3, 0.8, 0.5])     def forward_prob(self):        scores = np.exp(self.alpha)        return scores / scores.sum()     def sample_one(self, probs):        rnd = np.random.rand()        acc = 0.0        for i, p in enumerate(probs):            acc += p            if rnd <= acc:                return i        return self.num_paths - 1     def compute_loss(self, acc_loss, latency_ms, lam=0.1):        return acc_loss + lam * np.log(latency_ms + 1e-6)     def update_alpha(self, chosen, lr=0.1):        probs = self.forward_prob()        grad = np.zeros_like(self.alpha)        grad[chosen] = 1.0 - probs[chosen]        self.alpha -= lr * grad     def run_epochs(self, steps=12, lr=0.1):        history = []        for step in range(steps):            probs = self.forward_prob()            chosen = self.sample_one(probs)            latency_ms = self.latency_map[chosen]            loss = self.compute_loss(0.5, latency_ms)            self.update_alpha(chosen, lr)            history.append((step, chosen, loss, probs.copy()))        return history if __name__ == "__main__":    demo = BinarizedPathDemo()    history = demo.run_epochs()    for step, chosen, loss, probs in history:        print("step=%d chosen=%d loss=%.3f probs=%s" % (step, chosen, loss, np.round(probs, 3)))
目的:用最简形式模拟 ProxylessNAS 的路径级二值化训练——交替执行“按概率采样路径”和“更新架构参数 α”,并让延迟通过损失函数影响选择。
  1. self.alpha = np.zeros(num_paths)初始化架构参数,初始时所有候选路径被选概率相同。
  2. scores = np.exp(self.alpha)指数化让偏好分数非负,为 softmax 做准备。
  3. return scores / scores.sum()得到归一化概率,等价于公式中的 $p_i$。
  4. if rnd <= acc:用累积概率实现伯努利采样,每次只激活一条路径,对应二值化门控 $G$。
  5. self.compute_loss(0.5, latency_ms)把延迟以对数形式加入损失,延迟越高的路径对更新越不利。
  6. grad[chosen] = 1.0 - probs[chosen]模拟 softmax 的梯度方向:被选中的路径概率越大,梯度越小,促使 α 收敛。
  7. history.append((step, chosen, loss, probs.copy()))记录每轮实验,便于观察概率收敛过程。

常见误区

误区以为“Proxyless”意味着整个过程不用训练任何模型,直接把最终网络一步到位搜出来,所以搜索期间零成本、零预训练。

正解ProxylessNAS 仍然要训练一个共享权重的超网络,为所有候选路径提供可复用的权重参数。它去掉的是“代理任务/代理模型”这个中间评估环节,避免代理排序与真实排序不一致的问题。就像裁缝还是要有一个工作台和一批布料,只是不再请塑料模特替顾客试身。

为何常见:名字里的“Proxyless”太有误导性,让人以为整个流程完全没有中间产物。

误区看到前向只激活一条路径,就认为搜索结束后网络已经是二值化的窄网络,可以直接部署。

正解二值化只是为了在训练阶段节省显存和计算开销的训练技巧。搜索结束后,仍需根据 α 选出最优路径、剪除其他分支,再将剪好的子网重新训练或微调,才能作为最终部署模型。二值化是“试穿过程”,不是“出厂成品”。

为何常见:训练过程和部署过程看起来结构相似,容易让人忽略中间的“剪枝 + 重训”步骤。

误区把 FLOPs 当延迟的近似指标,认为搜索时只要最小化 FLOPs,手机或 NPU 上就一定跑得快。

正解延迟受内存带宽、缓存命中率、算子并行度、NPU 指令调度等多种因素影响。ProxylessNAS 之所以坚持实测目标设备延迟,正是因为 FLOPs 无法反映这些硬件行为。只盯着 FLOPs 就像只看布料多少,不看顾客穿上后是否活动自如。

为何常见:FLOPs 是论文里最常用的复杂度指标,大家习惯了用它衡量速度,忽略了真实硬件的复杂性。

误区把在 GPU 上设计的搜索空间原封不动搬到手机或 NPU 上,认为候选算子越丰富越好。

正解不同设备对算子种类、通道数、核大小甚至数据排布都有限制。ProxylessNAS 支持为每类目标硬件定制搜索空间,把硬件不友好的算子直接移除,既降低搜索成本,也避免搜出跑不动的结构。

为何常见:搜索空间设计看起来只是“列个算子清单”,容易被低估其对最终结果的决定性影响。

面试题

Q1. ProxylessNAS 的 “Proxyless” 最核心的意思是什么?

单选题 · easy

  • A.搜索时不需要任何预训练权重
  • B.搜索时不依赖代理模型完成推荐← 正确答案
  • C.搜索时完全不使用梯度下降
  • D.搜索时只用一个算子做候选

答案:B。ProxylessNAS 仍然会训练共享权重的超网络,但不依赖“代理模型”做间接评估,而是直接在目标设备上搜索,故选 B。A 曲解了“无代理”的含义;C 与事实相反;D 是干扰项,搜索空间中候选算子仍然丰富。

Q2. 路径级二值化中,用于选择算子的二值化掩码取值是什么?

单选题 · easy

  • A.恒为 1 的常数值
  • B.0 到 2 的随机数
  • C.0 或 1 的离散值← 正确答案
  • D.大小可变的浮点数

答案:C。二值化掩码只有两个状态:0 表示该路径本次不激活,1 表示激活,对应伯努利采样 $G_i \sim \text{Bernoulli}(p_i)$。A 没有选择能力,B、D 是连续值,均不符合二值化定义。

Q3. 与两阶段代理搜索相比,ProxylessNAS 的最大优势是什么?

单选题 · easy

  • A.完全不需要训练数据
  • B.搜索次数一定大幅减少
  • C.搜索结果直接契合目标硬件← 正确答案
  • D.验证集一定不需要划分

答案:C。ProxylessNAS 直接在目标设备上训练并实测延迟,消除代理模型与真实部署环境的偏差,因此搜出的结构更契合真实硬件,选 C。A、D 不符合事实;B 中“一定大幅减少”不是必然结论。

Q4. 架构参数 α 经过 softmax 归一化后得到的是什么?

单选题 · mid

  • A.训练集的随机噪声
  • B.各候选算子的选择概率← 正确答案
  • C.网络每层的特征输出
  • D.最终模型的损失值

答案:B。α 是各候选算子的偏好分数,softmax 把它变成一组和为 1 的概率,随后用于伯努利采样。这就像裁缝对每种袖子款式的“心动程度”归一化成选择概率,因此选 B。

Q5. REINFORCE 方法估计架构参数梯度的特点是什么?

单选题 · mid

  • A.无偏但方差较大← 正确答案
  • B.有偏且方差较小
  • C.无偏且方差为零
  • D.有偏且方差为零

答案:A。REINFORCE 是策略梯度的经典方法,理论上无偏,但单次采样的随机性导致梯度方差很大。ProxylessNAS 因此也讨论更稳定的二进制连接直通估计器来降低方差,故选 A。

Q6. 延迟损失项采用 log(Latency) 而不用 Latency,主要原因是什么?

单选题 · mid

  • A.避免延迟出现负数
  • B.让损失值一定大于零
  • C.使延迟的数值变得更大
  • D.压缩长尾延迟并稳定梯度← 正确答案

答案:D。延迟可能从几毫秒到几百毫秒,跨度巨大。取对数能压缩长尾、平滑梯度尺度,同时仍保留“延迟越小越好”的优化方向,故选 D。A、B、C 都是对 log 作用的常见误读。

Q7. 在交替优化的双层形式中,内层优化通常在哪个集合上更新模型权重?

单选题 · hard

  • A.目标设备实测延迟
  • B.训练集上的分类损失← 正确答案
  • C.验证集上的架构损失
  • D.测试集上的全部指标

答案:B。内层优化固定架构参数,在训练集上最小化分类损失得到 $w^*(\alpha)$;外层才在验证集上更新 α 并考虑延迟等约束,因此选 B。

Q8. 二进制连接在前向使用二值化门控,反向传播时如何处理不可导的取整操作?

单选题 · extreme

  • A.用直通估计器近似其梯度← 正确答案
  • B.直接把取整结果当作常数求导
  • C.完全跳过一次反向传播
  • D.用遗传算法代替反向传播

答案:A。直通估计器(BinaryConnect / STE)在前向保留 0/1 的离散性,反向传播时把门控近似为连续值,让梯度直接穿过,实现对 α 的稳定更新。B 把梯度直接丢弃,C 断开了学习,D 则完全偏离了梯度优化框架。

Q9. 下列哪些属于 ProxylessNAS 讨论或对比过的梯度估计方法?

多选题 · mid

  • A.Gumbel-Softmax 软采样← 正确答案
  • B.REINFORCE 策略梯度← 正确答案
  • C.随机梯度下降
  • D.遗传算法种群交叉

答案:AB。ProxylessNAS 论文对比了 Gumbel-Softmax、REINFORCE 和二进制连接等方法。SGD 只是通用优化器而非针对离散路径的梯度估计方法;遗传算法属于进化搜索,不是该文用于路径二值化梯度估计的候选。

Q10. 关于搜索空间和硬件感知策略,下列说法正确的有哪些?

多选题 · hard

  • A.搜索空间包含卷积核大小的选择← 正确答案
  • B.延迟约束只影响最终剪枝阶段
  • C.实测延迟可作为损失项参与训练← 正确答案
  • D.搜索空间必须适配目标硬件特性← 正确答案

答案:ACD。搜索空间由每层的算子集合(如卷积核大小)、拓扑和通道等构成,且需根据目标硬件裁剪,故 A、D 正确。延迟从搜索训练阶段就进入损失函数而非只影响剪枝,故 C 正确、B 错误。这就像裁缝从量体开始就记录顾客的活动习惯,而不是等到做成成衣才改。