Back to writing

/ Notes

Notes: MLA, Linear Attention, and Long-Context Memory

A systems-oriented comparison of GQA, MLA, Linear Attention, and Sparse Attention, and why hybrid memory architectures are emerging as the practical direction.

8 minLLM · Attention · MLA · Linear Attention

长上下文模型当前最重要的矛盾之一,是传统 Softmax Attention 的 KV Cache 和 Attention 计算如何继续降下来。

讨论这个问题时,人们经常把 MLA 和 Linear Attention 当成两条完全对称的技术路线。这个分类并不准确:MLA 主要解决“每个历史 token 要缓存多少 KV”,Linear Attention 则进一步追问“是否还要为每个历史 token 保存独立状态,并在 decode 时逐个读取”。

如果把观察范围放宽,主流路线至少可以分成四类:

路线代表方法主要压缩对象历史是否逐 token 保存
KV Head 共享MQA、GQAKV Head 数量
KV 低秩压缩MLA每个 token 的 KV 维度
线性或递归 AttentionLightning Attention、Gated DeltaNet、KDA整段历史的表示通常否
稀疏或局部 AttentionSWA、NSA、DSA、Block Sparse实际访问的历史 token 数量通常仍保存

更值得关注的是,越来越多有竞争力的模型没有选择“纯 MLA”或“纯 Linear”,而是在走一条混合路线:

Linear/Recurrent+MLA/GQA Full Attention+Sparse Selection\text{Linear/Recurrent} + \text{MLA/GQA Full Attention} + \text{Sparse Selection}

这篇文章不只比较算法复杂度,也试着从模型能力、记忆形态和 serving 系统三个角度,解释这些路线到底在交换什么。

1. 传统 Attention 的瓶颈#

普通 Softmax Attention 在 decode 阶段计算:

ot=Softmax(qtK1:tT)V1:to_t = \operatorname{Softmax}\left(q_tK_{1:t}^{T}\right)V_{1:t}

为了生成第 tt 个 token,系统必须保存此前所有 token 的 key 和 value:

K1,V1,K2,V2,,Kt1,Vt1K_1,V_1,K_2,V_2,\ldots,K_{t-1},V_{t-1}

因此:

  • KV Cache 随上下文长度 LL 线性增长;
  • 每生成一个 token,都要读取长度为 LL 的 KV;
  • 单步 decode 的 Attention 复杂度是 O(L)O(L)
  • 生成整段长度为 LL 的序列,Attention 累计计算接近 O(L2)O(L^2)

在大 batch、长上下文 decode 中,真正限制性能的往往不是计算单元,而是从 HBM 反复读取 KV Cache 的内存带宽。MQA、GQA、MLA 和 Linear Attention 都在解决这个问题,但它们动的是不同层次。

2. MLA:保留完整 Attention,压缩每个 token#

2.1 联合压缩 Key 和 Value#

Multi-head Latent Attention(MLA)不直接缓存完整的 KtK_tVtV_t,而是先将它们联合压缩成一个 latent:

ctKV=WDKVhtc_t^{KV} = W^{DKV}h_t

需要使用时,再通过不同的升维矩阵恢复 key 和 value 表示:

kt=WUKctKV,vt=WUVctKVk_t = W^{UK}c_t^{KV}, \qquad v_t = W^{UV}c_t^{KV}

于是缓存对象从 [Kt,Vt][K_t,V_t] 变成了 ctKVc_t^{KV}。DeepSeek-V2 还将位置相关的 RoPE 部分单独拆出,实际缓存:

[ctKV,ktR][c_t^{KV}, k_t^R]

这样既能压缩 KV,又能保留 RoPE 的位置表达。DeepSeek-V2 报告称,其 MLA 配置的 KV Cache 大致相当于仅有 2.25 个 KV Group 的 GQA;与 DeepSeek 67B 使用的 MHA 相比,KV Cache 减少了 93.3%。[1]

2.2 MLA 没有改变 Attention 的本质#

MLA 仍然保留如下关系:

qt{k1,k2,,kt}q_t \longleftrightarrow \{k_1,k_2,\ldots,k_t\}

每个历史 token 依然拥有可以独立访问的表示。因此 MLA 的本质是:

显式、逐 token、可寻址的压缩记忆。

