Roxy's Library

Back

Recurrent Neural Network(RNN)#

RNN 是一类专为序列数据设计的神经网络,引入了循环连接,让网络在处理当前输入时,能够携带之前步骤的信息

rnn

其内部函数可以描述为:

ht=fW(ht1,xt)yt=gW(ht)h_t = f_W(h_{t-1}, x_t) \quad y_t = g_W(h_t)

其中 hth_t 是当前时间步的隐藏状态,ht1h_{t-1} 是前一个时间步的隐藏状态,xtx_t 是当前输入,fWf_WgWyg_{W_y} 是参数为 WWWyW_y 的非线性函数,yty_t 是当前时间步的输出

RNN 展开后的结构如下图所示: unfolded_rnn

初始状态 h0h_0 可以是一个全零向量

Vanilla RNN#

最初始的 RNN

ht=tanh(Whhht1+Wxhxt+bh)yt=Whyht+byh_t = \tanh(W_{hh} h_{t-1} + W_{xh} x_t + b_h) \quad y_t = W_{hy} h_t + b_y

最简单的一个字母级预测模型,每次预测一个字母 vanilla_rnn

对于每个输出可以计算一个Loss,最后把所有Loss加起来进行反向传播

vanilla_rnn_unfolded 红色箭头为反向传播的路径,可以看到在反向传播过程中,靠前的时间步需要计算更多次的梯度乘积

解决方法:Truncated BP,太长的序列只反向传播有限的时间步

我们使用RNN进行文本生成时,对于每一步输出的向量,我们可以通过softmax函数将其转换为概率分布,然后根据这个概率分布来选择输出的token

Sample Strategy:输出时如何选取合适的token

  • Greedy sampling:每次选择概率最高的token作为输出
  • Weighted sampling:根据概率分布随机选择token作为输出
  • Beam search:每次选择概率最高的k个token作为输出,以此为基础继续扩展
  • Exhaustive Search:枚举所有可能的输出序列,从中选择概率最高的完整序列(复杂度太高)
P(yx)=t=1TP(yty<t,x)P(y|x) = \prod_{t=1}^T P(y_t|y_{<t}, x)

梯度消失问题:由于距离较远的梯度信号比距离较近的梯度信号小得多,因此发生了丢失,模型的权重只针对近效应进行更新,而不是长期效应。

因此理论上 RNN 的 context 是无限长的,但实际上根本学不出来

RNN 优点:

  • 可以处理任何长度的输入
  • 步骤 t 的计算(理论上)可以使用许多步之前的信息
  • 模型大小不会因输入更长而增加
  • 在每个时间步上应用相同的权重,因此输入处理方式是等变的

RNN 缺点:

  • 循环计算很慢
  • 在实践中,很难从许多步骤前获取信息

Long-Short Term Memory(LSTM)#

改变 RNN 的结构来一定程度上解决梯度消失问题

回顾 Vanilla RNN 的计算公式:

ht=tanh(Whhht1+Wxhxt+bh)h_t = \tanh(W_{hh} h_{t-1} + W_{xh} x_t + b_h)

tanhtanh求导后小于11,因此在反向传播过程中,梯度会不断乘以一个小于1的数,导致梯度逐渐变小,最终消失。我们认为这里保存的是短期记忆,所以很容易忘掉;需要一种能保存长期记忆的机制

LSTM 引入了一个新的状态 ctc_t,称为细胞状态(cell state),它可以看作是一个长期记忆的载体,引入门控机制来控制信息的流动:

lstm

LSTM 的计算公式如下:

it=σ(Whiht1+Wxixt+bi)ft=σ(Whfht1+Wxfxt+bf)ot=σ(Whoht1+Wxoxt+bo)gt=tanh(Whght1+Wxgxt+bg)ct=ftct1+itgtht=ottanh(ct)\begin{aligned} i_t &= \sigma(W_{hi} h_{t-1} + W_{xi} x_t + b_i) \\ f_t &= \sigma(W_{hf} h_{t-1} + W_{xf} x_t + b_f) \\ o_t &= \sigma(W_{ho} h_{t-1} + W_{xo} x_t + b_o) \\ g_t &= \tanh(W_{hg} h_{t-1} + W_{xg} x_t + b_g) \\ c_t &= f_t \odot c_{t-1} + i_t \odot g_t \\ h_t &= o_t \odot \tanh(c_t) \end{aligned}
  • i: Input gate, Whether to write to cell
  • f: Forget gate. Whether to erase cell
  • o: Output gate, How much to reveal cell
  • g: Gate gate (?), How much to write to cell

LSTM 也不能完全解决梯度消失问题,但其类似于 skip link 的结构很好的缓解了这个问题

Sequential Models
https://astro-pure.js.org/blog/cvintro_05_13
Author GreyRat
Published at May 15, 2026
Comment seems to stuck. Try to refresh?✨