循环神经网络 RNN 是什么?带“记忆”处理序列数据的神经网络
循环神经网络(Recurrent Neural Network,RNN)是一种适合处理序列数据的神经网络。序列数据是指有先后顺序的数据,比如一句话中的词、一段语音的声音帧、股票价格的时间序列。RNN 的特点是网络中有循环的连接,能把之前时刻的信息传递到当前时刻,相当于有了“记忆”。它的概念可以追溯到 Michael I. Jordan 在 1986 年提出的网络,Jeffrey L. Elman 在 1990 年提出了更简洁的结构,形成了今天常见的简单 RNN,也称 Elman 网络。
它是怎么工作的
普通的前馈神经网络,每次处理一个输入,输入之间相互独立,没有记忆。而理解一句话时,每个词的含义都依赖前面的词。RNN 通过一个“隐藏状态”来记住之前的信息:在处理序列的每一步,它同时接收当前的输入和上一步的隐藏状态,计算出新的隐藏状态,再由它产生当前的输出。新的隐藏状态又被传递到下一步。这样,序列前面的信息就能一步步地传递下去,影响后面的处理。可以把它想象成一个人读一句话:每读一个词,都会结合之前读到的内容来更新自己的理解。
RNN 在每一步使用的是同一组参数,所以无论序列多长,参数的数量都不变,能处理任意长度的序列。
梯度消失问题和 LSTM
简单 RNN 有一个严重的缺陷:难以记住很久以前的信息。训练时,误差信号需要沿着时间一步步地往回传,传得越远,信号越弱,最后几乎消失,这就是梯度消失问题;有时信号也会越来越大,导致梯度爆炸。结果是,RNN 很难学到序列中相隔很远的依赖关系,比如一篇文章开头提到的人物,在结尾处被再次提及。
1997 年,Hochreiter 和 Schmidhuber 提出了长短期记忆网络(LSTM),用“门”机制来控制信息的保留和遗忘:遗忘门决定丢掉哪些旧信息,输入门决定记住哪些新信息,输出门决定输出什么。这让网络能够在更长的时间跨度上保留重要信息。2014 年提出的门控循环单元(GRU)是一种结构更简单的变体。
今天的地位
在 2010 年代,基于 LSTM 的 RNN 是语音识别、机器翻译、文本生成等任务的主流模型。2017 年 Transformer 出现后,因为它能并行处理整个序列、更擅长捕捉长距离依赖,逐渐取代了 RNN 在大多数自然语言任务中的地位。不过,RNN 推理时占用的内存固定、速度快的优点依然很有吸引力,近年来的 RWKV、Mamba 等新架构,在某种程度上又回到了循环的思路,试图结合两者的优点。