它把每个 token 的记忆从较大的 (K,V)(K,V) 向量压缩成较小的 latent,却没有取消逐 token 记忆:

  • KV Cache 仍然是 O(L)O(L)
  • dense decode 仍然需要扫描历史 token;
  • dense prefill 仍然是 O(L2)O(L^2)
  • 但每个 token 需要存储和读取的数据显著减少。

这使 MLA 尤其适合当前 GPU、MLU 上常见的 memory-bound decode。

3. Linear Attention:把历史折叠成固定状态#

早期 Linear Attention 通常利用矩阵乘法结合律,把 Attention 近似或改写为:

ϕ(Q)(ϕ(K)TV)\phi(Q)\left(\phi(K)^TV\right)

在 causal decode 中,可以维护递归状态:

St=St1+ϕ(kt)vtTS_t = S_{t-1} + \phi(k_t)v_t^T

并通过当前 query 读取:

ot=ϕ(qt)TSto_t = \phi(q_t)^TS_t

这样便不需要保留所有 (Ki,Vi)(K_i,V_i),只需保存固定大小的状态矩阵 StS_t。对于 Linear Attention 层:

  • 状态大小与上下文长度 LL 无关;
  • decode 单步相对于 LLO(1)O(1)
  • 整段 prefill 可以做到 O(L)O(L)
  • 不再需要传统意义上的逐 token KV Cache。

经典 Linear Transformer 已经说明,这类结构可以同时被理解为 Transformer 和 RNN:训练时采用并行或 chunkwise 计算,decode 时采用递归状态更新。[2]

3.1 现代 Linear Attention 更像门控 RNN#

Qwen、Kimi、MiniMax 等模型采用的现代 Linear Attention,已经不只是早期的 kernel approximation。它更接近一种可并行训练的门控 RNN 或 State Space Memory

以 Gated DeltaNet 为例,状态更新可以抽象为:

St=AtSt1+ΔStS_t = A_tS_{t-1} + \Delta S_t

其中:

  • Gate 决定哪些旧信息需要遗忘;
  • Delta Rule 根据当前 key 修正已经写入的内容;
  • Query 从更新后的状态中读取信息。

普通累加式 Linear Attention 会让相似 key 对应的信息不断叠加,产生 memory collision。Delta Rule 的直觉则是:先检查当前状态已经为这个 key 记住了什么,再写入预测误差。Gating 进一步允许模型快速清除无用信息。Gated DeltaNet 也提供了面向训练的并行算法,因此 decode 时的递归形式并不意味着训练必须严格逐 token 串行。[3]

Kimi Delta Attention(KDA)继续扩展了这条路线:它引入更细粒度的 gating 和更有表达力的状态转移,并使用适合硬件实现的 Diagonal Plus Low-Rank(DPLR)结构。Kimi Linear 采用 3:1 的 KDA 与 MLA 混合结构,而不是纯 Linear Attention。其报告称,在 1M 上下文实验中,相较全 MLA,KV Cache 最多减少 75%,decode 吞吐最高提高约 6 倍。[4]

4. 两种不同的记忆系统#

MLA 与 Linear Attention 最本质的区别,不是公式里有没有 softmax,而是历史以什么形式存在。

4.1 MLA 像压缩数据库#

MLA 保存:

c1,c2,,cLc_1,c_2,\ldots,c_L

每个 token 仍然有独立记录。查询时,模型可以根据当前 query,对全部历史 token 做内容寻址。它更像一个压缩后的数据库或向量库,可以直接寻找“第 89372 个 token 中与当前 query 最相关的信息”。

4.2 Linear Attention 像固定容量工作记忆#

Linear Attention 保存:

SLS_L

此前所有 token 都被折叠进一个有限大小的状态。模型无法天然回到某个独立历史 token,只能询问当前状态综合保留了什么。它更像工作记忆或 RNN hidden state。

两者的核心权衡可以归纳如下:

维度MLALinear Attention
历史表示每个 token 一个压缩 latent整段历史一个固定状态
历史可寻址性较弱
KV 或状态随长度增长O(L)O(L)Linear 层约 O(1)O(1)
Decode 单步随长度增长O(L)O(L)O(1)O(1)
Dense PrefillO(L2)O(L^2)理论上 O(L)O(L)
精确检索较强容易受状态容量限制
多跳推理通常更稳对状态更新机制敏感
数值稳定性接近成熟 Softmax 栈递归状态更敏感
Prefix Cache自然可缓存状态,但分支复用更复杂
Speculative Decoding接近传统 KV 模型状态回滚和分叉更难
Paged Attention容易兼容Linear 层不再需要分页 KV
基础设施成熟度较高仍在快速建设

