SICI · 蕴灵宗 · 第九章

序列寻踪

循环神经网络 RNN · 筑基四层

你以为 RNN 能记住长序列——可梯度沿时间链连乘,每多回溯一步就瘦一圈。遗忘之流潜伏在河底,专收"有记忆机制但梯度到不了"的缝隙。LSTM 给了门、CEC 给了水管,却终将被注意力取代。

遗忘之流低语:「你以为有隐状态就有记忆?我赌你这条河,记住不了几步之前的事。」
序章

时序之河

反直觉下注 · 五热区探索 · 序列版图

时序之河从蕴灵宗深处涌出,河面上漂着碎句、音符、股价曲线——一切有先后的事物都在这条河里流淌。河底有暗流。你看见远处漂来的字句沉了下去,再也没浮上来。联结先师站在岸边,身后是高斯老祖的投影——这位数理筑基的引路人此刻只递来一句旁白。

序列之剑,RNN在时间维度展开
高斯老祖 高斯老祖

「这条河养育了翻译、语音识别、时序预测——但河底有东西在吃记忆。我教过你向量与概率,可序列不是集合,顺序承载信息。」

遗忘之流 遗忘之流

「打个赌吧。你觉得这条河里,网络能记住几步之前的事?先来个简单的——这五个任务,哪个不需要记住长距离依赖?」

记忆之赌 · 序列智能版图

反直觉下注(五选一,可连错)→ 每点一次露出真实长依赖数据 → 五热区拼合

遗忘之流逼你上牌桌:「这五个任务里,哪个不需要记住长距离依赖?逐个指认——猜错我记一笔账。」
详解 · K09-14 RNN的应用场景:机器翻译/语音识别/时间序列预测

五张任务卡对应 RNN 的三大经典战场:序列到序列映射(机器翻译——BLEU 随句长下降,长句需 50+ 步对齐记忆;语音识别——16kHz 采样下 10 秒音频即 16 万步)、序列自回归生成(音乐生成——跨小节的乐句结构依赖)、时间序列预测(股票预测——60 日均线等长周期指标)与序列分类(情感分析——「它」指代 20 词前的实体)。公共前提正是 S0 台上的谜底:输出依赖「几步之前的信息」。归纳偏置视角:CNN 假设局部平移不变,RNN 假设时间因果 + 权重跨时间共享——参数量与序列长度无关。2017 年后注意力在离线翻译上全面取代 RNN,但流式语音(RNN-T 的预测网络)与边缘端低延迟场景仍保留递推结构——选型标准不是谁最强,是谁的时间结构对得上任务。

第一幕 · 自信→崩塌

序列之眼 · 时序依赖

词牌重排 / 顺序即信息 / 变长对齐

石径尽头是一面悬空的水镜,镜面上浮着一句话:"我 昨天 去 银行 存 了 钱"。联结先师问:"你觉得这句话,打乱顺序还剩多少意思?"遗忘之流在耳边轻笑——"词还是那些词,集合嘛,跟顺序无关。"你按下"打乱不影响"那一刻,水镜骤暗,语法树碎裂成无关节点。

高斯老祖 高斯老祖

「顺序是信息,长度是自由度。每个位置的语义取决于它之前(和之后)出现了什么——这就是时序依赖。打乱它,意思就没了。」

遗忘之流 遗忘之流

「意思没了!集合论救不了你。这一道刻痕,我替你记在石面上——「序列无序,不通」。」

水镜实验台 · 词牌重排 + 变长对齐

下注打乱是否影响 → 拖动词牌重排 → 定长格子装变长 → 动态展开

详解 · K09-01 序列数据的特点:时序依赖与变长输入

