用于深度神经网络指数级压缩的自动可微非线性张量网络(ADNTNs)

arXiv cs.LG 论文

摘要

介绍了用于压缩深度神经网络层的自动可微非线性张量网络(ADNTNs),通过小型核心张量实现高压缩比同时保持准确性。

arXiv:2606.00130v1 Announce Type: new 摘要:我们研究了自动可微非线性张量网络(ADNTNs),这是一类结构化权重生成器,其紧凑的核心张量通过反向模式自动微分(AD)进行端到端训练。该方法可视为低秩适应和张量分解的自然扩展:ADNTN不是使用一个低秩矩阵更新,而是通过一个小核心的层次结构、非线性激活函数和可选的侧向混合张量来构建一个大型权重张量。本文重点研究三种架构:树张量网络(TTNs)、带边界解缠器的增强型TTN(aTTNs)以及多尺度纠缠重整化Ansätze(MERA)。 该公式支持非线性激活函数、任务感知目标、批处理和硬件感知的执行调度。同时,本文明确区分了\emph{微分}收缩程序和使收缩自由:AD并不能消除大中间体、不良收缩顺序或一般环状张量网络的精确收缩的成本。 在AlexNet和VGG-16层上的大量实验表明,在所研究的设置中,每层压缩比大约从$2000\times$到$77000\times$,准确率通常与密集基线相当,并且在几个VGG-16案例中有所提高。这些结果是令人鼓舞而非最终的:它们表明,如果优化、收缩调度和部署内核一起设计,ADNTNs是一条有前途的、数学结构化的、硬件感知的通往更小神经网络的途径。
查看原文
查看缓存全文

缓存时间: 2026/06/02 15:39

# 自动可微非线性张量网络(ADNTN)用于深度神经网络的指数级压缩  
来源:https://arxiv.org/html/2606.00130  

###### 摘要  
大型神经网络性能优异,往往正是因为它们包含比当前任务表面所需更多的参数。这种冗余可以使训练更容易,并提高表达能力,但也带来了实际问题:在部署时,相同的参数必须在严格的延迟和能耗预算下存储、在内存中移动并求值。本文探讨是否可以将选定的全连接层、卷积层和注意力层存储为更小的可微张量网络生成器的输出,而不是大型数字表格。我们研究*自动可微非线性张量网络*(ADNTNs)——一类结构化权重生成器,其紧凑核心张量通过反向模式自动微分(AD)进行端到端训练。该方法可视为低秩适应和张量因子分解的自然扩展:ADNTN 不是使用一个低秩矩阵更新,而是通过由小核心、非线性激活函数和可选的横向混合张量组成的层次结构构建大型权重张量。本文重点研究三种架构:树张量网络(TTN)、带边界解缠器的增强型 TTN(aTTN)以及多尺度纠缠重整化拟设(MERA)。我们的主要数学贡献是这些生成器的统一前向-伴随演算。对于每种架构,我们给出前向收缩、预激活伴随量以及核心张量的收缩环境梯度。这些公式透明地揭示了调用 `loss.backward()` 时自动微分系统所执行的计算。该公式支持非线性激活、任务感知目标、批处理以及硬件感知执行调度。同时,本文明确区分了对收缩程序进行*微分*与使收缩自由:自动微分并不能消除大型中间张量的成本、不良收缩顺序或一般带环张量网络的精确收缩代价。  

关键的建模思想很简单:神经网络所使用的层在其输入上可以是线性的,例如 `y = Ŵ_Θ x`,而生成 `Ŵ_Θ` 的生成器在其可训练的小核心上却是非线性的。这种非线性放宽了经典张量网络的固定多线性秩限制,允许生成的权重存在于更丰富的低维流形上。我们还标准化了各架构的符号和初始化,因为潜在张量、扩展核心和解缠器的方差会显著影响深度层次生成器中自动微分的稳定性。在 AlexNet 和 VGG-16 层上的初步模拟显示,在所研究的设置中,单层压缩比大约从 `2,000×` 到 `77,000×`,准确率通常与密集基线相当,并且在若干 VGG-16 情况下甚至有所提升。这些结果令人鼓舞但并非最终结论:它们表明,只要优化、收缩调度和部署内核是协同设计的,ADNTN 就是一条前景广阔、数学结构清晰且硬件感知的途径,用于实现更小的神经网络。  

## 1 引言  
现代最先进的深度神经网络和大语言模型通常包含数亿或数十亿个参数。它们在大型分布式硬件集群上训练,然后部署在延迟敏感的应用中,如图像分类、聚类、识别、医学筛查、交互式对话、搜索和移动辅助。这种规模对于表达能力、优化景观和涌现能力是有益的,但在推理时带来了实际障碍:大型模型需要高内存容量、大内存带宽、昂贵的加速器以及每次查询不可忽视的能耗。大量实证文献表明,许多经过训练的网络在功能上是冗余的:在中等压缩率下,参数通常可以被剪枝、量化、因子化、共享或蒸馏,而准确率损失有限 (Blalock et al., 2020; Ganesh et al., 2020)。张量分解提供了一种结构化利用这种冗余的方式,因为它们将密集张量替换为一个由较小因子组成的网络,其参数数量在张量模式数上呈线性(或近线性)缩放,而非指数增长 (Kolda and Bader, 2009; Cichocki et al., 2016; Oseledets, 2011)。近期关于自动可微张量网络用于神经网络压缩的工作进一步表明,深度张量网络生成器可以用极少的可训练自由度来表示大型神经权重 (Qing et al., 2025; Wang et al., 2023)。  