5. 它们的共同目标与共同约束#

5.1 都在降低 decode memory bandwidth#

MLA 减少每个历史 token 的读取量;Linear Attention 则试图取消对全部历史 token 的读取。可以把它们看成不同激进程度的压缩:

MHAGQAMLALinear State\text{MHA} \rightarrow \text{GQA} \rightarrow \text{MLA} \rightarrow \text{Linear State}

越向右,历史状态通常越小、压缩越激进,但模型能力与基础设施面临的挑战也越大。这不是一条严格的优劣排序,而是一条记忆表示逐渐从“显式”走向“状态化”的轴线。

5.2 都需要模型原生训练#

MLA 不是简单地对已有 MHA 权重做一次无损压缩;现代 KDA、Gated DeltaNet 也不能在推理阶段直接替换 Softmax Attention。它们都需要在预训练中让模型学会:

  • 如何压缩信息;
  • 什么信息应该保留;
  • 什么信息可以遗忘;
  • 如何从受限记忆中读取。

5.3 都依赖软硬件协同#

理论 FLOPs 低,不等于真实吞吐一定高。工程上仍需共同考虑:

  • kernel 的 arithmetic intensity;
  • 状态在 SRAM、L2、HBM 中的布局;
  • chunk size 与 batch scheduler;
  • TP 分片和跨卡通信;
  • 状态精度与数值稳定性;
  • CUDA Graph、prefix caching 和 speculative decoding。

MiniMax 在解释 M2 为什么回到 Full Attention 时,特别提到了低精度状态、Prefix Cache、Speculative Decoding、实际 kernel 利用率和基础设施成熟度等问题,也指出小规模 benchmark 可能无法暴露复杂多跳推理的损失。[5]

6. MLA 的优势与边界#

6.1 优势:模型能力相对稳健#

MLA 保留了 Softmax Attention 的全局内容寻址能力。对于 Needle-in-a-Haystack、精确复制、代码变量追踪、跨文档引用、多跳推理、超长 CoT 和 Agent 历史轨迹回溯,它通常比纯固定状态结构更容易做好。

关键不在于 MLA 完全无损,而在于它仍保留了“历史 token 作为独立对象存在”的结构。

6.2 优势:容易兼容现有推理系统#

MLA 仍然拥有 KV Cache,只是缓存元素的结构发生了变化,因此可以继续适配:

  • Paged KV Cache;
  • Prefix Caching 与 Radix Cache;
  • KV Offload、量化与迁移;
  • Prefill-Decode 分离。

对于 vLLM、SGLang 一类 serving 系统,它需要显著调整 kernel 和 layout,却不必彻底抛弃现有的缓存管理抽象。

6.3 边界:线性缓存和二次 Prefill 仍然存在#

即使每 token KV 压缩十倍,缓存仍满足:

CacheL\text{Cache} \propto L

到了 1M、10M token,问题只是被推迟,并未消失。若没有稀疏 Attention,dense prefill 依然满足:

Prefill FLOPsL2\text{Prefill FLOPs} \propto L^2

FlashAttention、Sequence Parallel 和 Context Parallel 可以改善 IO 与并行扩展,但不会改变 dense attention 的渐进复杂度。

7. Linear Attention 的优势与边界#

7.1 优势:超长 Decode 的理论上限高#

Linear 层生成每个 token 时只更新固定状态:

St=f(St1,xt)S_t = f(S_{t-1},x_t)

它不会随上下文增长而读取越来越大的 KV Cache,因此特别适合百万 token 上下文、长时间运行的 Agent、超长 thinking、流式多模态输入和大量 decode token 的 RL rollout。

7.2 优势:状态迁移与长期生成成本小#

在 Prefill-Decode 分离架构中,MLA 需要把长度为 LL 的 latent KV 从 Prefill 节点传给 Decode 节点;纯 Linear 层只需要传递一个固定状态:

MLA transferL,Linear-state transferO(1)\text{MLA transfer} \propto L, \qquad \text{Linear-state transfer} \approx O(1)

