【深度学习理论】(6) 循环神经网络 RNN

大家好,今天和各位分享一下处理序列数据的循环神经网络RNN的基本原理,并用 Pytorch 实现 RNN 层和 RNNCell 层。

之前的博文中已经用过循环神经网络做过许多实战案例,感兴趣的可以看我这个专栏:https://blog.csdn.net/dgvv4/category_11712004.html


1. 序列的表示方法

在循环神经网络中,序列数据的 shape 通常是 [batch, seq_len, feature_len],其中 seq_len 代表特征的个数feature_len 代表每个特征的表示方法。

对于自然语言任务: 以 shape=[b, 5, 100] 为例,其中 5 代表每句话有 5 个单词,而 100 代表每个单词使用一个长度为 100 的向量来表示。

对于时间序列任务: 以 shape=[b, 100, 1] 为例,其中 100 代表每个 batch 统计了 100 天的数据,每天有 1 个气温值。

下面以语言的情感分析任务为例,向大家介绍处理序列数据的传统方法,如下图:

现在有一个句子 The flower is so beautiful 作为输入,通过 wordembedding 每个单词用一个长度为 100 的向量来表示,然后将每个单词输入至线性层提取特征,每个单词的输出结果是一个长度为 2 的向量,最后将所有单词聚合起来,经过一个线性层输出得到分类结果。

传统的序列处理方法存在许多缺陷:

(1)计算量庞大。现实生活中的单词量巨大,对每个单词生成一个线性层 x@w+b 提取特征,然后再对线性层输出结果做聚合,模型非常复杂,参数量极其庞大。

(2)没有考虑上下文语境。传统方法只是针对一句话中的每个单词做单独的分析,没有联系前后单词之间的信息。如:i do not think the flower is beautiful 句子中,不能看到 beautiful 就说这句话一定是好评,要联系到上文的 not 再做分析。


2. RNN 原理解析

针对传统序列任务模型存在的问题,RNN做出了改进:

(1)优化参数量。通过权值共享,把每个单词的 w1、w2、w3... 用一个张量 W 来表示,一个RNN层就处理一整个句子。

(2)联系上下文语境。使用一个时序单元处理上下文信息,当前时刻的输入一定要考虑到上一时刻的输出。

下面仍以语言的情感分析任务为例,向大家介绍RNN的基本原理。

RNN单元的计算公式为:h_{t} = f_{W}(h_{t-1}, x_{t})

其中,​

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

立Sir

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

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

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

打赏作者

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

抵扣说明:

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

余额充值