【NLP】 12. 解决不同长度文本问题,RNN, LSTM,双重RNN,双向递归神经网络

RNN Recurrent Models

如何解决不同长度文本向量的问题?(长文本)

  • 取均值,但是容易淡化文本的独特性,比如一正一负的均值就变成了0. 有些情况取均值毫无意义,我出门玩,几个词的均值意义模糊。我爱你,你爱我,均值一样但是含义不一样。
  • 合并所有向量,但是是固定的一段长向量(N-dimension),如果只有一个词,则需要填充padding其他地方为0,如果是很多个词,则只能放弃后面的词,进行截断(Truncate)。会丢失信息。并且不同位置的词需要重新学习它的含义(代入了位置信息)。

RNN

为了解决这个问题,提出了RNN的概念 RNN-LSTM概述 <-跳转之前的博客。基于之前的概述,下面做一些补充。

python - Why is RNN no weigth between hidden and output? - Stack Overflow](https://i.sstatic.net/PcaGd.png)

  • h0 的初始化可以是全为0的矩阵,也可以是认为给定的权重矩阵

  • Wh 时间步长之间的权重是共享的,所以更新的时候会一起更新。 Wx(负责将输入

    xt转换为隐藏状态的表示),Wy(负责将隐藏状态 ht映射到输出层(例如分类任务的 logits) 不共享

  • RNN 有多种形式的输出, 也可以直接多任务,预测每个词的词性,预测情感,有多少个输出就会更新多少次权重

The Unreasonable Effectiveness of Recurrent Neural Networks](https://karpathy.github.io/assets/rnn/diags.jpeg)

  • 存在的问题:
    *

    1. 梯度爆炸Exploding gradients
      如果有一个非常陡的梯度,权重更新会跳到很远的地方,甚至溢出存储

    解决方法: clipping the gradient.梯度裁剪,使用min(gradient, k)进行限制。

      1. 梯度消失,gradient vanish
        RNN 通过 反向传播算法(Backpropagation Through Time, BPTT) 来更新权重,其中隐藏状态的梯度是 多个时间步的乘积。如果每一步的梯度小于 1,就会指数级衰减,最终变得接近 0。

    解决方法:不衰减的方法保存信息,使用LSTM

  • 通过RNN 隐藏层可视化可以得到结论:颜色渐变说明 RNN 的隐藏状态随着时间步的变化而改变,有些单词在序列中起到了更重要的作用。【Andrej Karpathy 的论文《The Unreasonable Effectiveness of Recurrent Neural Networks》(2015)】

RNN 变型

1. 双重RNN,输出当作另一个RNN的输入

Recurrent Neural Network (RNN) and LSTM | Data Platform and Data Science](https://dwbi1.wordpress.com/wp-content/uploads/2021/08/fig-2-rnn-architecture.jpg?w=422)

2. 双向递归神经网络(Bidirectional RNN, BiRNN)

Forward-Backward RNN (前向-后向 RNN)是一种 双向递归神经网络(Bidirectional RNN, BiRNN) 的结构,它通过 同时考虑前后时间步的信息 来提升对序列数据的理解能力,特别适用于 自然语言处理(NLP)语音识别(Speech Recognition) 等任务。

Bidirectional Recurrent Neural Network - GeeksforGeeks](https://media.geeksforgeeks.org/wp-content/uploads/20230302163012/Bidirectional-Recurrent-Neural-Network-2.png)

1. 为什么需要 Forward-Backward RNN?

普通的 单向 RNN 只能利用过去 的信息,而无法考虑未来的信息。例如:

  • 语言建模中,单向 RNN 只能基于前面的单词预测下一个单词,而不能考虑后续的单词。
  • 语音识别中,单向 RNN 只能基于当前和之前的音素,而不能利用后续音素的信息。

解决方案:

  • 双向 RNN(BiRNN) 通过前向(Forward)和后向(Backward)两个方向的 RNN 结构 ,同时处理序列数据,并结合两个方向的信息,使得网络可以在当前时间步同时利用过去和未来的上下文信息

2. Forward-Backward RNN 的结构

BiRNN 由 两个独立的 RNN 组成

  1. Forward RNN(前向 RNN): 负责从 左到右 处理输入序列。
  2. Backward RNN(后向 RNN): 负责从 右到左 处理输入序列。
  3. 最终隐藏状态 由前向和后向 RNN 的隐藏状态拼接(concatenate)或加权合并而成。
相关推荐
爱吃泡芙的小白白1 天前
CNN参数量计算全解析:从基础公式到前沿优化
人工智能·神经网络·cnn·参数量
jasligea1 天前
构建个人智能助手
开发语言·python·自然语言处理
Network_Engineer2 天前
从零手写RNN&BiRNN:从原理到双向实现
人工智能·rnn·深度学习·神经网络
想进部的张同学2 天前
week1-day5-CNN卷积补充感受野-CUDA 一、CUDA 编程模型基础 1.1 CPU vs GPU 架构线程索引与向量乘法
人工智能·神经网络·cnn
2301_764441332 天前
基于paCy模型与jsoncrack进行依存句法分析
python·算法·自然语言处理
肾透侧视攻城狮2 天前
《深入PyTorch数据引擎:自定义数据封装、高效加载策略与多源融合实战》
人工智能·神经网络·自定义dataset·dataloader 加载数据·常见的图像预处理操作·图像数据增强·加载 mnist 数据集
Sherlock Ma2 天前
强化学习入门(2):DQN、Reinforce、AC、PPO
人工智能·深度学习·机器学习·自然语言处理·transformer·dnn·强化学习
众趣科技2 天前
前馈神经网络入门:空间计算的三维重建魔法
人工智能·神经网络·空间计算
爱喝可乐的老王2 天前
PyTorch搭建神经网络
pytorch·深度学习·神经网络
天空属于哈夫克32 天前
外部群自动化:将 RPA 从“群发工具”进化为私域“情报感知系统”
人工智能·自然语言处理