简单RNN在处理长序列时会遇到困难,因为在随时间反向传播过程中梯度可能消失或爆炸。LSTM引入了门控机制,正是为解决此问题而设。这些门像是调节器,仔细控制信息如何流入、流经和流出LSTM的核心记忆部件——细胞状态。这些重要的调节器之一就是输入门。它的作用是决定从当前输入($x_t$)和前一个隐藏状态($h_{t-1}$)中,哪些新信息应该被存入细胞状态($C_t$)。它并非独立运作;它与遗忘门(遗忘门决定从旧细胞状态中舍弃什么)一同工作,以有效管理细胞的记忆。输入门的决策过程包含两个主要部分:决定更新哪些值: 首先,一个sigmoid层决定细胞状态的哪些部分应该被更新。sigmoid函数,常用$\sigma$表示,将其输入压缩到0到1的范围。一个接近1的值表示“允许此信息通过”,而一个接近0的值表示“阻止此信息”。该层接收前一个隐藏状态($h_{t-1}$)和当前输入($x_t$),并生成一个输出向量,我们称之为$i_t$。计算公式如下: $$ i_t = \sigma(W_i \cdot [h_{t-1}, x_t] + b_i) $$ 这里,$[h_{t-1}, x_t]$ 表示前一个隐藏状态与当前输入向量的拼接。$W_i$是权重矩阵,$b_i$是专门用于输入门这一部分的偏置向量。sigmoid函数($\sigma$)是逐元素应用的。$i_t$中的每个元素都对应于细胞状态中的一个元素,作为该特定元素的过滤器或门值。生成候选值: 同时,一个tanh层生成一个新候选值向量,记作$\tilde{C}t$(读作“C-tilde sub t”)。这些是可能被添加到细胞状态的潜在值。与sigmoid层类似,该层也使用前一个隐藏状态($h{t-1}$)和当前输入($x_t$)。tanh激活函数将其输入压缩到-1到1的范围。计算公式如下: $$ \tilde{C}t = \tanh(W_C \cdot [h{t-1}, x_t] + b_C) $$ 同样,$W_C$和$b_C$是针对这个特定层的权重矩阵和偏置向量。输出$\tilde{C}_t$表示从当前输入和前一个语境中提取的新信息,其值缩放到-1到1之间。可以将$i_t$看作看门人,决定每个潜在的新信息片段($\tilde{C}_t$)有多少应该被实际考虑加入记忆。$\tilde{C}_t$包含潜在的更新,而$i_t$包含用于缩放这些候选值的过滤值(介于0和1之间)。digraph G { rankdir=LR; node [shape=box, style="rounded,filled", fontname="helvetica", margin=0.2, color="#495057", fillcolor="#e9ecef"]; edge [fontname="helvetica", color="#495057"]; subgraph cluster_input_gate { label = "输入门计算"; bgcolor="#f8f9fa"; color="#adb5bd"; style=rounded; fontname="helvetica"; xt [label="输入 x_t", shape=ellipse, fillcolor="#ced4da"]; ht_1 [label="前一个隐藏状态 h_{t-1}", shape=ellipse, fillcolor="#ced4da"]; concat [label=<[h<SUB>t-1</SUB>, x<SUB>t</SUB>]>, shape=box, style=dashed, color="#868e96"]; sigmoid_node [label=<σ<BR/><FONT POINT-SIZE="10">门激活</FONT>>, fillcolor="#a5d8ff", shape=rectangle]; tanh_node [label=<tanh<BR/><FONT POINT-SIZE="10">候选值</FONT>>, fillcolor="#96f2d7", shape=rectangle]; it [label="门输出 i_t", shape=ellipse, fillcolor="#ced4da"]; Ct_tilde [label=<候选 Č<SUB>t</SUB>>, shape=ellipse, fillcolor="#ced4da"]; {xt, ht_1} -> concat [arrowhead=none]; concat -> sigmoid_node [label=< <I>W</I><SUB>i</SUB>, <I>b</I><SUB>i</SUB> >]; sigmoid_node -> it; concat -> tanh_node [label=< <I>W</I><SUB>C</SUB>, <I>b</I><SUB>C</SUB> >]; tanh_node -> Ct_tilde; // Output stage (for context) output_node [label=<i<SUB>t</SUB> * Č<SUB>t</SUB><BR/><FONT POINT-SIZE="10">用于细胞状态更新</FONT>>, shape=box, style=dashed, color="#868e96"]; it -> output_node [style=dashed, color="#868e96"]; Ct_tilde -> output_node [style=dashed, color="#868e96"]; } }该图显示了输入门的两个组成部分。它接收当前输入($x_t$)和前一个隐藏状态($h_{t-1}$),通过并行的sigmoid和tanh层进行处理,并生成门激活($i_t$)和候选值($\tilde{C}_t$)。然后将它们逐元素结合($i_t * \tilde{C}_t$),形成用于细胞状态的更新信息。连接输入门与细胞状态的重要一步,涉及将这两个层的输出进行组合。这通常通过逐元素乘法完成:$i_t * \tilde{C}_t$。这个乘积表示经过过滤的候选值,即经过输入门选择和缩放的新信息。这个结果向量($i_t * \tilde{C}t$)被添加到(适当遗忘的)前一个细胞状态$C{t-1}$,以形成新的细胞状态$C_t$。我们将在下一节讨论更新细胞状态时,详细考察这个加法过程。目前,重要的是输入门提供了选择性地将新信息整合到LSTM记忆中的机制。