Were RNNs All We Needed?

本文是深度学习相关文章,针对《Were RNNs All We Needed?》的翻译。

摘要

2017 年 Transformers 的推出重塑了深度学习的格局。 Transformer 最初是为序列建模而提出的,后来在各个领域取得了广泛的成功。然而,Transformer 的可扩展性限制(特别是在序列长度方面)引发了人们对新颖的循环模型的新兴趣,这些模型在训练期间可并行化,提供可比较的性能,并且可以更有效地扩展。在这项工作中,我们从历史的角度重新审视序列建模,重点关注循环神经网络(RNN),它在变形金刚兴起之前主导了该领域二十年。具体来说,我们研究了 LSTM (1997) 和 GRU (2014)。我们证明,通过简化这些模型,我们可以得出最小版本(minLSTM 和 minGRU),它们(1)比传统模型使用更少的参数,(2)在训练过程中完全可并行化,(3)在一定范围内实现令人惊讶的竞争性能任务数量,可与包括变形金刚在内的最新模型相媲美。

1 引言

2 背景

3 方法

4 RNN 就是我们所需要的吗?

5 相关工作

6 结论

在这项工作中,我们重新回顾了序列建模的历史,重点关注传统的 RNN,特别是 LSTM(1997 年)和 GRU(2014 年),它们在 Transformer 模型兴起之前主导了该领域二十年。我们证明,我们可以通过消除传统 RNN 门对先前状态的依赖来实现传统 RNN 的并行训练。这些架构的进一步简化导致了最小版本——minLSTM 和 minGRU——它们具有以下几个优点:(1) 比传统版本更少的参数,(2) 训练期间的完全并行性,以及 (3) 在一系列任务中具有令人惊讶的竞争性能,尽管其简单性可与现代模型相媲美。在附录中,我们在普通 PyTorch 中提供了 minGRU 和 minLSTM 的实现,仅需要几行代码。这使得它们变得轻量级,并且可供初学者、从业者和研究人员使用。我们希望这项工作能够引发关于序列建模演变的更广泛讨论,鼓励根据更新、更复杂的架构重新评估 LSTM 和 GRU 等更简单的基础模型。鉴于这些具有数十年历史的 RNN 的最小版本的令人惊讶的有效性,以及现代 RNN 架构最近的成功,我们提出了一个问题:“RNN 是我们所需要的吗?”

局限性

03-15
### 循环神经网络(Recurrent Neural Networks, RNNs)概述 循环神经网络是一种专门用于处理序列数据的神经网络架构,其核心特点是能够在计算过程中保留之前的状态信息并将其传递给后续的时间步。这一特性使得RNN非常适合于需要考虑上下文关系的任务,例如自然语言处理、时间序列预测以及语音识别等[^1]。 #### 基本结构 RNN的基本单元会在每次接收新输入的同时接受上一次隐藏层的状态作为附加输入。通过这种方式,RNN可以利用先前的信息影响当前决策过程。然而,在实际应用中,标准形式的RNN可能面临梯度消失或爆炸等问题,这些问题会阻碍模型捕获长时间依赖的能力[^5]。 为了克服这些局限性,研究者提出了几种改进型RNN变体: - **LSTM (Long Short-Term Memory)** LSTM通过增加特殊的门控机制解决了传统RNN难以捕捉长期依赖的问题。具体来说,它包含了三个主要组件——遗忘门、输入门和输出门,分别负责决定何时忘记旧信息、存储新信息以及如何生成最终输出[^4]。 - **GRU (Gated Recurrent Unit)** GRU是对LSTM的一种简化版本,减少了参数数量但仍保持较强表达能力。相比LSTM,GRU将重置门与更新门结合起来实现类似功能。 #### 应用领域 ##### 自然语言处理(NLP) 在NLP方面,RNN被广泛应用于诸如机器翻译、情感分析、命名实体识别等多个子任务之中。特别是字符级的语言建模工作展示了即使是在非常低层次上的符号操作下,经过适当训练后的RNN也能够创造出具有一定连贯性的文本片段[^2]。 ##### 时间序列分析 对于股票价格波动预测或者其他涉及连续变化量的数据集而言,采用深层RNN框架可以帮助挖掘潜在规律模式,并据此做出更精准预估判断[^3]。 ##### 语音信号解析 借助强大的特征提取能力和动态适应性能,基于DNN-RNN混合系统的自动语音识别系统取得了显著进步成果,成为现代ASR技术主流解决方案之一。 ```python import tensorflow as tf from tensorflow.keras.layers import SimpleRNN, Dense model = tf.keras.Sequential([ SimpleRNN(50, activation='relu', input_shape=(None, 1)), Dense(1) ]) model.compile(optimizer=tf.optimizers.Adam(), loss="mse", metrics=["mae"]) ``` 上述代码展示了一个简单的单向SimpleRNN实例配置方法及其编译选项设置流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

UnknownBody

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

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

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

打赏作者

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

抵扣说明:

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

余额充值