序列数据的两个本质属性:①时序依赖——顺序即信息,「猫追狗」与「狗追猫」词集相同而语义相反,位置本身就是特征;②变长输入——长度携带自由度,语言/音频/日志的长度分布都是长尾。批处理的两难:矩阵运算要定形,序列不定形 → 最短路径是 padding 补零对齐,代价是必须 mask——loss 计算与「取最终隐状态」都要跳过补零位,否则零位污染统计;更省的替代是按长度分桶(bucketing)减少无效补零。变长的另一端是超长截断(overflow)——S1 台上 fixed 槽位 + 显式补 0 + 超长溢出标注,就是变长处理的全部要素缩影。固定输入位宽的 MLP 无法原生处理上述任何一条:序列问题天然要求「读一步、记一步、再看下一步」的结构。

第一幕 · 探索发现

隐状态殿 · 递推之环

权重矩阵组装 / h_t 递推 / 时间步推进

殿中央悬浮着一个空白的递推环——左端是输入 x_t,右端是输出 y_t,中间一个发光的隐状态 h_t,上方有一根弧线连回上一时刻的 h_{t-1}。你手里有三个权重矩阵 W_xh、W_hh、W_hy 和一个激活函数 tanh,必须亲手把它们连进递推环。组装正确那一刻,公式浮现——h_t = tanh(W_xh·x_t + W_hh·h_{t-1} + b_h)。

高斯老祖 高斯老祖

「同一个网络,在每一个时间步重复使用同一组权重——递推。隐状态 h_t 是网络对'到此刻为止所有输入'的压缩摘要。它不在存每一步的原始数据,在存一个不断更新的记忆状态。」

递推环组装台 · 时间步推进模拟器

拖拽三个权重矩阵到位 → 公式浮现 → 推进时间步看 h_t 演化

详解 · K09-02 基本RNN:隐状态递推公式与前向传播

两条公式撑起整个 RNN:h_t = tanh(W_xh·x_t + W_hh·h_{t-1} + b_h),y_t = W_hy·h_t + b_y。三个设计抉择:①权重跨时间共享——同一组 (W_xh, W_hh, W_hy) 在每个时间步复用,参数量只随状态维度增长、与序列长度 T 无关,这是与「把序列摊平喂 MLP」的本质区别(摊平不仅参数爆炸,还把长度焊死在输入位宽上);②tanh 把每步状态压回 (−1,1) 防递推发散——但它的导数上界为 1 且仅在中段取大值,为 S4 的梯度消失埋下伏笔;③h_0 通常初始化为零向量。h_t 的语义:对「到 t 为止全部输入」的有损压缩摘要——无限长的历史、定长的状态。这份优雅同时是 RNN 全部困境的根源:S4 的梯度要沿它连乘,S8 的瓶颈要把它压进一个向量。

第一幕 · 推导攀升

时序回溯 · BPTT 推导

时间展开 / 逆向梯度追踪 / 五步推导 / 连乘项

殿后壁裂开一道缝,里面是一条向深处延伸的时间长廊——廊壁上排列着 RNN 展开后的副本:h_0, h_1, h_2, ..., h_T,每个副本之间用 W_hh 的连线串着。联结先师:"正向走完了。现在倒着走——从损失 L 出发,沿时间链回溯,看看梯度怎么流回每一步的权重。"你拖动光标沿链逆向移动,每一步都经过一个雅可比矩阵,梯度信号每过一步就"瘦"一圈。

高斯老祖 高斯老祖

「BPTT 不是新算法——是沿时间展开后的反向传播。但每多回溯一步,梯度就多乘一个 W_hh 和一个 tanh 导数。这个连乘,就是遗忘之流藏身的地方。」

BPTT 推导台 · 时间展开 + 逆向追踪 + 五步推导

展开 RNN 为时间链 → 拖光标逆向追踪梯度 → 逐步展开五步推导 → 连乘项高亮

详解 · K09-03 随时间反向传播BPTT:完整推导

