Training RNNs as Fast as CNNs

SRU: 快速递归单元
介绍SRU(Simple Recurrent Unit),这是一种优化过的递归神经网络结构,相较于传统RNN,它大大提升了训练速度,特别是在GPU上的并行计算效率。SRU通过简化状态更新过程,并结合CUDA级别的优化技巧,实现了与卷积神经网络相当的计算性能,在多项任务如文本分类、问答系统等应用中表现出高效能。

摘要

RNN的并行性比较差,主要因为它在计算state的时候不能并行,比如要计算输出h(t),它必须依赖于前一步的输出h(t-1),这个是并行化的瓶颈。
在这篇论文提出一种可选择的RNN结构,它的递归单元可以和卷积层一样快,是cud优化的LSTM的5-10倍。我们通过一序列的实验包括分类,qa,语言模型,翻译以及语音识别来证明这种卷积单元确实是高效的。
论文源码用 PyTorch 和 CNTK实现过 https://github.com/taolei87/sru

简介

最近深度学习的发展主要归功于模型的容量和计算能力的提升上,模型经常通过更深以及更宽的结构来引入更多的超参来实现。不断增长的模型以及参数个数使得计算量会急剧上升。
比如,需要训练一个较好效果的翻译或者语音识别模型,需要花费几天的时间在训练上面。
很显然,计算性能已经变成现在研究的一个很大的瓶颈。现在卷积网络或者attention模型在利用GPU加速上面并行性做的很好,但是rnn在这方面做的不够。之前也有一些工作是在优化LSTM的计算速度上面,但是
和CNN比还是有10倍的速度落后。

在本文我们介绍一种 Simple Recurrent Unit (SRU),比传统的RNN有显著的速度提升。它是通过简化state的计算来实现- 不是每一步的计算都需要依赖上一步的输出的。
简单的说就是 复杂的计算,比如矩阵计算比如 forget gate, input gate等计算都不依赖于上一步的输出h(t),只依赖于当前step的输出x(t)
状态的更新c(t)的更新必须依赖于上一步的状态c(t-1),但是他的计算都是element-wise,很简单的计算。
和cuDNN LSTM 和conv2d 类似,我们也做了 cuda 维度的优化。

模型

SRU 实现

比较流行的RNN结构比如LSTM 和GRU 都是通过gates的机制来控制信息流,下面开始介绍实现:
首先是状态层更新做了一些简化:

ct=ftct1+itx1t 
=ftct1+(1ft)x1t 
ft,it 分别是和lstm一致的 forget gate 和 input gate,
是一个sigmoid gate, x1t 是对输入的x处理变换,
这里我们只是用一个简单的线性变换, Wxt
it 的计算方式直接用 1ft 来简单化.

在lstm中 x1t,it 的计算不仅和 xt 有关,而且和上一步的输出 ht1 有关。

然后输出状态 ct 输入一个激活函数g(.)来生成新的输出 ht=g(ct)

然后对输出的 ht 做额外的处理:

第一,我们在引入skip connection layer

h1t=rtht+(1rt)xt 
=rtg(ct)+(1rt)xt 
rt 代表 reset gate。

第二,我们实现 variational dropout 机制作为标准dropout正则的补充
普通的 droput 是作用在 输出 ht 之后
它是作用在输入 xt 上面的

速度优化

普通的RNN的gate,比如: forget gate
ft=σ(Wfxt+Rfht1+bf) 
必须依赖上一步的输出 ht1 ,所以 ht1 它破坏了并行性,
我们把这种连接也去除了

我们整体介绍下各个步骤:
x1t=Wxt  ————-(3)
ft=σ(Wfxt+bf)  ——-(4)
rt=σ(Wrxt+br)  ——-(5)
ct=ftct1+(1ft)x1t  ——-(6)
ht=rtg(ct)+(1rt)xt  ——-(7)

下3-5 完全可以并行计算的,6-7虽然不能并行,但是他们的计算是很快的,
因为他们都是些element-wise的计算。

CUDA级别优化

简单的SRU优化大概可以相对LSTM做到5倍的速度提升,
下面我们介绍CUDA级别的优化,
1, 所有step的矩阵相乘都可以一起计算,这样可以提高GPU的使用
2. 所有element-wise计算都是可以融合成一个核函数,如果不这么做,比如 + 或者 sigmoid 运算,是不同的函数调用,这个带来额外的底层核函数调用以及数据加载,整体会有额外的开销。

相关工作

网络结构:
RCNN Lei et al., 2015,2016
Quasi-RNN Bradbury et al., 2017 这个是本编主要参考的

CUDA 优化:
cuDNN SLTM Appleyard elt al., 2016

实验

在 文本分类,问答,语言模型,机器翻译,语音识别上面都做了实验,做到了和CNN同样的速度,效果也不错

