一文搞懂NLP框架之RNN、LSTM、Transformer结构原理!

NLP领域中,特征提取可谓是经历了显著的“变迁”与发展。回首过往,RNN曾以其独特的序列建模能力一度引领潮流,如今正如同明日黄花,逐步淡出历史舞台。紧接着,LSTM以解决长时依赖问题的独特设计展现出强大的生命力,虽已非最前沿,却仍老骥伏枥,若能进一步优化,其潜力不可小觑。

而今,Transformer架构如日中天,凭借自注意力机制彻底革新了特征提取的方法,已在NLP诸多任务中发挥着中流砥柱的作用。

本文笔者将深入浅出剖析RNN、LSTM以及Transformer的核心结构原理,一起见证算法是怎样做到一浪更比一浪强的。

RNN

为什么会出现RNN?

要搞明白这个问题,我们是不是可以先回想一下,在RNN之前的模型还有什么可改进点?

没错,从这里着手,问题就将会迎刃而解了。细想BP、CNN(卷积神经网络),可以当做能够拟合任意函数的黑盒子,只要训练数据足够,给定特定的x,就能得到期望的y。结构图如下:

在这里插入图片描述

但是不难发现,它们都只能单独的处理一个个的输入,前一个输入和后一个输入是完全没有关系的。而我们实际应用中肯定有需要处理序列信息的任务吧,即就是前面的输入和后面的输入是有关系的。

例如,当我们理解某句话意思时,孤立的理解每个词肯定是不够的,而是需要处理这些词连接起来的整个序列,“词本无意,意由境生”,也正是此意。还有,处理视频的时候,当前也不能只单独的分析每一帧,而是要分析这些帧连接起来的整个序列。

为了解决一些这样类似的问题,能够更好的处理序列的信息,RNN就诞生了。

RNN解释

我们通常所说的RNN实际上有两种,一种是Recurrent Neural Networks,即循环神经网络,一种是Recursive Neural Networks,即递归神经网络。

循环神经网络,是一种时间上进行线性递归的神经网络,用于处理序列数据

相比于传统的神经网络,它可以处理序列变化的数据。比如某个词汇的含义根据上下文内容不同而有所不同,RNN则可以很好地解决这类问题。

递归神经网络(Recursive Neural Networks)被视为循环神经网络的推广,它是一种在结构上进行递归的神经网络,常用于NLP中的序列学习,它的输入数据本质不一定是时序的,但结构却往往更加复杂。

我们这里只说循环神经网络RNN

首先来看一个简单的RNN,它由输入层、一个隐藏层和一个输出层组成:

在这里插入图片描述

如果将W的那个带箭头的圈去掉,它就变成了最普通的全连接神经网络。

  • x是一个向量,它表示输入层的值。
  • s是一个向量,它表示隐藏层的值(这里隐藏层面画了一个节点,你也可以想象这一层其实是多个节点,节点数与向量s的维度相同)。
  • U是输入层到隐藏层的权重矩阵。
  • o也是一个向量,它表示输出层的值。
  • V是隐藏层到输出层的权重矩阵。

那么,现在我们来看看W是什么。循环神经网络的隐藏层的值s不仅仅取决于当前这次的输入x,还取决于上一次隐藏层的值s。而权重矩阵W就是隐藏层上一次的值作为这一次的输入的权重。

具体如下图所示。可以清楚的看到,上一时刻的隐藏层是如何影响当前时刻的隐藏层的。

在这里插入图片描述

当然我们也可以将上面的图按时间线展开,循环神经网络也可以画成下面的样子:

在这里插入图片描述

现在就可以清晰看出,该网络在 t t t时刻接收输入 x t x_t xt,隐藏层的值 s t s_t st由上一时刻的 s t − 1 s_{t-1} st1 x t x_t xt的权重矩阵W决定。

公式表示如下:

O t = g ( V ∗ S t ) O_t = g(V*S_t) Ot=g(VSt)

S t = f ( U ∗ X t + W ∗ S t − 1 ) S_t = f(U*X_t+W*S_{t-1}) St=f(U

### 带有自注意力机制的LSTM模型架构 #### 架构概述 带有自注意力机制的LSTM模型融合了两种关键技术的优势:LSTM的时间序列建模能力和自注意力机制的空间依赖捕捉能力。这种组合不仅解决了传统LSTM难以有效处理长时间间隔数据的问题,还增强了模型对于输入序列中不同位置之间关联的理解。 #### LSTM层的作用 LSTM(长短期记忆网络)是一种特殊的循环神经网络(RNN),专门设计用来克服标准RNN训练过程中遇到的梯度消失/爆炸问题[^1]。通过引入遗忘门、输入门以及输出门三个控制结构LSTM能够在保持历史信息的同时更新当前状态,从而更好地模拟时间序列特性。 #### 自注意力机制的功能 自注意力机制允许模型关注整个输入序列的不同部分,在不考虑顺序的情况下建立元素间的联系。相比于传统的单向或双向LSTM仅能从前向后或从后向前扫描一次的方式,自注意力可以一次性查看全部上下文,并赋予重要片段更高的权重[^3]。这极大地提高了模型理解复杂模式的能力,尤其是在面对较长文本或其他形式的数据流时尤为明显。 #### 结合方式 当两者结合起来构建新框架时,通常会先利用多层堆叠的标准LSTM单元对原始信号做初步编码;随后加入一层或多层基于查询-键值对(self-query, self-key, self-value)计算得到加权求和表示形式的自注意模块;最后再经过全连接层映射至目标空间完成最终分类或者回归任务。这样的设计既保留了原有方法的优点又弥补了一些缺陷,形成了更加鲁棒高效的解决方案。 ```python import torch.nn as nn class AttentionLSTM(nn.Module): def __init__(self, input_size, hidden_size, num_layers, output_size): super(AttentionLSTM, self).__init__() # Define the LSTM layer self.lstm = nn.LSTM(input_size=input_size, hidden_size=hidden_size, num_layers=num_layers, batch_first=True) # Define attention mechanism components self.attention_weights = nn.Linear(hidden_size, 1) self.softmax = nn.Softmax(dim=1) # Output layer to map from hidden state space to target dimensionality self.fc_out = nn.Linear(hidden_size, output_size) def forward(self, x): lstm_output, _ = self.lstm(x) attn_scores = self.attention_weights(lstm_output).squeeze(-1) attn_weights = self.softmax(attn_scores) context_vector = (lstm_output * attn_weights.unsqueeze(-1)).sum(dim=1) out = self.fc_out(context_vector) return out ``` 此代码定义了一个简单的带有自注意力机制的LSTM模型类`AttentionLSTM`,其中包含了基本组件如LSTM层、线性变换用于生成注意力分数以及softmax函数来规范化这些分数形成有效的概率分布。之后通过对隐藏状态施加重缩放操作获得上下文向量作为后续预测的基础。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

穿着帆布鞋也能走猫步

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值