想象一座老式小区,门口有位手写台账的保安。每天交接班时,新来的保安既要翻昨天的旧记录,又要记录今天发生的新情况,最后在“旧本子”和“新本子”之间合成一本合并版台账,交给下一个班。这个过程听起来简单,却藏着循环神经网络 RNN 的核心难题:信息该怎么留、该怎么忘、该怎么传?LSTM 用了三个专业门卫——遗忘门、输入门、输出门——各管一摊。而 GRU 却说:两个门就够了。它用重置门决定“旧记录值不值得重翻”,用更新门决定“新旧内容各占几成”,把三个人的活压缩成两个人的协作,参数更少、训练更快,在算力和内存有限的手机芯片、传感器设备上格外吃香。这篇指南将带你拆开这两个门看里面的齿轮,对比 LSTM 的差异,学会在哪些场景派它上场。

岗位关联

掌握 GRU 能帮你用更少的算力完成序列建模任务,在移动端与嵌入式项目里成为最实用的“轻量级记忆管家”,是部署型算法工程师的必备技能。

目录
  1. 可视化演示
  2. 门控设计原理
  3. 状态计算流程
  4. LSTM结构对比
  5. 梯度与依赖建模
  6. 应用场景选择
  7. 工程部署优化
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

本节配有交互动效(进入视口后自动加载,约 3KB)。