同样,MLA 每生成一个 token,缓存仍会增长;Linear 层的状态大小保持不变。当然,在混合模型里,全局 Attention 层依然需要传输和追加 KV。

7.3 边界:有限状态瓶颈#

无论更新规则多复杂,Linear Attention 都在把不定长历史压入固定容量:

x1:LSLx_{1:L} \longrightarrow S_L

当上下文的信息密度不断上升,可能出现信息覆盖、key collision、错误遗忘、相似实体混淆、精确复制下降或多跳链路断裂。Delta Rule、gating 和结构化状态是在缓解这个问题,而不是从数学上彻底消除它。

7.4 边界:无法在查询后重新查看原文#

Softmax Attention 可以针对每个 query 动态生成长度为 LL 的权重分布。固定状态模型无法等到查询出现后,再回头检查所有原始 token。如果某条信息在写入状态时没有被正确编码,查询时就无法完整恢复。

7.5 边界:数值路径更敏感#

递归状态可能经历数十万甚至数百万次更新:

St=AtSt1+BtS_t = A_tS_{t-1} + B_t

工程上需要处理累计误差、状态尺度漂移、FP8 或 INT8 精度、不同 chunk 算法的一致性,以及训练和逐 token decode 数值路径不完全相同等问题。这也是 Linear Attention 的理论速度经常比工业系统中的实测速率更漂亮的原因之一。

8. 几个模型阵营应该如何归类#

8.1 DeepSeek:从 MLA 走向 MLA + Sparse#

DeepSeek-V2 和 V3 的主线是 MLA。后续 DeepSeek-V3.2 在 MLA 基础上加入 DeepSeek Sparse Attention,通过 learned indexer 选择少量历史 token,再执行主 Attention。[6][14]

这说明 DeepSeek 的路线正在从纯 dense MLA 走向:

MLA+Sparse Attention\text{MLA} + \text{Sparse Attention}

8.2 Qwen:常规 Transformer 与 Hybrid 分支并存#

不能把整个 Qwen 家族归为 Linear Attention。Qwen、Qwen2 和常规 Qwen3 主要仍是 MHA 或 GQA Transformer;Qwen3-Next、Qwen3.5 等新分支才明确采用类似如下的混合结构:

3×Gated DeltaNet+1×Gated Full Attention3 \times \text{Gated DeltaNet} + 1 \times \text{Gated Full Attention}

也就是约 75% Linear 层和 25% Full Attention 层,且 Full Attention 本身也采用较少 KV Head 的设计。[7][13]

8.3 Kimi:MLA 主线与 KDA 探索并行#

Kimi 同样不能被统一归为 Linear 阵营。Kimi K2.5 等主线模型仍采用 MLA,Kimi Linear 则使用 3:1 KDA + MLA 的混合结构。[4][8]

更准确的描述是,Moonshot 同时在推进 MLA 与 KDA,而不是简单地用 Linear Attention 替换 MLA。

8.4 MiniMax:一次有价值的路线往返#

MiniMax-Text-01 和 MiniMax-M1 使用 Lightning Attention 与 Softmax Attention 的混合结构,其中 Text-01 每七层 Lightning Attention 插入一层 Softmax Attention。[9]

MiniMax M2 后来回到 Full Attention。官方复盘涉及复杂多跳推理、RL 训练数值稳定性、Prefix Cache、Speculative Decoding、kernel 实际利用率和 benchmark 覆盖不足等原因。[5] 随后 MiniMax 又继续探索基于 GQA 的 Sparse Attention。[10]

这段演进恰好说明:Linear Attention 还没有形成全面取代 Full Attention 的确定性路线。

9. 不能忽略的其他路线#

9.1 MQA 与 GQA#

这是目前最成熟、最普遍的 KV Cache 优化。GQA 让多个 Query Head 共享 KV Head:

nq>nkvn_q > n_{kv}

相较 MHA,其 KV Cache 大致按 nkv/nqn_{kv}/n_q 缩小。它没有 MLA 激进,但实现简单、kernel 成熟、模型质量稳定,是 MHA 与单 KV Head 的 MQA 之间很实用的折中。[11]

9.2 Sliding Window 与 Local Attention#

每个 token 只关注最近 WW 个 token:

{tW,,t}\{t-W,\ldots,t\}