### 1.1 动机与压缩目标  
模型压缩是一个多目标设计问题,需要同时平衡多个竞争目标。  
- • **内存减少**:减少存储的参数数量和每参数的字节数。  
- • **延迟减少**:减少实际推理时间,而不仅仅是形式上的参数数量。  
- • **能耗与成本降低**:减少加速器内存流量、计算强度以及运行成本。  
- • **准确率保持**:维持原始模型在目标任务上的预测性能。  
- • **行为保真度**:保留教师(密集)模型的输出分布、校准、中间表示以及安全相关行为。  
- • **可部署性**:产生能够被现有库和硬件高效执行的结构。  

尽管所有这些目标都是理想的,但它们可能相互矛盾。非结构化稀疏性可能减少参数数量,但通常难以在密集硬件上加速推理。非常激进的量化可能降低内存带宽,但会损害稀有能力。特定领域的压缩可能提升某个专门基准的性能,同时削弱通用行为。因此,压缩最好理解为一个帕累托前沿:`(size, latency, energy, accuracy, fidelity)`,而不是一个单一的通用比率。  

### 1.2 经典压缩家族  
主要的经典压缩家族如下:  
- • **剪枝**:根据显著性标准移除单个权重、通道、头、神经元、滤波器或块 (Blalock et al., 2020)。  
- • **量化**:用更低精度格式(通常为 8-bit、4-bit 或混合精度)替换 32-bit 或 16-bit 浮点参数和激活值 (Dettmers et al., 2023; Frantar et al., 2023)。  
- • **知识蒸馏**:训练一个紧凑的学生模型,模仿更大(密集)预训练教师模型的对数几率、概率、隐藏状态、注意力图或行为 (Hinton et al., 2015; Ganesh et al., 2020)。  
- • **参数高效适应**:冻结预训练模型,学习一个小的结构化更新,如 LoRA 中 `ΔW = BA` 为低秩 (Hu et al., 2022)。  
- • **低秩与张量网络分解**:用 `W ≈ AB`(内维度很小)逼近权重矩阵,或将高阶张量逼近为张量列 / MPS、张量环、矩阵乘积算子、CP 分解、Tucker、树张量网络和 MERA 或相关分解 (Phan et al., 2020; Gusak et al., 2019; Qing et al., 2025; Gu et al., 2025; Javanmard et al., 2026; Wang et al., 2023)。  

LoRA 说明了从密集重新训练到结构化低维适应的概念过渡。张量网络压缩推广了这一思想:不是使用单一的秩 `r` 矩阵更新,而是将大型权重矩阵或卷积核表示为许多小核心张量的收缩。主要例子包括 TT/TR、MPO、CPD、Tucker、TTN 和 MERA (Cichocki et al., 2016, 2017; Oseledets, 2011; Kolda and Bader, 2009; Zhao et al., 2016; Vidal, 2007)。  

### 1.3 从 ADTN 到 ADNTN:关键定义  
###### 定义 1 (ADTN)。*自动可微张量网络*(ADTN)是一个实现为可微计算图的张量网络,其核心张量可以通过自动微分(AD)进行优化,并带有可选的 ReLU 非线性 (Liao et al., 2019; Liao and Liu, 2021; Qing et al., 2025)。  

###### 定义 2 (ADNTN)。*自动可微非线性张量网络*(ADNTN)是一种 ADTN,其中在张量收缩之间插入了非线性激活函数、归一化、门控或其他经过优化的可微、可学习的非线性操作。在经典张量网络中,所有收缩相对于核心都是多线性的。在 ADNTN 中,收缩仍然是可微的,但不再是多线性的,因为 ELU 或 GELU 等激活函数与收缩层交错排列 (Hendrycks and Gimpel, 2016; Clevert et al., 2015)。当使用小基数(`d=2`)核心来生成表达性神经权重时,这种修改至关重要,如第 4 节所述。  

### 1.4 主要贡献  
本文的主要贡献如下:  
1. 我们将 ADNTN 公式化为用于全连接层、卷积层和注意力层权重的层次化非线性张量网络生成器。  
2. 我们给出了三种详细研究架构(TTN、aTTN 和 MERA)的显式反向模式自动微分方程和训练算法。  
3. 我们阐明了为什么非线性生成即使是在生成的层被线性使用时也可能是有用的,同时避免过度声称固定小键生成器对所有密集矩阵都是通用的。  
4. 我们统一了生成张量、目标张量、伴随量、键维度、物理基数和层索引的符号,并引入了一种全局初始化约定,用于稳定的自动微分训练。  
5. 我们报告了在 AlexNet 和 VGG-16 层上的概念验证模拟,包括参数数量、压缩比以及相对于密集基线的验证准确率变化。  