五步推导:①展开——把递推环复制 T 份成前馈链,h_0…h_T 各占一个副本,共享权重标注为同一变量;②输出梯度——∂L/∂y_t 由损失函数直接给出;③状态回传——∂L/∂h_t = W_hy^T·(∂L/∂y_t) + W_hh^T·(∂L/∂h_{t+1}),注意 h_t 有两条下游(当前输出 + 下一时刻状态),来自两条路径的梯度相加;④权重累加——∂L/∂W_hh = Σ_t (∂L/∂h_t)·h_{t-1}^T,同一 W_hh 被 T 个位置复用,梯度沿全部时间步求和;⑤连乘雅可比——∂h_t/∂h_k = Π W_hh^T·diag(1−h_i²)(i 从 k+1 到 t),每回溯一步乘一次,这就是推导台上高亮闪烁的那一串。工程近似:截断 BPTT(TBPTT,k≈20~35 步)只回看 k 步,省显存且常不损精度,但硬性切断远于 k 步的梯度——与 S4 的「消失」合流后,网络实际上学不到远距离依赖。与 MLP 反传唯一的新东西,就是⑤那串连乘。

第一幕 · 第一次崩塌

梯度深渊 · 消失与爆炸

梯度衰减 / 谱半径 / 梯度裁剪 / 遗忘之流现身

你沿着 BPTT 的链一步步回溯,手里的梯度信号越来越弱。十步——还能握住。五十步——若有若无。一百步——你摊开手,掌心空空如也。河底的暗流浮上水面,凝成一张没有五官的脸。"我叫遗忘之流。你以为网络有记忆——但记忆不在状态里,在梯度能到达的地方。梯度到不了的过去,等于从未发生。"暗处传来一声极轻的、不属于遗忘之流的低语:"时间单向流动,梯度必须经过每一步——没有捷径。"

遗忘之流 遗忘之流

「你搭的递推环,每一步都是我吃一口的餐桌——'有隐状态'和'能学到远距离依赖',你们从来就分不清!哈哈哈哈!」

高斯老祖 高斯老祖

「是 RNN 错了,还是你用错了?梯度到不了的过去,等于没有过去。给它门——让信息自己决定留还是走。」

梯度衰减实验台 · 时间步滑块 + 谱半径 + 裁剪

拖动 T=1→200 看梯度幅值 → 切换 ||W_hh|| 三档 → 体验梯度裁剪

时间步 T = 10

谱半径切换 · ||W_hh|| = 0.9

详解 · K09-04 RNN的梯度问题:梯度消失/爆炸与时间步关系

连乘幅值由每步因子的上界决定:||W_hh||·γ,γ = max|tanh′| = 1。||W_hh||=0.9 时回溯 100 步 → 0.9¹⁰⁰ ≈ 2.7×10⁻⁵,200 步 → 7×10⁻¹⁰——正是实验台 log 轴上那道悬崖;1.1 则反向指数爆炸直至数值溢出;恰好 1.0 是不稳定的临界点(任何扰动都会把它推向一侧)。Bengio 1994 的判决:梯度随时间距离指数衰减,学习率救不了——放大梯度会先撑爆近端。处置是不对称的:爆炸可治——梯度裁剪 g ← min(1, c/||g||)·g(Pascanu 2013,保方向压幅值,c≈1~5),勾选后实验台上爆炸曲线立即驯服;消失不可裁——裁剪只压「太大」,压不了「太小」,唯一出路是改结构(S5 的门、S6 的加法通道)。初始化对策:正交初始化让谱半径 ρ(W_hh)≈1,把悬崖推迟但不消除。

第二幕 · 挣扎→再崩塌

长记之门 · LSTM 三门

遗忘门 / 输入门 / 输出门 / cell state 更新

殿中悬浮着三个石门:左门刻"遗忘",中门刻"输入",右门刻"输出"。每扇门可开可关,门上有 σ 符号——sigmoid,值域 0 到 1。你逐一打开三扇门,公式逐条浮现:遗忘门 f_t = σ(W_f·[h_{t-1}, x_t] + b_f),输入门 i_t = σ(...),候选 g_t = tanh(...),cell state 更新 C_t = f_t⊙C_{t-1} + i_t⊙g_t。遗忘之流在角落阴笑——"门?好东西。但你开门关门——我就在门缝里。"

高斯老祖 高斯老祖