这样 KV Cache 和 decode 计算都可以限制在 O(W)O(W),代价是远距离信息可能丢失。因此常见设计是若干 Local 层搭配少量 Global 层,其思路与 Linear + Full Attention 的混合结构相似。

9.3 Sparse Attention#

Sparse Attention 不一定减少 KV Cache 的存储,而是减少真正参与 Attention 的 token:

Lk,kLL \longrightarrow k, \qquad k \ll L

典型方案包括 block sparse、top-k token、compression token、learned indexer,以及 local + selected global tokens。DeepSeek 的 Native Sparse Attention(NSA)结合了粗粒度压缩、细粒度 token 选择和局部窗口,并从训练阶段原生采用稀疏模式。[12]

需要注意,Sparse Attention 可能把主 Attention 从 O(L)O(L) 降到 O(k)O(k);但如果索引器仍需扫描全部历史,索引过程本身可能成为新的瓶颈。

9.4 SSM、Mamba、RWKV 与 RetNet#

这些结构不一定被称为 Attention,但都在解决同一个序列记忆问题:

St=AtSt1+BtxtS_t = A_tS_{t-1} + B_tx_t

它们与现代 Linear Attention 的边界正在变得模糊。Gated DeltaNet 本身就处在 Linear Attention、RNN 与 State Space Model 的交汇处。

9.5 KV Cache 后处理#

另一类技术不改变 Attention 架构,却直接影响部署成本:

  • KV INT8、FP8、INT4 量化;
  • token eviction 与 heavy-hitter 保留;
  • KV pooling 和 CPU/SSD offload;
  • prefix caching 与跨请求 KV 复用;
  • layer-wise mixed precision。

这些方法可以与 GQA、MLA 和 Sparse Attention 组合使用。

10. 下一阶段可能出现什么#

10.1 Hybrid 会比纯 Linear 更快成为主流#

当前最明显的共同模式是:

多数 Linear/Local 层+少量 Global Softmax 层\text{多数 Linear/Local 层} + \text{少量 Global Softmax 层}

Linear 层负责低成本的信息流动和长期状态;Full 或 MLA 层负责精确检索、归纳、复制和跨段关联。Qwen3-Next 与 Kimi Linear 都选择接近 3:1 的混合比例,并非偶然。[4][13]

未来模型可以被理解为分层记忆系统:

记忆层级可能结构
最近局部细节Conv、Sliding Window
长期压缩状态KDA、Gated DeltaNet、SSM
精确全局记忆MLA、GQA Full Attention
超长历史搜索Sparse Indexer、Retrieval

10.2 MLA 会与 Sparse Attention 深度结合#

这是一条非常现实的路线:

  1. MLA 降低每个历史 token 的缓存大小;
  2. Sparse Attention 降低每次读取的 token 数;
  3. KV 量化进一步降低存储和带宽;
  4. Prefix Cache 避免重复 prefill。

可以把总成本粗略理解为:

Cost历史 token 数×每 token 状态大小×实际访问比例\text{Cost} \approx \text{历史 token 数} \times \text{每 token 状态大小} \times \text{实际访问比例}

MLA 优化第二项,Sparse Attention 优化第三项。DeepSeek-V3.2 的 DSA 正体现了这类组合。[14]

10.3 Attention 可能变成动态路由系统#

更进一步,未来的模型未必规定“这一层永远是 Linear”或“这一层永远是 Full Attention”,而可能根据 token 与任务动态选择:

Local  /  Linear State  /  Sparse Global  /  Dense Global\text{Local} \;/\; \text{Linear State} \;/\; \text{Sparse Global} \;/\; \text{Dense Global}

简单 token 只走 Linear,检测到 retrieval query 时进入 Sparse Global,重要 reasoning token 使用 Full Attention,视觉和代码 token 则选择不同的 memory path。它类似 MoE,只是路由对象从 FFN Expert 变成 Attention Expert。

10.4 Linear State 会变大,也会更结构化#

固定的小状态容量有限,下一步可能包括多组 memory state、head-specific state、low-rank + diagonal state、fast state + slow state、外部可写 memory、跨层共享 memory 与 hierarchical recurrent state。KDA 的 DPLR 转移已经在朝更有表达力的结构化状态演进。[15]

10.5 架构优劣将越来越依赖 Serving 系统#

