RNN之内

RNN

RNN(循环神经网络)其实核心思想很简单:普通的神经网络每次处理数据都是独立的、互不相关的,而RNN会把”记忆”从上一步传递到下一步,这样就能处理像句子、语音、时间序列这种有先后顺序的数据。

几个关键点帮你理解:

1. 核心机制 每个时间步都会接收两样东西:当前的输入(比如句子里的一个词),以及上一步传下来的”隐藏状态”(可以理解成到目前为止的”记忆”)。它把两者结合,算出新的隐藏状态,再传给下一步。

2. 参数共享 虽然图里画了三个”RNN单元”,但它们其实是同一组参数,只是在不同时间步被重复使用。这和普通神经网络每一层参数都不同不一样。

3. 为什么适合处理序列 因为隐藏状态会不断累积之前的信息,所以RNN理论上能”记住”前面发生过的事情,适合处理文本、语音、股价这类前后有关联的数据。

4. 它的短板 当序列很长时,早期的信息在一路传递中会逐渐”稀释”甚至消失,这叫梯度消失问题,导致RNN很难记住很久以前的内容。后来的LSTM、GRU、以及现在更流行的Transformer,很大程度上就是为了解决这个问题而设计的。

RNN是一种能处理序列数据的神经网络,它在处理每个时间步的输入时,会把上一步的隐藏状态也当作输入,这样就能把之前的信息’记住’并传递下去。所有时间步共享同一组参数。但当序列太长时,早期信息会因为梯度消失而被遗忘,这也是后来LSTM和Transformer出现的原因之一。

门控机制

LSTM和GRU都是为了解决RNN的”梯度消失、记不住远处信息”这个问题而设计的,核心思路是给网络加上”门控机制“——让网络自己学会该记住什么、该忘记什么、该输出什么,而不是像普通RNN那样把所有信息不加区分地揉在一起。

LSTM(长短期记忆网络)

LSTM在普通RNN的隐藏状态之外,又加了一条细胞状态(cell state)——你可以把它想象成一条”传送带”,信息可以在上面几乎不变地一路流过去,这就是它能记住远处信息的关键。而三个”门”负责控制这条传送带上的信息该怎么增减:

  • 遗忘门:看当前输入和上一步的隐藏状态,决定细胞状态里哪些旧信息该”忘掉”(输出0~1之间的值,乘上去,越接近0丢得越多)
  • 输入门:决定这一步的新信息里,哪些该”写进”细胞状态
  • 输出门:决定细胞状态里的内容,有多少该”暴露”出来作为这一步的隐藏状态/输出

每个门本质上都是一个小型的神经网络层(sigmoid函数,输出0~1的”开关程度”),用当前输入和上一步的隐藏状态一起算出来。

GRU(门控循环单元)

GRU可以理解成LSTM的”简化版”:它把遗忘门和输入门合并成一个更新门,又去掉了单独的细胞状态,只保留一个隐藏状态来同时承担”记忆”和”输出”的功能。它还有一个重置门,决定要在多大程度上忽略过去的隐藏状态。

GRU vs LSTM 的实际区别:

  • GRU参数更少、结构更简单,训练更快
  • 在很多任务上两者效果相近,没有绝对的谁更好
  • 数据量小或者想要更快训练时,GRU常是不错的选择;任务复杂、需要更精细记忆控制时,LSTM可能更有优势

一句话总结这三者的关系:普通RNN直接把新旧信息糅在一起,容易”忘事”;LSTM用三个门+独立的细胞状态精细控制记忆的读写;GRU则是用更少的门实现了类似的效果,是效率和效果之间的一个折中。

Transformer

RNN系列(包括LSTM、GRU)和Transformer最根本的区别在于:RNN是”按顺序一步步处理”,Transformer是”一次性全部看到、并行计算”。这个区别带来了一连串连锁影响。

1. 处理方式:串行 vs 并行 RNN/LSTM/GRU必须一步一步算,第2步要等第1步算完才能开始,所以训练和推理都比较慢,没法充分利用GPU的并行计算能力。Transformer把整个序列一次性输入,所有位置同时计算,训练速度大大提升。

2. 长距离依赖的处理 RNN系列即便有门控机制,信息从很远的位置传到当前位置,还是要经过很多步的”传递”,难免有损耗。Transformer里任意两个位置之间都是直接计算关联度(也就是”注意力”),不管隔多远,理论上都是”一步到位”,所以更擅长捕捉长距离的关系。

3. 位置信息的处理方式不同 RNN天生就是按顺序处理的,顺序信息是内置的。Transformer因为是并行处理、没有天然的顺序概念,所以需要额外加入”位置编码”人为告诉模型每个词的位置。

4. 计算复杂度 RNN处理一个长度为n的序列,复杂度大致是O(n)(线性,一步步来)。Transformer的自注意力机制是每个词都要和其他所有词计算关联度,复杂度是O(n²)——序列越长,计算量增长得越快,这也是Transformer处理超长文本时的一个负担(后来出现了很多优化方案,比如稀疏注意力等)。

5. 现状 正因为并行效率高、长距离建模能力强,Transformer目前已经成为NLP、大语言模型(包括我自己)的主流架构,RNN/LSTM/GRU在很多场景中已经被取代,不过在一些资源受限、需要处理超长实时流数据的场景里,它们依然有自己的用武之地。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