「LSTM 不再粗暴地把 h_{t-1} 压进 tanh——它用三道门把'留什么、写什么、吐什么'分开控制。遗忘门是橡皮擦,输入门是钢笔,输出门是滤镜。」

LSTM 三门操控台 · cell state 实时计算

拖动 f_t/i_t/o_t 滑块 → 看 C_t 与 h_t 变化 → 公式逐条解锁

详解 · K09-05 LSTM:遗忘门/输入门/输出门的完整设计

Hochreiter & Schmidhuber 1997。一套公式一条通道:f_t = σ(W_f·[h_{t-1},x_t]+b_f) 遗忘门——橡皮擦,0=全删、1=全留;i_t = σ(W_i·[h_{t-1},x_t]+b_i) 与 g_t = tanh(W_g·[h_{t-1},x_t]+b_g) 输入门+候选——钢笔,一个管「写多少」、一个管「写什么」;C_t = f_t⊙C_{t-1} + i_t⊙g_t——cell state 加法更新,LSTM 的心脏;o_t = σ(W_o·[h_{t-1},x_t]+b_o)、h_t = o_t⊙tanh(C_t) 输出门——滤镜,控制「吐多少」。三门操控台演示的正是解耦价值:「留什么、写什么、吐什么」各有独立权重,信息不再被激活函数无差别挤压。工程细节里藏着大学问:Jozefowicz 2015 扫描海量架构后发现 b_f 初始化到 1~2(遗忘门默认常开)是训练成败最敏感的一处——默认「记住」远好于默认「忘记」。参数账:同维度下 LSTM 4 组门权重、GRU 3 组、朴素 RNN 1 组。

第二幕 · 知其所以然

恒流之核 · CEC

梯度路径对比 / 加法更新 / 恒定误差旋转器

三门之后,殿深处露出一根贯穿时间的光管——cell state 通道 C_t。管道上没有任何激活函数的挤压,只有加法节点和遗忘门乘法节点。联结先师:"门是开关。水管是 cell state——你看,它不走 tanh。"你亲手比较 RNN 隐状态和 LSTM cell state 的梯度路径:左屏 RNN 经过 tanh 导数连乘衰减,右屏 LSTM 的 ∂C_t/∂C_{t-1} = f_t——没有 tanh 导数!设 f_t=1,梯度沿 CEC 无损流过 100 步。

高斯老祖 高斯老祖

「LSTM 的秘密不在门本身——在 cell state 的加法更新。当 f_t≈1,梯度沿 CEC 无损流过 100 步、1000 步。这就是恒定误差旋转器:一条绕过激活函数挤压的梯度高速公路。」

CEC 对比台 · RNN 衰减 vs LSTM 恒流

双屏梯度路径对比 → 设 f_t=1 看梯度无损 → 回溯时间步看幅值

详解 · K09-06 LSTM的信息流分析:恒定误差旋转器CEC

CEC 的数学一句话:对 C_t = f_t⊙C_{t-1} + i_t⊙g_t 求 C_{t-1} 的偏导得 ∂C_t/∂C_{t-1} = f_t(逐元素)——梯度流只受遗忘门调制,完全绕开 tanh 导数连乘。回溯 k 步即 Π f_t ≈ f^k:f=1.0 梯度无损,这就是恒定误差旋转器(Constant Error Carousel,Hochreiter 1997 论文的原生命名,指的就是这条无激活函数的加法通道本身);f=0.99 → 0.99¹⁰⁰ ≈ 0.37,远端仍可训;f=0.9 → 0.9¹⁰⁰ ≈ 2.7×10⁻⁵,一夜退回朴素 RNN——对比台上 f_t 滑块从 1.0 拉到 0.9,百步梯度相差四个数量级,就是这三条算式。Greff 2016 的大规模消融(5000+ 次实验)给出裁判:去窥视孔(peephole)几乎无损、耦合输入门与遗忘门无损、动 cell state 的加法通道伤害最大——门的数量是装饰,CEC 才是灵魂。

第二幕 · 平稳探索

简化与扩展 · GRU 与双向深层