GRU细胞结构:两个门控的简化设计 GRU Cell 更新门z: 记忆混合机制 更新门公式 h\u209C = (1-z) \u00d7 h\u209C\u208B\u2081 + z \u00d7 h\u0303 z = \u03C3(Wz \u00b7 [h\u209...

门控设计原理

回到小区保安。他每天面对两样东西:昨天的《交接台账》h_{t-1},和今天刚发生的《访客与异常记录》x_t。这两份信息不能直接堆在一起——旧记录可能已经过时,新记录也可能充满噪音。于是保安练出了两个条件反射:重置门 r_t 判断“旧台账还值不值得逐页重翻”,更新门 z_t 判断“新记录写几页、旧台账保留几页”。这两个门都不是拍脑袋的开关,而是根据当前情况自动算出的介于 0 到 1 之间的数值。

技术上,r_t 和 z_t 都是对拼接向量 [h_{t-1}, x_t] 做线性变换后,再过 sigmoid 激活函数得到的结果。sigmoid 是一个“软开关”:输出接近 0 表示门几乎关闭,接近 1 表示门完全打开。正因为是软的、可微的,梯度才能穿透门控顺利完成反向传播。更新门 z_t 的公式如下:

保安的“条件反射”并非天生,而是多年执勤训练出来的——权重就是他的职业经验。更新门数值高时,他倾向于把今天的事大书特书;数值低时,他选择原样保留昨天的记录。这一开一合之间,记忆的取舍就有了章法。

zt=σ(Wz⋅[ht−1,xt]+bz)\displaystyle z_t = \sigma(W_z \cdot [h_{t-1}, x_t] + b_z)
更新门 z_t 是一个 0 到 1 之间的比例旋钮,决定最终日志里“新内容”的占比。这个旋钮不是人定的,而是网络从数据里自动学出来的。
  1. 拼接上下文向量把旧隐藏状态与当前输入首尾相连,让门控同时看到过去与现在。
    [ht−1,xt]\displaystyle [h_{t-1}, x_t]
  2. 门控线性变换用专属权重矩阵把拼接向量投影到隐藏维度,每个维度获得一个独立的分值。
    Wz⋅[ht−1,xt]\displaystyle W_z \cdot [h_{t-1}, x_t]
  3. 加入偏置为每个维度提供可学习的默认门控倾向,相当于保安天生“偏保守”还是“偏激进”。
    +bz\displaystyle + b_z
  4. 软开关归一化sigmoid 把实数压到 (0,1) 区间,数值就是更新门的开度。
    σ(⋅)→(0,1)\displaystyle \sigma(\cdot) \rightarrow (0, 1)

状态计算流程

更新门定好了“新旧比例”,但“新内容”本身怎么生成?保安不会把今天的事件原样誊抄,而是先写一版“草稿”:结合今天的见闻,以及从旧台账里“挑选出的仍有用信息”。这个挑选动作正是重置门 r_t 完成的:它对旧台账逐行打勾,有用的留下,没用的划掉。于是草稿候选状态 h̃_t 的公式里,旧记忆变成了 r_t ⊙ h_{t-1},这里 ⊙ 表示逐元素相乘。

候选状态用 tanh 激活函数把数值压到 (-1, 1) 之间,避免无界增长。r_t 不是整体开关,而是对隐藏状态的每个维度分别放行,这给了模型更细的筛选粒度。最后,更新门做“叠化合成”:h_t = (1 - z_t) ⊙ h_{t-1} + z_t ⊙ h̃_t。这就像视频剪辑里的淡入淡出——旧画面按比例淡出,新画面同步淡入,两者比例恰好互补为 1。

当更新门 z_t 接近 0.9 时,新内容占九成,旧记忆退居一隅,适合快速跟上输入突变;z_t 接近 0.1 时,旧台账稳坐 C 位,适合信号平稳的场景。保安手中的笔,就这样在“照抄旧账”和“重写新账”之间灵活切换。

h~t=tanh⁡(Wh⋅[rt⊙ht−1,xt]+bh)\displaystyle \tilde{h}_t = \tanh(W_h \cdot [r_t \odot h_{t-1}, x_t] + b_h)
ht=(1−zt)⊙ht−1+zt⊙h~t\displaystyle h_t = (1 - z_t) \odot h_{t-1} + z_t \odot \tilde{h}_t
第一条公式生成“草稿候选状态”,第二条公式把旧状态与新候选按更新门比例混合成最终隐藏状态。两条公式合起来就是 GRU 一次完整的记忆更新。
  1. 重置门筛选旧记忆逐元素决定旧状态哪些维度保留下来参与写草稿。
    rt⊙ht−1\displaystyle r_t \odot h_{t-1}
  2. 拼接并线性变换把筛选后的旧记忆与当前输入拼接,再乘以候选权重并加偏置。
    Wh⋅[rt⊙ht−1,xt]+bh\displaystyle W_h \cdot [r_t \odot h_{t-1}, x_t] + b_h
  3. tanh 压缩候选值把草稿的每个分量限制在 -1 到 1 之间,防止数值无界膨胀。
    tanh⁡(⋅)\displaystyle \tanh(\cdot)
  4. 新旧互补加权更新门与 1-z_t 形成互补权重,对旧状态和新候选做线性插值。
    ht=(1−zt)⊙ht−1+zt⊙h~t\displaystyle h_t = (1 - z_t) \odot h_{t-1} + z_t \odot \tilde{h}_t

LSTM结构对比

LSTM 是“三人保安组”:遗忘门负责扔旧文件,输入门负责收新文件,输出门负责控制对外透露多少消息。GRU 砍掉了输出门,并把“遗忘”和“输入”合并成一个更新门——你不必分别决定“删多少”和“写多少”,只需决定“新旧各占多少”。这好比三人班组各填一张表,而两人班组只填一张“合并表”,动作少了,交接速度自然更快。

从参数数量看,LSTM 每个门需要一组输入权重和一组隐层权重,共四组;GRU 只需要三组——重置门、更新门、候选状态。在隐藏维度相同时,GRU 的权重矩阵规模约为 LSTM 的四分之三,训练内存与推理浮点运算量也随之下降约四分之一。

少了一个门,GRU 对“何时对外输出什么”的控制粒度略粗,但在多数中等规模数据任务中,它与 LSTM 的准确率几乎打平,甚至因为参数少而自带轻微正则化效果。只有在数据量特别大、算力充足的场景,LSTM 的精细门控才体现出稳定优势。两人班组虽然没人专职“对外汇报”,但对小区巡逻这种日常任务,报告晚点写也无伤大雅。

NGRUNLSTM≈34\displaystyle \frac{N_{\text{GRU}}}{N_{\text{LSTM}}} \approx \frac{3}{4}
该式表明:同隐藏维度下,GRU 的参数量大约只有 LSTM 的 75%。
  1. GRU 权重组数重置门、更新门、候选状态各一组输入与隐层矩阵。
    NGRU=3n(n+d)\displaystyle N_{\text{GRU}} = 3n(n + d)
  2. LSTM 权重组数遗忘门、输入门、候选状态、输出门共有四组。
    NLSTM=4n(n+d)\displaystyle N_{\text{LSTM}} = 4n(n + d)
  3. 比值化简隐藏维度 n 与输入维度 d 相同时,常数因子相消,比值恒为 3/4。
    NGRUNLSTM=34\displaystyle \frac{N_{\text{GRU}}}{N_{\text{LSTM}}} = \frac{3}{4}

梯度与依赖建模

保安最怕什么?信息传着传着就丢了。普通 RNN 每次交接都要把旧台账乘以一个矩阵,多传几步数值就趋近于零——这就是梯度消失。GRU 的更新门提供了一条“传送带”:当 z_t 接近 0 时,h_t ≈ h_{t-1},旧信息几乎不经过任何压缩地滑到下一位保安手里。

数学上看,h_t 对 h_{t-1} 求偏导,结果包含一项 (1 - z_t) 的直线通道。这条通道不经过任何权重矩阵的缩放,是梯度跨越多步回流的安全隧道。另一条经由候选状态 z_t ⊙ h̃_t 的路径虽然与权重矩阵相关,可能被压缩或放大,但恒等捷径始终存在。

要记住几个月前的门禁规则?把更新门调到接近 0,旧记忆一路原样保留。要立刻响应今天的可疑人员?把更新门调到接近 1,快速吸收新信息。GRU 在“记住”与“更新”之间的连续插值,让它同时具备长期依赖保持与短期突变捕捉能力,这正是语言翻译、语音识别、股价预测等序列任务最需要的特性。

∂ht∂ht−1=(1−zt)I+∂(zt⊙h~t)∂ht−1\displaystyle \frac{\partial h_t}{\partial h_{t-1}} = (1 - z_t)\mathbf{I} + \frac{\partial (z_t \odot \tilde{h}_t)}{\partial h_{t-1}}
梯度回传时走“两条路”:一条是更新门控制的恒等捷径,另一条是候选状态的计算路径。捷径保证了长期信息不消散。
  1. 恒等通道项更新门接近 0 时,(1-z_t) 接近 1,梯度近似原样直通。
    (1−zt)I\displaystyle (1 - z_t)\mathbf{I}
  2. 候选路径项更新门接近 1 时,梯度主要经由候选状态计算链回流。
    ∂(zt⊙h~t)∂ht−1\displaystyle \frac{\partial (z_t \odot \tilde{h}_t)}{\partial h_{t-1}}
  3. 两路相加两条路径叠加,保证梯度既不会指数式消失,也不会无限爆炸。
    ∂ht∂ht−1=(1−zt)I+∂(zt⊙h~t)∂ht−1\displaystyle \frac{\partial h_t}{\partial h_{t-1}} = (1 - z_t)\mathbf{I} + \frac{\partial (z_t \odot \tilde{h}_t)}{\partial h_{t-1}}

应用场景选择

既然 GRU 轻量又擅长记忆,哪些场合该派它上场?决策可以套用一句口诀:数据量有限或算力紧张,优先 GRU;资源海量且追求极限精度,再考虑 LSTM。手机输入法的联想词预测就是典型——模型必须常驻内存,每敲一个字都要在几毫秒内给出候选词。GRU 的低参数量直接转化为更快的启动速度和更低的耗电。

智能音箱的唤醒词检测是另一个例子:设备 24 小时监听音频流,算法要逐帧判断是否出现唤醒指令。GRU 每一步只有三组矩阵运算,比 LSTM 少四分之一计算量,整夜待机唤醒都能省下一大截电量。工业场景中,传感器每秒上报温度、振动、电流数据,GRU 可以用很小的规模学到设备退化趋势,提前发出故障预警。

对比 LSTM 的四组变换,GRU 的算力优势一目了然。两人保安组最适合预算有限的小区——手机、音箱、传感器这些“小场地”放不下太多人手,精简队伍反而跑得更快更省。

FLOPsstep=3(n2+n×d)\displaystyle \text{FLOPs}_{\text{step}} = 3(n^2 + n \times d)
这是 GRU 单个时间步的矩阵乘加次数估算:隐藏自环 n²,输入投影 n×d,三个门控各做一组。
  1. 隐藏自环项隐层到隐层的状态传递矩阵计算量,对应 n×n。
    n2\displaystyle n^2
  2. 输入投影项输入向量到隐层的投影计算量,对应 n×d。
    n×d\displaystyle n \times d
  3. 三组门控重置门、更新门、候选状态各做一组变换。
    3(n2+n×d)\displaystyle 3(n^2 + n \times d)

工程部署优化

即使选定了 GRU,部署时还能进一步“瘦身”。第一招是量化:把默认的 float32 权重转成 int8,模型体积直接缩小到约四分之一,推理时整数运算比浮点运算快得多。GRU 因为参数量少、冗余也少,量化后的精度损失通常小于同规模的 LSTM——精简的行李更好打包。

第二招是剪枝:重置门和更新门的权重矩阵里,绝对值很小的连接对输出影响微乎其微,可以剪掉变成 0,再配合稀疏计算库加速。第三招是知识蒸馏:训练一个更大的 LSTM 当“老教师”,用它的软标签去教小 GRU 学生。学生参数虽少,学到的知识密度却高——就像资深保安把自己的经验浓缩成一本小册子传给新人。

训练侧的技巧同样重要:GRU 对学习率敏感,建议用 1e-3 量级的 Adam 起步;隐藏维度常从 64 到 256 之间搜索;层数超过两到三层后收益递减,反而增加过拟合风险。输入序列过长时,配合双向 GRU 或注意力机制会更稳。精简的行囊,从来不是将就,而是把力气花在刀刃上。

SIZEint8SIZEfp32=14\displaystyle \frac{\text{SIZE}_{\text{int8}}}{\text{SIZE}_{\text{fp32}}} = \frac{1}{4}
int8 量化后每个参数从 4 字节降到 1 字节,参数个数不变时模型体积恰好变为原来的四分之一。
  1. 位宽变化float32 降到 int8,每个参数占用字节从 4 变为 1。
    1 字节4 字节=14\displaystyle \frac{1\text{ 字节}}{4\text{ 字节}} = \frac{1}{4}
  2. 体积比值参数量固定时,模型大小随位宽线性缩放。
    SIZEint8SIZEfp32=14\displaystyle \frac{\text{SIZE}_{\text{int8}}}{\text{SIZE}_{\text{fp32}}} = \frac{1}{4}

AI 应用场景

手机输入法联想预测

阶段:推理部署

解决的问题:传统云端联想词方案存在网络延迟高、用户隐私泄露风险、断网不可用等痛点。GRU 模型体积小、单步计算少,可以完整驻留在手机内存中,实现毫秒级响应的本地联想。

具体案例:用户输入“今天”二字,输入法内的 GRU 根据前文语境快速给出“天气”“加班”“开会”等候选词。每敲一个键,模型只做三组矩阵乘加,耗时小于 10ms,功耗控制在毫瓦级,且词库学习完全在端侧完成。

智能音箱唤醒词检测

阶段:边缘推理

解决的问题:音箱需要全天候监听音频流,传统云方案无法实时响应,而 LSTM 在嵌入式芯片上算力开销偏高。GRU 参数量少、每帧推理省 1/4 计算量,非常适合低功耗 DSP 或 NPU 环境。

具体案例:某智能音箱在 Cortex-M 级芯片上部署两层 GRU,每帧 20ms 音频送入模型判断是否为唤醒词。量化到 int8 后模型仅占几百 KB,整机待机功耗降低 30%,误唤醒率控制在每 24 小时一次以内。

工业传感器异常预警

阶段:时序预测与异常检测

解决的问题:人工设定阈值报警往往滞后且难以适应工况变化。GRU 能学习传感器序列的正常演化模式,通过预测残差大小判断设备是否出现早期故障。

具体案例:某工厂在旋转机械上部署 GRU 模型,输入过去 60 秒的振动与温度数据,预测下一秒读数。当预测残差连续超过 3 个标准差时触发检修提醒,提前 48 小时发现了轴承磨损隐患,避免了非计划停机。

Python 演示

python41 行
import numpy as np  def sigmoid(x):    return 1.0 / (1.0 + np.exp(-x))  class GRUCell:    def __init__(self, input_dim, hidden_dim):        rng = np.random.default_rng(42)        self.hidden_dim = hidden_dim        self.Wr = rng.normal(0, 0.1, (input_dim, hidden_dim))        self.Ur = rng.normal(0, 0.1, (hidden_dim, hidden_dim))        self.br = np.zeros(hidden_dim)        self.Wz = rng.normal(0, 0.1, (input_dim, hidden_dim))        self.Uz = rng.normal(0, 0.1, (hidden_dim, hidden_dim))        self.bz = np.zeros(hidden_dim)        self.Wh = rng.normal(0, 0.1, (input_dim, hidden_dim))        self.Uh = rng.normal(0, 0.1, (hidden_dim, hidden_dim))        self.bh = np.zeros(hidden_dim)     def forward(self, x, h):        r = sigmoid(x @ self.Wr + h @ self.Ur + self.br)        z = sigmoid(x @ self.Wz + h @ self.Uz + self.bz)        h_bar = np.tanh(x @ self.Wh + (r * h) @ self.Uh + self.bh)        h_new = (1 - z) * h + z * h_bar        return h_new, r, z  def main():    cell = GRUCell(input_dim=1, hidden_dim=4)    h = np.zeros(cell.hidden_dim)    seq = [0.1, 0.2, 0.3, 2.0, 0.4, 0.1, -0.2]    print("step input reset update")    for i, x in enumerate(seq):        h, r, z = cell.forward(np.array([x]), h)        print("%4d %5.1f %.3f %.3f" % (i, x, r.mean(), z.mean()))  if __name__ == "__main__":    main()
目的:用 NumPy 从零实现一个 GRU 单元的前向计算,观察输入出现突变时重置门和更新门如何自动调节开度。
  1. r = sigmoid(x @ self.Wr + h @ self.Ur + self.br)重置门:融合新输入与旧状态,输出 0~1 筛选比例
  2. z = sigmoid(x @ self.Wz + h @ self.Uz + self.bz)更新门:同样经过 sigmoid,输出新旧信息分配权重
  3. h_bar = np.tanh(x @ self.Wh + (r * h) @ self.Uh + self.bh)候选状态:用 r 过滤后的旧记忆配合当前输入写“草稿”
  4. h_new = (1 - z) * h + z * h_bar最终隐藏状态:新旧互补加权合成
  5. seq = [0.1, 0.2, 0.3, 2.0, 0.4, 0.1, -0.2]制造一个 2.0 的突变信号,测试门控响应
  6. h, r, z = cell.forward(np.array([x]), h)按时间步逐个处理输入,隐藏状态在步与步之间传递

常见误区

误区LSTM 有四个门,GRU 只有两个门,少了一半控制能力,效果肯定打折。所以做项目时只要数据允许,无脑上 LSTM 更保险。

正解在相同参数量或相同隐藏维度下,GRU 与 LSTM 的精度在绝大多数任务上基本打平。两人保安组虽然人手少,但把“遗忘”和“输入”合并成一个更新门后,决策更简洁、参数更少,反而带来轻微正则化效果,在小数据集上往往优于 LSTM。LSTM 的优势只在数据量极大、算力充裕、需要精细输出控制时才明显。

为何常见:人们习惯把“门多”等同于“能力强”,忽略了门控之间大量冗余,也低估了参数量减少带来的训练稳定性和泛化收益。

误区LSTM 有遗忘门和输入门,GRU 的更新门既然名字里有“更新”,那它应该只负责把新信息写进来,旧信息的删除由重置门负责。

正解更新门 z_t 同时控制“遗忘”与“写入”,它是新旧两部分的互补权重:z_t 接近 1 时新候选占主导,接近 0 时旧状态原样保留。它不是一个单向的“输入开关”,而是一个分配比例的旋钮。重置门也不负责删旧记忆,它只影响候选状态如何利用旧记忆。

为何常见:大家习惯用 LSTM 的三门控框架去套 GRU,把“更新”望文生义地理解成“输入”,忽视了 GRU 合并门控后语义已经发生变化。

误区重置门 r_t 数值小,就代表把旧记忆删掉;数值大,就代表旧记忆全部保留。它只是简单的一键清空工具。

正解重置门真正的作用是调制候选状态的计算——它逐元素决定旧记忆中有多少参与“写草稿”。r_t 小意味着候选状态主要靠当前输入生成,而不是说旧记忆被永久删除;旧信息仍然可能通过 (1-z_t) ⊙ h_{t-1} 这条路径留在最终隐藏状态里。所以重置门控制的是“旧记忆对新草稿的影响”,而不是“旧记忆本身的存亡”。

为何常见:初学者把“重置”联想成“清空”,忽略了 GRU 中遗忘路径是由更新门承担的职责分配。

误区sigmoid 输出的值是 0 或 1,模型要么完全保留旧状态,要么完全换成新状态,不存在中间态。

正解sigmoid 是软门控,输出是一个连续的 (0,1) 区间实数。0.7 的更新门意味着约 70% 采纳新候选、30% 保留旧状态。正是这种可微的连续性,梯度才能通过门控反向传播;如果换成硬 0/1 开关,门控处梯度为 0,网络将无法训练。

为何常见:人们常用“开关门”的直觉理解门控,忽略了神经网络里所有函数都要求连续可微这个基本约束。

面试题

Q1. GRU 中重置门的主要职责是什么?

单选题 · easy

  • A.决定新信息写入多少比例
  • B.决定旧记忆与当前输入的混合度← 正确答案
  • C.控制输出到下一层的隐藏信息量
  • D.直接计算最终隐藏状态的具体值

答案:B。重置门 r_t 决定旧隐藏状态 h_{t-1} 有多大比例参与候选状态的计算,本质是调节旧记忆与当前输入的混合程度。选项 A 是更新门的职责,选项 C 对应 LSTM 的输出门,选项 D 是候选状态与更新门共同完成的整体更新。就像保安决定“翻旧卷宗用几分力”。

Q2. GRU 更新门 z_t 接近 0 时,隐藏状态的变化趋势是?

单选题 · easy

  • A.几乎完全保留上一时刻隐藏状态← 正确答案
  • B.全部替换为新的候选隐藏状态
  • C.重置为零向量不再传递任何信息
  • D.直接复制当前输入 x_t 不作加工

答案:A。h_t = (1-z_t)⊙h_{t-1} + z_t⊙h̃_t,当 z_t 接近 0 时 h_t ≈ h_{t-1},相当于保安把旧台账原样传给下一班。B 对应 z_t 接近 1 的情形,C 和 D 与 GRU 更新公式不符。

Q3. sigmoid 激活函数在 GRU 门控中的作用是?

单选题 · easy

  • A.将线性变换结果压缩到 0 和 1 之间← 正确答案
  • B.将特征变换到以零为中心的对称范围
  • C.对梯度进行缩放防止数值爆炸
  • D.将向量映射到更高维空间增加表达力

答案:A。sigmoid 输出范围是 (0,1),恰好适合表示门控开度。B 描述的是 tanh 的作用,C 是梯度裁剪的功能,D 是维度变换的笼统说法。软门控之所以选择 sigmoid,正是因为它的连续可微性让梯度能穿过门控传播。

Q4. LSTM 的遗忘门与输入门在 GRU 中被合并成为?

单选题 · mid

  • A.重置门负责筛选旧记忆的保留程度
  • B.更新门负责新旧信息的比例分配← 正确答案
  • C.输出门负责对外信息的暴露程度
  • D.候选门负责生成临时的状态草案

答案:B。GRU 的更新门用 (1-z_t)⊙h_{t-1} + z_t⊙h̃_t 一条公式同时完成 LSTM 中遗忘门“删多少”和输入门“写多少”的工作。重置门负责的是候选状态里旧记忆的筛选,不承担新旧比例分配。两人班组把三人的活合并成一张表,正是 GRU 精简的本质。

Q5. 候选状态计算中 r_t ⊙ h_{t-1} 的含义是?

单选题 · mid

  • A.将旧记忆每个维度按重置门放行← 正确答案
  • B.将新输入与旧记忆直接相加融合
  • C.将重置门整体替换为旧记忆状态
  • D.将候选状态缩放到负一到正一区间

答案:A。⊙ 是逐元素乘法,r_t 的每个分量决定 h_{t-1} 对应维度是否参与候选状态生成。B 描述的是拼接加权而非逐元素门控,C 与公式完全相反,D 是 tanh 的作用。重置门像在旧台账上逐行盖章,盖了章的条目才有资格进草稿。

Q6. GRU 减少参数量的根本原因是?

单选题 · mid

  • A.权重矩阵从四组减少到三组← 正确答案
  • B.隐藏维度比 LSTM 设置得更小
  • C.输入向量被降维后再进入门控
  • D.用卷积层替代了全部的矩阵乘法

答案:A。LSTM 有四组门控权重(遗忘、输入、候选、输出),GRU 只有三组(重置、更新、候选),这才是参数量变为约 3/4 的根本原因。B、C 是外部超参数调整,D 是错误的架构描述。精简不是靠压缩维度,而是靠减少门控组数。

Q7. 更新门 z_t 接近 1 时,梯度回传主要经过哪条路径?

单选题 · hard

  • A.经由候选状态及其权重矩阵的路径← 正确答案
  • B.经由恒等捷径直接复制旧记忆
  • C.经由重置门对输入扰动的放大效应
  • D.经由输出门对外部状态的映射通道

答案:A。z_t 接近 1 时 h_t ≈ h̃_t,梯度主要沿候选状态计算链回传,经历 W_h 等权重矩阵。B 是 z_t 接近 0 时 (1-z_t) 恒等捷径占主导的情形,C 与梯度主路径无关,D 是 LSTM 的结构。理解两条路径的竞争关系,是分析 GRU 梯度流动的关键。

Q8. GRU 与 LSTM 在相同隐藏维度下,单步计算量约为 LSTM 的?

单选题 · hard

  • A.大约为 LSTM 的四分之三← 正确答案
  • B.正好是 LSTM 的二分之一
  • C.与 LSTM 保持完全一致
  • D.约是 LSTM 的三分之二倍

答案:A。每步计算量与门控组数成正比,LSTM 四组、GRU 三组,因此单步 FLOPs 约为 LSTM 的 3/4。这个比例由结构决定,与隐藏维度大小无关。算力优势在手机、音箱等资源受限设备上会直接转化为更低的功耗和更快的响应。

Q9. 下列哪些关于 GRU 更新门作用的描述是正确的?

多选题 · mid

  • A.更新门接近零时保留更多旧记忆信息← 正确答案
  • B.更新门接近一时采纳更多新候选信息← 正确答案
  • C.更新门与一减更新门构成互补权重← 正确答案
  • D.更新门决定输出词表的具体候选集合

答案:ABC。由 h_t = (1-z_t)⊙h_{t-1} + z_t⊙h̃_t 可知,z_t 接近 0 时旧记忆占主导,接近 1 时新候选占主导,(1-z_t) 与 z_t 之和恒为 1,三者均正确。D 描述的“输出词表”属于输出层 softmax 的职责,与门控无关。

Q10. 关于 GRU 的工程部署优化,下列说法正确的有?

多选题 · hard

  • A.int8 量化可将权重体积压缩为约四分之一← 正确答案
  • B.剪枝可以移除门控矩阵中的冗余连接← 正确答案
  • C.蒸馏可以用大模型训练轻量的小型 GRU← 正确答案
  • D.GRU 推理必须依赖云端 GPU 才能完成

答案:ABC。float32 转 int8 后每参数从 4 字节降为 1 字节,体积变为 1/4;剪枝把权重矩阵中绝对值小的连接置零,配合稀疏库加速;知识蒸馏用大 LSTM 当老师教小 GRU 学生,均是正确的部署优化手段。D 错误——GRU 恰恰因为轻量,广泛部署在手机和嵌入式芯片上,无需云端 GPU。