SICI · 蕴灵宗 · 第九章

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

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

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

时序之河

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

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

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

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

遗忘之流 遗忘之流

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

记忆之赌 · 序列智能版图

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

遗忘之流逼你上牌桌:「这五个任务里,哪个不需要记住长距离依赖?逐个指认——猜错我记一笔账。」
第一幕 · 自信→崩塌

序列之眼 · 时序依赖

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

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

高斯老祖 高斯老祖

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

遗忘之流 遗忘之流

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

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

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

第一幕 · 探索发现

隐状态殿 · 递推之环

权重矩阵组装 / 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 演化

第一幕 · 推导攀升

时序回溯 · BPTT 推导

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

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

高斯老祖 高斯老祖

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

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

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

第一幕 · 第一次崩塌

梯度深渊 · 消失与爆炸

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

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

遗忘之流 遗忘之流

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

高斯老祖 高斯老祖

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

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

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

时间步 T = 10

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

第二幕 · 挣扎→再崩塌

长记之门 · 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 变化 → 公式逐条解锁

第二幕 · 知其所以然

恒流之核 · 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 看梯度无损 → 回溯时间步看幅值

第二幕 · 平稳探索

简化与扩展 · 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 → 参数对比 → 右路:拼接双向 → 叠深层

第二幕 · 第二次崩塌

序列万象 · 语言模型与 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

第二幕 · 最高潮

Boss 战 · 遗忘之流

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

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

遗忘之流 遗忘之流

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

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

第二幕 · 收束

尾声 · 注意力之黎明

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

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

高斯老祖 高斯老祖

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

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

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