RNN循环神经网络 #108

Open
opened 2024-09-19 19:03:04 +08:00 by GANGUAGUA · 0 comments

RNN,全称为循环神经网络(Recurrent Neural Network),是一种专门用于处理序列数据的神经网络。它在自然语言处理(NLP)、语音识别、时间序列分析等领域有着广泛的应用。RNN的核心特点是它能够处理输入数据之间的时间依赖关系,这使得它非常适合处理时间序列数据或者任何形式的序列化数据。

工作原理

RNN的工作原理是通过在网络中引入循环来保存前一个时间步的信息,并将这些信息传递到下一个时间步。这种循环结构允许网络在处理当前输入时考虑到之前输入的历史信息。

  • 比如 x1 x2 是输入的序列数据,那么首先先处理x1(具有前后关系), 那么x1作为输入层除了会得到相应的y1作为输出层,还会得到一个隐藏层a1,这个a1包含了x1的部分信息将给到y2的预测里,这样y2的结果除了跟x2有关系也会和前面的序列x1有一定的关系。(前部序列的信息经过处理后,将作为输入信息传递到后部序列。)

总之,RNN可以被看作是多个相同的神经网络模块串联起来,每个模块对应一个时间步,并且每个模块的输出会作为下一个模块的输入之一。

RNN的基本组成

RNN的基本组成包括:

  • 输入层:接收输入序列的数据。
  • 隐藏层:包含循环结构,负责存储和处理序列中的信息。
  • 输出层:产生序列的输出。

RNN的隐藏层通常包含一些状态变量,这些变量在序列的每个时间步被更新,以保存网络的内部状态。这种状态的更新是通过循环连接实现的,循环连接将隐藏层的输出反馈到自身作为下一个时间步的输入。

RNN常见结构

多输入单输出RNN结构

输入:x1, x2, x3, … xi

输出:y

应用:情感识别

举例:I feel happy watching the movie

判断:positive

单输入多输出RNN结构

输入:x

输出:y1, y2, y3, … yi

应用:序列数据生成器

举例:文章生成、音乐生成

多输入多输出RNN结构(输入输出维度相同)

输入:x1, x2, x3, … xi

输出:y1, y2, y3, … yi

应用:特定信息识别

多输入多输出RNN结构

输入:x1, x2, x3, … xi

输出:y1, y2, y3, … yi

*注意:i≠j

应用:语言翻译

举例:what is artificial intelligence?

判断:什么是人工智能?

RNN常见类型

  1. 单向RNN/普通RNN: 信息只在一个方向上流动,即从过去到未来。信息从前部序列流动到后部序列。

  2. 双向RNN (Bi-RNN) : 信息在两个方向上流动,网络可以同时考虑过去的信息和未来的信息。单向RNN是把前部序列信息传递到后部,双向RNN在做判断时不仅仅是把前部序列信息传递到后部,同时也会考虑后部序列的信息。

普通RNN/单向RNN结构缺陷:

  • 前部序列信息在传递到后部的同时,信息权重下降,导致重要信息丢失
  • 求解过程中梯度消失
  1. 长短期记忆网络 (LSTM):针对普通RNN的优化,用来解决标准RNN重要信息丢失以及梯度消失的问题。

LSTM 结构图

LSTM的门

  • 遗忘门:选择性丢弃ai-1与xi中不重要的信息
  • 更新门/输入门:确定给记忆细胞添加哪些信息
  • 输出门:筛选需要输出的信息
  1. 门控循环单元 (GRU):另一种特殊的RNN,它简化了LSTM的结构,但仍然能够有效地处理长距离依赖。

GRU 结构图

GRU的门

  • 更新门:确定给记忆细胞添加哪些信息;控制着旧状态与新状态之间的信息流动
  • 重置门:重置门决定了应该从当前隐藏状态中忘记多少信息。
  1. 深层循环神经网络 (DRNN): 解决更复杂的序列任务,可以把单层RNN叠起来或者在输出前和普通mlp结构结合使用。

__