<think>好的,我现在需要向用户介绍CNNRNN是什么。首先,我得回忆一下这两个概念的基本定义和应用领域。CNN是卷积神经网络,主要用于图像处理;RNN是循环神经网络,擅长处理序列数据。接下来,要确保自己理解正确,可能需要先组织一下结构,分点说明两者的结构、特点、应用以及优缺点。 用户可能希望得到清晰的对比,所以需要分别介绍它们,然后再比较异同。在介绍结构时,CNN的卷积层、池化层和全连接层是关键,而RNN的循环结构、隐藏状态以及处理时间序列的能力是重点。要避免使用过于专业的术语,用更易懂的中文解释。 同时,用户提到需要使用LaTeX格式的行内公式,所以要注意在涉及数学表达式时正确使用$...$。例如,卷积操作可以写成$W * X + b$,RNN的隐藏状态更新公式是$h_t = \sigma(W_h h_{t-1} + W_x x_t + b)$。要检查这些公式是否正确,是否符合LaTeX语法。 另外,需要确保回答结构清晰,分步骤解释。先分别介绍CNNRNN,再对比它们的差异,最后总结应用场景。这样用户能逐步理解两者的区别和用途。 可能还需要考虑用户的知识水平,是否需要更基础的解释。比如,解释卷积操作是如何提取特征的,或者RNN如何处理时间序列中的依赖关系。但用户的问题比较直接,可能不需要太深入的技术细节,保持简洁明了即可。 最后,检查是否有遗漏的重要点,比如CNN在计算机视觉中的应用实例,RNN在自然语言处理中的具体应用,如机器翻译、语音识别等。同时,提到它们的变体,如ResNet、LSTM、GRU,这样用户能知道有更高级的模型存在。 总结下来,回答的结构应该是: 1. CNN的定义、结构、特点、应用、优缺点。 2. RNN的定义、结构、特点、应用、优缺点。 3. 两者的主要区别对比。 4. 总结应用场景。 在写作过程中,确保每个部分都有明确的标题,使用中文,避免错误,并正确插入LaTeX公式。同时,保持语言流畅,逻辑清晰,帮助用户逐步理解这两个重要的神经网络模型。</think>以下是卷积神经网络(CNNs)和循环神经网络(RNNs)的逐步解释: --- ### 一、卷积神经网络(CNNs) #### 1. 定义与核心思想 CNNs 是一种专门用于处理**网格状数据**(如图像、音频)的深度学习模型。其核心是通过**卷积操作**自动提取局部特征。 #### 2. 关键结构 - **卷积层**:使用滤波器(Filter)扫描输入数据,计算局部区域的加权和。 数学表达式:$Z = W * X + b$,其中$W$是滤波器权重,$X$是输入,$b$是偏置。 - **池化层**:降低特征图维度(如最大池化$ \text{MaxPool}(x) = \max(x_{i,j})$)。 - **全连接层**:最终分类或回归。 #### 3. 特点 - **局部感受野**:关注局部特征而非全局。 - **参数共享**:同一滤波器扫描整个输入,减少参数量。 - **平移不变性**:物体位置变化不影响识别。 #### 4. 典型应用 - 图像分类(如ResNet、VGG) - 目标检测(如YOLO) - 图像分割(如U-Net) #### 5. 优缺点 - 优点:高效提取空间特征,适合高维数据。 - 缺点:难以直接处理序列数据。 --- ### 二、循环神经网络(RNNs) #### 1. 定义与核心思想 RNNs 是专为**序列数据**(如文本、时间序列)设计的神经网络,通过**循环结构**保留历史信息。 #### 2. 关键结构 - **隐藏状态**:保存过去信息的向量,随时间步更新。 更新公式:$h_t = \sigma(W_h h_{t-1} + W_x x_t + b)$,其中$\sigma$是激活函数。 - **时间展开**:每个时间步共享同一组参数。 #### 3. 特点 - **时序依赖性**:当前输出依赖之前的状态。 - **可变长度输入**:适应不同长度的序列。 #### 4. 典型应用 - 自然语言处理(如机器翻译、文本生成) - 时间序列预测(如股票价格) - 语音识别 #### 5. 优缺点 - 优点:天然适合序列建模。 - 缺点:长序列训练中可能出现梯度消失/爆炸(通过LSTM、GRU缓解)。 --- ### 三、CNNs vs RNNs 对比 | 特性 | CNNs | RNNs | |---------------------|-------------------------------|-------------------------------| | **输入类型** | 网格数据(如图像) | 序列数据(如文本、时间序列) | | **核心操作** | 卷积、池化 | 循环状态更新 | | **参数共享** | 空间维度共享 | 时间维度共享 | | **长依赖处理能力** | 无 | 需特殊结构(如LSTM) | --- ### 四、总结 - **CNNs**:适合提取**空间特征**(如图像局部模式)。 - **RNNs**:适合建模**时序关系**(如语言上下文)。 - **融合应用**:复杂任务中可结合两者(如视频分析:CNN提取帧特征 + RNN建模时序)。 两者是深度学习中解决不同问题的基石,后续变体(如Transformer)进一步扩展了其能力边界。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值