未来不能只比较 O(L)O(L)O(L2)O(L^2),还需要同时追问:

  • 是否支持 continuous batching;
  • state 能否高效复制、分叉与回滚;
  • speculative decoding 如何提交状态;
  • prefix sharing 如何组织;
  • PD 分离时需要传输多少状态;
  • TP/CP 如何分片和通信;
  • FP8 状态是否稳定;
  • kernel 能否充分利用 Tensor Core;
  • 短请求与长请求能否高效混部。

Attention 路线的竞争,最终会成为模型架构、kernel、scheduler、cache manager 与集群拓扑的联合竞争。

11. AI Infra 应该关注什么#

11.1 对 MLA 模型#

重点是:

  • latent KV 的 layout 与分页;
  • decoupled RoPE cache;
  • absorb 与 non-absorb 模式;
  • MLA kernel 和 TP 分片;
  • PD 分离时 latent KV 的传输;
  • Sparse MLA 的索引器成本。

MLA 的核心优化目标仍然是:

减少 HBM KV read\text{减少 HBM KV read}

11.2 对 Linear 模型#

重点则变成:

  • recurrent state 的大小与 dtype;
  • chunkwise prefill 与 scan kernel;
  • state 在 TP Rank 间是否需要通信;
  • batch 内不同序列状态的布局;
  • prefix state snapshot;
  • speculative branch 的状态回滚;
  • CUDA Graph 下状态地址是否固定;
  • hybrid Full Attention 层的 KV 管理。

Linear Attention 的核心优化目标是:

高效更新固定状态\text{高效更新固定状态}

它不再以传统 Paged KV Cache 管理为中心,但混合模型也不会让 KV 管理彻底消失。

12. 最终判断#

可以把目前的 Attention 技术路线总结成三个层次:

KV 压缩访问稀疏化历史状态化\boxed{ \text{KV 压缩} \rightarrow \text{访问稀疏化} \rightarrow \text{历史状态化} }
  • GQA/MLA 压缩每个 token;
  • Sparse Attention 减少实际访问的 token;
  • Linear/KDA/Gated DeltaNet 把历史 token 转化为固定状态。

MLA 的核心优势,是保留精确、显式、可寻址的历史记忆,模型与工程风险相对较低。Linear Attention 的核心优势,是让线性层的状态不再随上下文增长,理论上更适合百万级上下文和超长输出。

近期最可能胜出的并不是二选一,而是:

Local/Linear Memory+少量 MLA/GQA Global Attention+Sparse Retrieval\boxed{ \text{Local/Linear Memory} + \text{少量 MLA/GQA Global Attention} + \text{Sparse Retrieval} }

这是一种由短期局部细节、长期压缩状态和精确全局检索共同构成的多层记忆架构。它也意味着,未来评价一种 Attention 设计时,不能只看论文中的复杂度,还要看它保存了什么、忘记了什么,以及整套 serving 系统能否真正把理论优势兑现出来。

参考资料#

  1. DeepSeek-AI, DeepSeek-V2: A Strong, Economical, and Efficient Mixture-of-Experts Language Model.
  2. Katharopoulos et al., Transformers are RNNs: Fast Autoregressive Transformers with Linear Attention.
  3. Yang et al., Gated Delta Networks: Improving Mamba2 with Delta Rule.
  4. Moonshot AI, Kimi Linear.
  5. MiniMax, Why Did MiniMax M2 End Up as a Full Attention Model?.
  6. DeepSeek-AI, DeepSeek-V3 Technical Report.
  7. Qwen Team, Qwen3.5: Towards Native Multimodal Agents.
  8. Moonshot AI, Kimi K2.5.
  9. MiniMax, MiniMax-01: Scaling Foundation Models with Lightning Attention.
  10. MiniMax, MiniMax Sparse Attention.
  11. Ainslie et al., GQA: Training Generalized Multi-Query Transformer Models from Multi-Head Checkpoints.
  12. DeepSeek-AI, Native Sparse Attention: Hardware-Aligned and Natively Trainable Sparse Attention.
  13. Qwen Team, Qwen3-Next-80B-A3B-Instruct.
  14. DeepSeek-AI, DeepSeek-V3.2: Pushing the Frontier of Open Large Language Models.
  15. Moonshot AI, Kimi Linear: An Expressive, Efficient Attention Architecture.