### 1.5 论文组织  
第 2 节介绍 DNN 层的张量化。第 3 节描述本文使用的层次化非线性张量网络解码器。第 4 节解释为什么即使生成的 DNN 层在数据上是线性或多线性的,非线性生成器也可能是有益的。第 5 节讨论重建损失、任务感知损失、蒸馏损失、正则化损失和量化感知损失。第 6 节回顾自动微分与可微编程。第 7 节推导自动微分学习算法。第 8 节报告实现细节和概念验证模拟。第 9 节总结并展望未来方向。  

### 符号说明  
全文一致使用以下排版约定:  
- • **标量**:斜体,例如 `d`、`Q`、`L`、`N_ℓ`、`χ`、`η`、`λ`、`ε_opt`。  
- • **向量**:粗体小写,例如 `x`、`y`、`h`、`w`。  
- • **矩阵**:粗体大写,例如 `W`、`A`、`B`、`S`。  
- • **三阶及以上张量**:带下划线的粗体大写,例如 `W̄`、`K̄`、`V̄`、`Ū`、`C̄`。  
- • **生成量**:带帽子符号,例如 `W̄̂_Θ` 或 `Ŵ_Θ`;目标量带下标 “tar”,例如 `W̄_tar`。  
- • **伴随量**:用上划线表示:`X̄̄ := ∂L/∂X̄` 和 `v̄ := ∂L/∂v`。此约定同时用于手动公式和自动微分计算的梯度。  

主要符号汇总于表 1。  

**表 1:本文使用的符号。** 该表统一了张量化、前向收缩、伴随量、优化和实验部分中使用的符号。在代码中,索引可能从零开始;数学公式中我们使用 `[d] = {1, ..., d}`。  

## 2 张量化 DNN 层  
在 ADNTN 解码器替代经典层之前,层参数必须映射到一个具有明确定义索引约定的高维张量。设 `d ≥ 2` 为物理基数。对于有 `P` 个参数的向量,我们选择 `Q = ⌈log_d P⌉`,填充到长度 `d^Q`,然后将填充后的向量折叠成一个 Q 阶张量。整篇论文中 `[d] := {1, ..., d}`,尽管代码中可能使用从零开始的索引。  

### 2.1 大型线性(全连接)层  
标准线性层有一个权重矩阵 `W ∈ ℝ^{D_out × D_in}`。设 `P = D_out D_in`,令 `vec(W) ∈ ℝ^P` 表示固定的列主序或行主序向量化。张量化的目标为:  
```
W̄_tar = fold_{d,Q}( pad_{d^Q}( vec(W) ) ) ∈ ℝ^{d × ... × d} (Q 个模式)
```  
反向映射移除填充并将生成的张量重塑回 `Ŵ_Θ ∈ ℝ^{D_out × D_in}`。当输入和输出维度具有有意义的因子时,例如 `D_out ≤ ∏_{q=1}^s O_q` 且 `D_in ≤ ∏_{q=1}^s I_q`,通常更倾向于使用成对张量化:`W_{o,i} ⟷ W̄_{o1 i1, ..., os is}`,其中 `o ↔ (o1, ..., os)` 且 `i ↔ (i1, ..., is)`。

相似文章

DIVE:通过自限制梯度更新的嵌入压缩

arXiv cs.CL

提出DIVE,一种用于嵌入维度缩减的压缩适配器,采用自限制梯度更新和头部级NT-Xent对比损失,防止在小数据集上过拟合,在BEIR基准测试上优于现有方法。

eCNNTO:一种高度可泛化的卷积网络,用于加速拓扑优化

arXiv cs.AI

本文提出了eCNNTO,一种带有残差连接的卷积神经网络,通过从早期迭代历史中预测接近最优的密度来加速基于密度的拓扑优化,实现了最多97%的迭代次数减少,并在不同边界条件、几何形状和网格分辨率下展现出强大的泛化能力。

深度线性网络中的非线性计算

OpenAI Blog

# 深度线性网络中的非线性计算 来源:[https://openai.com/index/nonlinear-computation-in-deep-linear-networks/](https://openai.com/index/nonlinear-computation-in-deep-linear-networks/) `` ``` 1x = tf.placeholder(dtype=tf.float32, shape=[batch_size,784]) 2y = tf.placeholder(dtype=tf.float32, shape=[batch_size,10]) 34w1 = tf.Variable(np.random.normal(scale=np.sqrt(2./784),size=[784,512]).astype(np.float32)) 5b1 = tf.Variable(np.zeros(512,dtype=np.float32)) 6w2 = tf.Variable(np.random