GRU 两门 / 参数对比 / 双向 RNN / 深层 RNN

殿后出现两条岔路:左路牌"简化",右路牌"扩展"。联结先师:"LSTM 四个门。有人问:能不能两个门也行?又有人问:能不能两个方向都看?"左路上你拖拽更新门 z_t 和重置门 r_t 组装 GRU——更新门一手管遗忘+输入,互补;重置门管候选生成。右路上你把两个 RNN 背靠背拼成双向,又把 RNN 叠成多层。Cho 2014 的实验数据弹出——GRU 省 25% 参数,多数任务效果相当。

高斯老祖 高斯老祖

「GRU 把 LSTM 的三门融成两门:更新门一手管遗忘+输入,重置门管候选生成。双向 RNN 让每个时刻同时拥有前文和后文——但代价是必须等整个序列到齐。简化是减法、扩展是加法,但两者都还困在时间链里。」

简化与扩展台 · GRU 组装 + 双向深层搭建

左路:拖 z_t/r_t 组装 GRU → 参数对比 → 右路:拼接双向 → 叠深层

详解 · K09-07 GRU:简化版门控RNN

Cho 2014。三门并两门:z_t = σ(W_z·[h_{t-1},x_t]) 更新门一手包办遗忘+输入——h_t = (1−z_t)⊙h_{t-1} + z_t⊙h̃_t,保留比例 1−z_t 与写入比例 z_t 此消彼长(互补约束),这正是「一手管两件事」的数学含义;r_t = σ(W_r·[h_{t-1},x_t]) 重置门只管候选状态能看多少历史——h̃_t = tanh(W·[r_t⊙h_{t-1}, x_t])。结构差异:没有独立 cell state,h 一条通道直通,少一条状态变量 = 少一份显存与同步开销。参数账:3 组 vs LSTM 4 组,省约 25%——组装台上的对比数字。效果之争的裁决来自系统对比(Greff 2016;Britz 2017):GRU 与 LSTM 在翻译/语言建模上统计相当,选哪个是超参数问题而非原则问题。经验法则:小数据、要快、要省 → GRU;超长依赖、大数据 → LSTM 仍略稳。

详解 · K09-08 双向RNN与深层RNN

双向 RNN(Schuster & Paliwal 1997):前向 h→ 与后向 h← 两条独立递推链,t 时刻输出取拼接 [h→_t ; h←_t]——同时拥有前文与后文语境。它是词性标注、NER、机器翻译编码器的标配,因为「理解第 t 个词」天然需要看两边;拼接台上两条彩色通道汇入同一节点就是这个结构。硬约束:后向链必须等序列到齐才能算完——双向结构无法流式、无法实时生成,解码器(自回归逐词产出)永远只能单向。深层 RNN(stacked):第 l 层的输入是第 l−1 层各步的输出序列,逐层抽象(字符→词→短语→语义的层级直觉来源);代价是梯度链长度 = 时间步 × 层数,叠加滑块每拉一层链就长一截——2~4 层是实用区间,再深需要残差连接续命。两条扩展都增强了表达,但都还锁在「沿时间走」的范式里——直到注意力。

第二幕 · 第二次崩塌

序列万象 · 语言模型与 Seq2Seq

N-gram/神经LM/PPL · Word2Vec · 类比评估 · Seq2Seq 定长瓶颈

殿后推开一扇门,门后是一座万象工坊——四座工作台排列其间,各刻一字:"语"、"嵌"、"评"、"译"。前三个台子你玩得顺手——神经 LM 让 PPL 下降、Word2Vec 把"国王"和"王后"在向量空间拉近、king-man+woman≈queen 命中。第四个台子"译"上,你先译短句"Hello world"成功,再拖长句到 50 词——编码器把一百个词压进一个 512 维 context vector,解码器开始丢词、错译、重复。遗忘之流从瓶颈断口冒出:"你用门控拦住我,又用瓶颈把我放进来。"

遗忘之流 遗忘之流

