篇章四 · 4.1
AttnRes · Block 分块
深度注意力太贵,关进块间
2.2 站讲了 AttnRes 把累加换成检索。但全做深度注意力,93 层每层都要存中间结果、检索算力随深度涨——成本吃不消。Block 分块是控成本的办法。
为什么要分块。 全 AttnRes 让当前层检索前面所有层,表达力强,但代价大:每一层都要把自己的中间结果存下来供后面检索,93 层就是 93 份中间结果要保存和传输;而且每层检索都要和前面所有层算一遍注意力,计算量随深度涨。全模型都这么做,存和算都吃不消。
Block 怎么压成本。 把 93 层切成 8 个 Block,每 12 层一块。块内部回到普通残差累加——不用存中间结果、不用检索,只有跨块时才做一次昂贵的深度注意力。这样需要保存的中间结果从 93 份降到 8 份(每块只需保存块的输出),检索次数也从 93 次降到 8 次。
为什么是 12 层一块。 块太小,跨块注意力太频繁,成本压不住;块太大,块内深层又回到信息糊在一起的老问题。12 层是个折中——块内 12 层普通残差成本可控,跨块只 8 次深度注意力,整体把昂贵的检索限制在块间。
块内 · 普通残差
12 层用最便宜的累加,一路平滑传递,不存中间结果也不检索。块内的信息融合靠普通的加法。
跨块 · 深度注意力
只有跨块时才做昂贵的检索,让块与块之间的信息流通。表达力留在跨块,成本用块内压住——8 次检索代替 93 次。