ToCa
Paper:Accelerating Diffusion Transformers with Token-wise Feature Caching,ICLR 2025
论文解决的核心仍旧是 DiT 的加速。
论文核心
创新点1:Token 选择机制:四维指标联合打分
ToCa 为每个 Token 制定了一个综合评分函数
得分越高的 Token 意味着越重要、越敏感,拒绝缓存,必须进行真实计算 。这四个子分数(不带来任何额外计算开销 )分别为:
(对其他 Token 的影响力): 利用 Self-Attention Map 的列求和来评估。 如果一个 Token 在注意力机制中被其他所有 Token 频繁拉去“对齐”(权重高),说明它是画面的核心(如动物的眼睛),一旦缓存出错,全新画面都会崩,所以必须亲力亲为去计算 。
(文本控制力的保持): 利用 Cross-Attention Map 计算熵。 这个指标针对文本生成图像(T2I)。如果一个图像 Token 跟大量的文本提示词 Token 都有强关联(熵很大),说明它承载了丰富的语义控制信息,不应该被缓存,否则容易丢失文本里要求的细节(如漏掉“木制码头”) 。
(缓存频率惩罚) 如果一个 Token 连续好几层或好几个时间步都在复用缓存,它的误差会按指数级爆炸累积,导致局部画面崩溃 。因此,被连续缓存越多次(
越大),它的 分数越高,强制让它在这一步进行真正的重新计算 。 (空间均匀分布奖励): 如果某一小块区域(如
的像素邻域)内的所有 Token 全被缓存了,那这一块的画质就会集体塌陷 。ToCa 会找出局部区域内得分最高的那一个,并给它额外的分数加成,确保计算点在空间上是均匀散开的 。
创新点2:动态缓存比例
- 网络深度维度: 浅层算得多,深层缓存多 。因为浅层(靠近输入)引入的误差会被后续的所有网络层级联放大(误差传播更深),所以浅层要多做真实计算(降低缓存比例) 。
- 网络类型维度: 论文发现自注意力层对误差极其敏感,所以自注意力层不搞部分 Token 缓存,要么全算,要么全缓存(实践中为了提速,非强制刷新步时,直接全部跳过自注意力层,把计算负载倾斜给 MLP 层) 。
- 时间步维度: 前段算得少( contour 轮廓阶段),后段算得多( detail 细节阶段) 。将计算量从生成初期的粗糙阶段挪到后期的精雕细琢阶段 。
创新点3:异步缓存更新
- 对比传统:老方法一般只在采样周期开始的第一步录入缓存,后面几步只读取、不修改 。
- ToCa 的做法:在非强制刷新的缓存步(Cache
Steps)中,那些被选出来进行真实计算的
的重要 Token,计算完后会立刻写回并覆盖缓存对应的位置 。这种“边走边修补”的滚动更新机制,极大地掐断了误差在时间维度上的累积路径 。
一些问题
生成过程的 Step 分成了两步:
- Fresh Step(强制刷新步)
- Cache Step(缓存步):大部分 Token 直接复用缓存,但是允许一些 Token 更新。
ToCa 对 MLP,Self-Attention,Cross-Attention 的策略不同:
Self-Attention(自注意力层)—— 坚决不搞局部更新,直接 100% 缓存
论文中做过实验,Self-Attention 的特性是“牵一发而动全身”。哪怕你只挑出几个 Token 重新计算,由于 Attention 矩阵的全局交互性,这几个 Token 的误差或变化会瞬间传播给其他所有 Token 。
MLP(全连接层)—— 局部 Token 更新的“主战场”
Cross-Attention(交叉注意力层)—— 可以局部更新,但视情况而定
上游做出的 Token 局部更新,会沿着残差主干直达终点。