「学了门控就想走?瓶颈还在——我就在瓶颈里。五十个词压进一个向量,压丢的正是远端词的信息。我还是在这里。」

高斯老祖 高斯老祖

「Seq2Seq 把整条输入序列压成一个固定长度的 context vector——这是新的瓶颈。LSTM 解决了梯度消失,却没解决信息压缩。」

序列万象工坊 · 四座工作台

台① N-gram→神经 LM · 台② Word2Vec · 台③ 类比+t-SNE · 台④ Seq2Seq 翻译

语言模型 · N-gram vs 神经 LM · PPL

详解 · K09-09 语言模型:N-gram/神经语言模型/评估指标PPL

语言模型的唯一目标:给「到当前位置为止的概率」打分——P(w_1…w_T) = Π_t P(w_t | w_{

详解 · K09-10 词嵌入Word Embedding:Word2Vec/原理

理论基础是分布式假设(Firth 1957:「一个词的含义由它出现的上下文决定」):共现窗口统计里隐含语义,Word2Vec(Mikolov 2013)是对它的高效提取。两条训练路线:CBOW 用上下文预测中心词——一步聚合、快,适合高频词与大数据;Skip-gram 用中心词逐个预测上下文——样本多、慢,但生僻词与小语料表现更好,台②切换开关的两档。Levy & Goldberg 2014 给出理论解释:SGNS 隐式地在分解移位后的 PMI 矩阵。计算诀窍是负采样:把 V 类 softmax 换成「1 正 + k 负」的二分类(k≈5~20),训练成本与词表大小脱钩。存储账:V×d 嵌入矩阵(V=10⁵、d=300 → 3×10⁷ 参数)替代 V² 共现矩阵(10¹⁰),约 300 倍压缩。语义几何化之后,「相似」有了精确含义:向量夹角余弦——方向携带语义,模长多与词频纠缠,比较前常做归一化。

详解 · K09-11 词嵌入的评估:类比任务/可视化

内在评估三板斧:①词类比——king − man + woman ≈ queen,用 3CosAdd 在全词表找 argmax cos(w, c − a + b)(Mikolov 2013 的语义/语法两类数据集,台③的算式);②人评相似度——WordSim-353、SimLex-999 上算余弦与人工打分的 Spearman 相关;③可视化——t-SNE 保持局部邻域结构,语义簇与「性别/时态/首都↔国家」的平行四边形几何肉眼可见(台③右侧投影)。外在评估:冻结嵌入接到下游任务(NER/情感分类)看 Δacc。两个警示:类比命中常可被词频伪影解释(Linzen 2016——高频词爱聚堆,得分可能是统计捷径而非语义);嵌入把语料的偏见也几何化(Bolukbasi 2016:he : she ≈ programmer : homemaker 的职业偏置方向)——语义向量既继承词义,也继承语料的阴暗面。

详解 · K09-12 Seq2Seq模型:编码器-解码器架构

Sutskever 2014。三段式架构:编码器 RNN 读入源句逐步更新 h_t,末状态 h_T 即 context vector c(固定 d 维)→ 解码器以 c 为初始状态自回归生成,训练用 teacher forcing(喂真词),推理喂自己上一步的输出。两个红利:源/目标长度彻底解耦(变长→变长);Sutskever 发现把源句词序倒过来喂——缩短目标首词与源句末词的依赖距离——显著提效。命门正是台④的崩塌:c 定长,五十个词的信息必须挤进同一个向量,解码端只能取回有损压缩的残影;Cho 2014 已观测句长超出训练分布后翻译质量断崖,Bahdanau 2015 的 BLEU-长度曲线同样单调下坠——拖长滑块看到的 c 节点溢出就是这个实验。破局预告(S9 Boss 战的钥匙):让解码器每一步都回头对编码器全部状态加权取用,c 从「一个静态向量」变成「每步动态加权和」——瓶颈就此消失,注意力登场。

第二幕 · 最高潮

Boss 战 · 遗忘之流

三问对决 · 遗忘债清算 · 排除法收网 · 注意力萌芽

工坊灯火齐灭。遗忘之流从河底升起,从四面八方压过来,凝成一张巨大的、没有五官的脸。"我是遗忘之流。我不住在没有记忆的地方——那地方救不了我。我住在'有记忆机制但梯度到不了'的缝隙里。你每以为 RNN 记住了什么,我就胖了一圈。LSTM?GRU?好东西。你给我系了条狗绳——但狗绳还在我脖子上。三问。答错一题,我就多吞一段你的记忆。"

遗忘之流 遗忘之流

「让我看看你这趟河,是走明白了,还是漂明白了。你手里唯一的武器,是这一路亲手验证过的每一步。」

遗忘债累计 0 笔 · 三问全对后清零

第二幕 · 收束

尾声 · 注意力之黎明

知识图谱点亮 · 境界突破 · ch10 伏笔

遗忘之流散尽时,河面上浮起一层金光。你手里的时序之链断了一环——不是断了,是不需要了。联结先师:"你入门了。不是因为你答对了三问——答对的会忘。是因为你推过的每一步 BPTT、设过的每一个 f_t=1、压丢的每一个长句,都刻在你手上了。"他忽然话锋一转——"但你知道为什么注意力可以不要时间链,却仍然能处理序列吗?你知道 Q、K、V 是怎么从同一个序列里长出来的吗?"你张了张嘴,发现自己答不上来。

高斯老祖 高斯老祖

「下一章,我们去看一个没有循环、只有注意力的世界。那个世界,叫 Transformer。RNN 打开了序列的大门——但走进去的人,最后都把钥匙换成了注意力。」

知识图谱 · 15 碎片点亮 + 境界突破

逐一点亮 15 个知识碎片 → 注意力居中连线成网 → 时序之链沉入水底

详解 · K09-13 注意力机制的引入:Query/Key/Value

两代表述一条本质。Bahdanau 2015 原始形态:对齐分 e_ij = score(s_{i−1}, h_j)(加性 MLP 打分)→ softmax 归一成权重 α_ij → c_i = Σ_j α_ij·h_j——「解码每一步,回头查全部编码状态」。Vaswani 2017 把它抽象成 Q/K/V 三件套:Q = 查询(这一步我要找什么),K = 键(每个候选位置贴的标签),V = 值(真正取走的内容);Attention(Q,K,V) = softmax(QK^T/√d)·V——Q·K 点积打分、softmax 当权重、对 V 加权求和。两个细节:√d 缩放防 softmax 饱和(点积方差随维度 d 线性增长,不缩放会把 logits 推进饱和区、梯度归零);Q、K、V 通常由同一输入乘三组投影矩阵而来——先师那句「Q、K、V 从同一个序列里长出来」的出处。范式跃迁的含义:依赖从「沿时间链走 O(T) 步」变成「任意两位置 1 步直达」,且 T 个位置的训练可全并行——没有链,就没有连乘,遗忘之流无处容身。

详解 · K09-15 RNN的局限与向注意力机制的演进

RNN 三宗罪,注意力三味解药:①梯度沿时间连乘——LSTM 用 CEC 缓解到百步量级,千步依然艰难;注意力直接访问,没有链就没有连乘。②串行依赖——T 步必须顺序走,GPU 的并行算力被时间维度锁死;注意力一步全连接,训练全并行。③定长瓶颈——Seq2Seq 把整句压进一个向量;注意力每步动态加权、随用随取。Vaswani 2017 的激进之处:既然注意力全能,干脆删掉循环(Attention Is All You Need),只留注意力 + 前馈 + 残差 + 位置编码。但代价是转移而非消失:自注意力两两配对是 O(T²),长度平方膨胀(ch10 深度融合篇的战场);且「顺序」这个 RNN 的天生先验必须用位置编码手工补回。范式总结:记忆从「链上传递」搬到「图上直连」——RNN 打开了序列之门,走进去的人最后都把钥匙换成了注意力。

交互实验

卷积特征图

选择卷积核,观察 5×5 白块卷积后的特征图响应。