GRU 中的两个门都控制信息流动,但重置门扮演着一个具体而重要的角色:它决定在计算新的候选隐藏状态 ($\tilde{h}t$) 时,应忽略或“重置”多少由前一个隐藏状态 ($h{t-1}$) 携带的过去信息。可以把它看作是一个过滤器,用于决定过去背景信息对提议更新的记忆状态的关联度。计算重置门激活值像更新门一样,重置门的激活值,记为 $r_t$,是根据当前输入 $x_t$ 和前一个隐藏状态 $h_{t-1}$ 计算的。它使用 sigmoid 激活函数,确保其输出值在 0 到 1 之间。该计算涉及学习单独的权重矩阵 ($W_{xr}$ 和 $W_{hr}$) 和一个偏置项 ($b_r$):$$ r_t = \sigma(W_{xr} x_t + W_{hr} h_{t-1} + b_r) $$这里:$x_t$ 是当前时间步 $t$ 的输入向量。$h_{t-1}$ 是前一时间步 $t-1$ 的隐藏状态向量。$W_{xr}$ 是连接输入到重置门的权重矩阵。$W_{hr}$ 是连接前一个隐藏状态到重置门的权重矩阵。$b_r$ 是重置门的偏置项。$\sigma$ 代表 sigmoid 激活函数,$\sigma(z) = 1 / (1 + e^{-z})$。输出 $r_t$ 是一个与隐藏状态维度相同的向量。 $r_t$ 中的每个元素对应隐藏状态的一个维度,充当该特定维度的门控值。重置门如何调整信息重置门向量 $r_t$ 中的值直接控制着在计算候选隐藏状态 $\tilde{h}t$ 时前一个隐藏状态 $h{t-1}$ 的影响。 $r_t$ 中某个特定维度接近 0 的值会有效地“重置”或抵消 $h_{t-1}$ 中相应维度的贡献。相反,接近 1 的值则允许前一个隐藏状态的该部分基本不变地通过。这种机制通过重置门 $r_t$ 与前一个隐藏状态 $h_{t-1}$ 之间的逐元素乘法 ($\odot$) 实现。这种被调整过的先前状态随后用于计算候选隐藏状态:$$ \tilde{h}t = \tanh(W{xh} x_t + W_{hh} (r_t \odot h_{t-1}) + b_h) $$请注意 $r_t \odot h_{t-1}$ 如何准确地决定前一个状态 $h_{t-1}$ 的哪些部分与当前输入 $x_t$ 结合以形成候选状态 $\tilde{h}t$。如果 $r_t$ 中的一个元素为 0,则 $h{t-1}$ 中对应的元素在 $\tanh$ 函数内部的加权和之前被有效地清零。digraph G { rankdir=LR; node [shape=rect, style="filled", fontname="sans-serif", fillcolor="#e9ecef"]; edge [fontname="sans-serif"]; subgraph cluster_input { label = "输入"; style=filled; color="#dee2e6"; ht_1 [label="h_{t-1}", shape=oval, fillcolor="#a5d8ff"]; xt [label="x_t", shape=oval, fillcolor="#b2f2bb"]; } subgraph cluster_reset { label = "重置门计算"; style=filled; color="#dee2e6"; WxR [label="W_{xr}", shape=invhouse, fillcolor="#ffec99"]; WhR [label="W_{hr}", shape=invhouse, fillcolor="#ffec99"]; bR [label="b_r", shape=circle, fillcolor="#ffec99"]; sumR [label="+", shape=circle, fillcolor="#ffc9c9"]; sigmaR [label="σ", shape=circle, fillcolor="#fcc2d7"]; rt [label="r_t", shape=oval, fillcolor="#eebefa"]; } subgraph cluster_candidate { label = "候选状态计算"; style=filled; color="#dee2e6"; WhH [label="W_{hh}", shape=invhouse, fillcolor="#ffd8a8"]; WxH [label="W_{xh}", shape=invhouse, fillcolor="#ffd8a8"]; bH [label="b_h", shape=circle, fillcolor="#ffd8a8"]; odot [label="⊙", shape=circle, fillcolor="#ffc9c9"]; sumH [label="+", shape=circle, fillcolor="#ffc9c9"]; tanhH [label="tanh", shape=circle, fillcolor="#d0bfff"]; htilde [label="~h_t", shape=oval, fillcolor="#bac8ff"]; } xt -> WxR [label="乘以 W_{xr}"]; ht_1 -> WhR [label="乘以 W_{hr}"]; WxR -> sumR; WhR -> sumR; bR -> sumR; sumR -> sigmaR; sigmaR -> rt; rt -> odot [label=""]; ht_1 -> odot [label=""]; odot -> WhH [label="乘以 W_{hh}"]; xt -> WxH [label="乘以 W_{xh}"]; WhH -> sumH; WxH -> sumH; bH -> sumH; sumH -> tanhH; tanhH -> htilde; }此图展示了重置门 $r_t$ 的计算过程,及其与前一个隐藏状态 $h_{t-1}$ 的逐元素乘法 ($\odot$) 如何影响候选隐藏状态 $\tilde{h}_t$。重置门的意义重置门赋予 GRU 单元动态调整提议的新状态 ($\tilde{h}t$) 对紧邻的过去状态 ($h{t-1}$) 依赖程度的能力。如果当前输入 $x_t$ 表明与 $h_{t-1}$ 中编码的内容相比,背景或主题发生了显著变化,重置门可以学习激活接近 0。这有效地让单元在计算候选状态时“重新开始”,更多地侧重于当前输入 $x_t$,而不是将其与可能不相关的过去信息混合。例如,在语言建模中,如果网络遇到句子的结尾(可能由 $x_t$ 中的标点符号表示),重置门可能会强烈激活(值接近 0),以减少前一个句子的隐藏状态在计算下一个句子开头候选状态时的影响。总之,重置门充当一个控制器,在计算候选隐藏状态之前选择性地减弱前一个隐藏状态的某些部分。这使得 GRU 能够有效地忘记对紧邻下一步被认为不相关的信息,有助于其处理时间依赖的能力。