尽管RNN在处理序列数据方面非常有效,但它们也有一些局限性,比如训练过程中的梯度消失和梯度爆炸问题,以及在处理非常长的序列时效率较低。这些问题在一定程度上限制了RNN在某些复杂任务中的应用。因此,研究人员和工程师经常使用更高级的模型,如Transformer,来解决这些问题。

RNN,全称为循环神经网络(Recurrent Neural Network),是一种专门用于处理序列数据的神经网络。它在自然语言处理(NLP)、语音识别、时间序列分析等领域有着广泛的应用。RNN的核心特点是它能够处理输入数据之间的时间依赖关系,这使得它非常适合处理时间序列数据或者任何形式的序列化数据。 ## 工作原理 RNN的工作原理是通过在网络中引入循环来保存前一个时间步的信息,并将这些信息传递到下一个时间步。这种循环结构允许网络在处理当前输入时考虑到之前输入的历史信息。 + 比如 x1 x2 是输入的序列数据,那么首先先处理x1(具有前后关系), 那么x1作为输入层除了会得到相应的y1作为输出层,还会得到一个隐藏层a1,这个a1包含了x1的部分信息将给到y2的预测里,这样y2的结果除了跟x2有关系也会和前面的序列x1有一定的关系。(前部序列的信息经过处理后,将作为输入信息传递到后部序列。) 总之,RNN可以被看作是多个相同的神经网络模块串联起来,每个模块对应一个时间步,并且每个模块的输出会作为下一个模块的输入之一。 ## RNN的基本组成 RNN的基本组成包括: + **输入层**:接收输入序列的数据。 + **隐藏层**:包含循环结构,负责存储和处理序列中的信息。 + **输出层**:产生序列的输出。 > RNN的隐藏层通常包含一些状态变量,这些变量在序列的每个时间步被更新,以保存网络的内部状态。这种状态的更新是通过循环连接实现的,循环连接将隐藏层的输出反馈到自身作为下一个时间步的输入。 > ## RNN常见结构 ![](https://cdn.nlark.com/yuque/0/2024/png/48118617/1726740409740-4bcb0053-24c3-4b74-9d8b-f2f60bb6f5d6.png) <details class="lake-collapse"><summary id="uac103f5b"><span class="ne-text">多输入单输出RNN结构</span></summary><p id="uefe88e5d" class="ne-p"><span class="ne-text" style="font-size: 14px">输入:x1, x2, x3, … xi</span></p><p id="u3e6d18e0" class="ne-p"><span class="ne-text" style="font-size: 14px">输出:</span><span class="ne-text" style="font-size: 14px">y</span></p><p id="ua1759643" class="ne-p"><span class="ne-text" style="font-size: 14px">应用:情感识别</span></p><p id="uf4fee550" class="ne-p"><span class="ne-text" style="font-size: 14px">举例:</span><span class="ne-text" style="font-size: 14px">I feel happy watching the movie</span></p><p id="ueee64f92" class="ne-p"><span class="ne-text" style="font-size: 14px">判断:positive</span></p></details> ![](https://cdn.nlark.com/yuque/0/2024/png/48118617/1726740483421-436a237c-6346-422f-8b06-fa794a1818f3.png) <details class="lake-collapse"><summary id="u2addc6b0"><span class="ne-text">单输入多输出RNN结构</span></summary><p id="uaf177c70" class="ne-p"><span class="ne-text" style="font-size: 14px">输入:x</span></p><p id="ub00e33ae" class="ne-p"><span class="ne-text" style="font-size: 14px">输出:</span><span class="ne-text" style="font-size: 14px">y1, y2, y3, … yi</span></p><p id="u7723f982" class="ne-p"><span class="ne-text" style="font-size: 14px">应用:序列数据生成器</span></p><p id="ued62fa97" class="ne-p"><span class="ne-text" style="font-size: 14px">举例:文章生成、音乐生成</span></p></details> ![](https://cdn.nlark.com/yuque/0/2024/png/48118617/1726740283138-e8791bdb-06de-4252-98ac-d5777990360e.png) <details class="lake-collapse"><summary id="u29f9e445"><span class="ne-text" style="font-size: 16px">多输入多输出RNN结构(输入输出维度相同)</span></summary><p id="uc875dbfa" class="ne-p"><span class="ne-text" style="font-size: 14px">输入:x1, x2, x3, … xi</span></p><p id="u94a4f522" class="ne-p"><span class="ne-text" style="font-size: 14px">输出:y1, y2, y3, … yi</span></p><p id="u68d2e9d1" class="ne-p"><span class="ne-text" style="font-size: 14px">应用:特定信息识别</span></p></details> ![](https://cdn.nlark.com/yuque/0/2024/png/48118617/1726740590808-667e527d-2221-4622-b787-7a3ab484a1d9.png) <details class="lake-collapse"><summary id="u6b5c60ca"><span class="ne-text">多输入多输出RNN结构</span></summary><p id="u08763853" class="ne-p"><span class="ne-text" style="font-size: 14px">输入:x1, x2, x3, … xi</span></p><p id="u0c119b57" class="ne-p"><span class="ne-text" style="font-size: 14px">输出:</span><span class="ne-text" style="font-size: 14px">y1, y2, y3, … yi</span></p><p id="u7405542e" class="ne-p"><em><span class="ne-text" style="font-size: 12px">*注意:i≠j</span></em></p><p id="u52989e90" class="ne-p"><span class="ne-text" style="font-size: 14px">应用:语言翻译</span></p><p id="u604de0ce" class="ne-p"><span class="ne-text" style="font-size: 14px">举例:what is artificial intelligence?</span></p><p id="u81836ffd" class="ne-p"><span class="ne-text" style="font-size: 14px">判断:什么是人工智能?</span></p></details> ## RNN常见类型 1. **单向RNN/普通RNN**: 信息只在一个方向上流动,即从过去到未来。信息从前部序列流动到后部序列。 2. **双向RNN (Bi-RNN)** : 信息在两个方向上流动,网络可以同时考虑过去的信息和未来的信息。单向RNN是把前部序列信息传递到后部,双向RNN在做判断时不仅仅是把前部序列信息传递到后部,同时也会考虑后部序列的信息。 ![](https://cdn.nlark.com/yuque/0/2024/png/48118617/1726742339139-f032b0ee-5807-4491-a041-1ceef737735f.png) > _**普通RNN/单向RNN结构缺陷:**_ > > + _前部序列信息在传递到后部的同时,信息权重下降,导致重要信息丢失_ > + _求解过程中梯度消失_ > 3. **长短期记忆网络 (LSTM)**:针对普通RNN的优化,用来解决标准RNN重要信息丢失以及梯度消失的问题。 ![LSTM 结构图](https://cdn.nlark.com/yuque/0/2024/png/48118617/1726743036960-3eeaef7e-325e-4454-96f1-b7d73bb12da7.png) > _LSTM的门_ > > + _遗忘门:选择性丢弃ai-1与xi中不重要的信息_ > + _更新门/输入门:确定给记忆细胞添加哪些信息_ > + _输出门:筛选需要输出的信息_ > 4. **门控循环单元 (GRU)**:另一种特殊的RNN,它简化了LSTM的结构,但仍然能够有效地处理长距离依赖。 ![GRU 结构图](https://cdn.nlark.com/yuque/0/2024/png/48118617/1726743083810-9d659604-f7a1-45b7-a773-be69e091a775.png) > _GRU的门_ > > + _更新门:确定给记忆细胞添加哪些信息;控制着旧状态与新状态之间的信息流动_ > + _重置门:重置门决定了应该从当前隐藏状态中忘记多少信息。_ > 5. **深层循环神经网络 (DRNN)**: 解决更复杂的序列任务,可以把单层RNN叠起来或者在输出前和普通mlp结构结合使用。 __ 尽管RNN在处理序列数据方面非常有效,但它们也有一些局限性,比如训练过程中的梯度消失和梯度爆炸问题,以及在处理非常长的序列时效率较低。这些问题在一定程度上限制了RNN在某些复杂任务中的应用。因此,研究人员和工程师经常使用更高级的模型,如Transformer,来解决这些问题。
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: HswOAuth/llm_course#108
No description provided.