免训练指标(Zero-Cost Proxies)

1. 什么是免训练指标(Zero-Cost Proxies,ZC proxies)?

免训练指标是一类 无需完整训练模型即可评估其性能的度量方法,主要用于提高 神经架构搜索(NAS) 的效率。
传统 NAS 需要训练候选架构来评估其性能,但训练消耗巨大,因此免训练指标提供了一种 基于模型本身特性(如梯度、参数分布)快速估计模型质量的方法

核心思想:
只用一个小批量数据 计算某些统计量(如梯度、参数重要性、激活值分布),从而 近似衡量模型的好坏,而不需要完整训练整个模型。


2. 免训练指标的类别

免训练指标可以大致分为两类:

  1. 传统结构分析指标(如 SNIP、Synflow、Fisher)
  2. 基于知识蒸馏的指标(如 DisWOT)

(1)传统结构分析指标

这些方法通常通过计算 梯度、权重、Hessian 矩阵 等信息来评估模型的质量。

① SNIP(Single-shot Network Pruning)
  • 计算梯度的重要性,衡量每个参数对损失函数的影响:
    ρ s n i p = ∣ ∂ L ∂ W ⊙ W ∣ \rho_{snip} = \left| \frac{\partial \mathcal{L}}{\partial \mathcal{W}} \odot \mathcal{W} \right| ρsnip= WLW
  • 核心思想:如果去掉某个权重后损失变化较大,则该权重很重要。因此,可以用梯度信息估算整个网络的质量。
② Synflow
  • 通过梯度流分析,避免层塌陷(layer collapse):
    ρ s y n f l o w = ∂ L ∂ W ⊙ W \rho_{synflow} = \frac{\partial \mathcal{L}}{\partial \mathcal{W}} \odot \mathcal{W} ρsynflow=WLW
  • 核心思想:确保不同层的梯度能够均匀流动,以保持架构的稳定性。
③ Fisher
  • 计算激活梯度的平方和,用于通道剪枝:
    ρ f i s h e r = ( ∂ L ∂ A A ) 2 \rho_{fisher} = \left( \frac{\partial \mathcal{L}}{\partial \mathcal{A}} \mathcal{A} \right)^2 ρfisher=(ALA)2
  • 核心思想:通道(Channel)如果对梯度变化敏感,则在训练时影响更大,可以用它来衡量模型质量。

(2)基于知识蒸馏的指标

DisWOT(Distillation Without Training)

  • 这是一种 基于知识蒸馏的免训练指标,通过计算 教师-学生模型的特征匹配误差 来评估网络质量:
    ρ D i s W O T = D L 2 ( G ( [ A S , A T ] ) ) + D L 2 ( G ( [ F S , F T ] ) ) \rho_{DisWOT} = \mathcal{D}_{L2} (\mathcal{G}([AS,AT])) + \mathcal{D}_{L2} (\mathcal{G}([FS,FT])) ρDisWOT=DL2(G([AS,AT]))+DL2(G([FS,FT]))

  • 其中:

    • ( AS, AT ) 是教师-学生模型的 激活图(Activation Maps)
    • ( FS, FT ) 是教师-学生模型的 特征图(Feature Maps)
    • ( \mathcal{D}_{L2} ) 计算的是 L2 距离(欧几里得距离),衡量特征匹配误差
  • 核心思想:如果一个模型可以很好地模仿教师模型的特征分布(即 L2 误差小),则这个模型的质量更好。


3. 免训练指标如何用于 NAS

在 NAS 中,免训练指标可以用于:

  1. 快速评估候选架构
    • 在搜索空间中 筛选掉性能较差的架构,减少训练计算量。
  2. 结合搜索算法优化架构
    • 可以将 梯度信息(SNIP, Synflow)知识蒸馏误差(DisWOT) 作为搜索目标,指导 NAS 选择更优的架构。
  3. 设计高效的蒸馏感知 NAS(DAS)
    • 结合 DAS(Distillation-aware Architecture Search),让 NAS 选择对知识蒸馏更友好的模型,提高轻量化模型的性能。
### 使用Scrapy-proxies中间件进行代理设置 在Scrapy项目中使用`scrapy-proxies`随机代理中间件可以通过特定配置使请求更加隐蔽并提高成功率。为了确保Scrapy能有效利用此中间件,需按照如下方式调整项目的`settings.py`文件。 #### 设置重试机制 当遇到网络问题或其他HTTP错误时,允许Scrapy自动尝试重新发送请求。这有助于在网络不稳定的情况下保持抓取过程的连续性[^3]: ```python RETRY_TIMES = 10 # 设定最大重试次数为10次 RETRY_HTTP_CODES = [500, 503, 504, 400, 403, 404, 408] # 指定哪些状态码触发重试 ``` #### 启用下载器中间件 定义各中间件的优先级顺序,其中`RandomProxy`位于较高位置以先于其他处理程序执行;而默认的`HttpProxyMiddleware`则紧随其后负责实际应用选定的代理服务器: ```python DOWNLOADER_MIDDLEWARES = { 'scrapy.downloadermiddlewares.retry.RetryMiddleware': 90, 'scrapy_proxies.RandomProxy': 100, 'scrapy.downloadermiddlewares.httpproxy.HttpProxyMiddleware': 110, } ``` #### 配置代理列表与模式 指定代理IP地址存储的位置以及工作模式。这里假设代理信息保存在一个文本文件内,并采用简单轮询的方式选取可用节点: ```python PROXY_LIST = '/path/to/proxy/list.txt' # 替换为真实的路径名 PROXY_MODE = 0 # 可选值有0(固定)、1(随机)或2(基于响应时间) ``` 以上即是在Scrapy框架下集成`scrapy-proxies`插件所需的全部步骤。通过上述配置,可以有效地管理多个代理服务提供商所提供的资源,从而增强Web爬虫系统的稳定性和效率。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值