为什么需要循环神经网络模型?

内容分享2小时前发布
0 0 0

相关专栏

为什么需要循环神经网络模型?

专栏

每天五分钟玩转自然语言理解NLP

作者:幻风的AI之路

19.9币

10人已购

查看

为什么需要循环神经网络模型?

专栏

深度学习PyTorch极简入门

作者:幻风的AI之路

21.6币

162人已购

查看

(此处已添加圈子卡片,请到今日头条客户端查看)

正文

为什么需要循环神经网络

目前有这样的一句话:I hate this boring movie,我们想要确定这句话是正例还是负例,那么我们可以这样来做,将每个单词进行向量化,然后分别输入到全连接神经网络中

为什么需要循环神经网络模型?

也就是说我们使用全连接神经网络来提取每一个词的特征向量(如果特征向量的维度是10),然后把这些词的特征向量组合在一起构成了这句话的特征向量(此时的维度为(5,10)),然后进行分类操作,从而得出这句话是正例还是负例。

为什么需要循环神经网络模型?

这样就完成了I hate this boring movie的分类任务了,但是这样方法会有一些问题,列如参数太多,每一个词都需要一个参数w和b,第二个问题是不能思考词与词之间的联系,缺乏之间联系的语境信息。

权值共享

为了解决第一个问题,我们可以权值共享的方式:

为什么需要循环神经网络模型?

都是用同一个参数w和b

时序模型

为了解决第二个问题,我们需要一个以前时刻的信息状态h和下一时刻的输入共同计算,使得当前的计算包含词与词之间的关系

为什么需要循环神经网络模型?

如图所示输入到RNN模块中的不仅有输入x还有上一时刻的记忆h,这二者结合共同完成了RNN的计算

整合

目前我们把这个模型进行整合一下,就变成了目前的模型效果了:

为什么需要循环神经网络模型?

这个就是RNN,t-1时刻的输出ht-1,和t时刻的输入feature共同完成计算操作

维度信息:

如果样本有5个,每个样本有3个词,目前向量化,每个词的维度为100,那么这5个样本的维度为(3,5,100),这表明RNN需要3个时间步,那么输入到每一个时间步的维度为(5,100),也就是说每一个时间步需要同时处理5个样本中的一个词

展开

RNN中文名为循环神经网络,如果我们把RNN展开,它的效果是这样的:

为什么需要循环神经网络模型?

根据问题的不同,我们会应用不同的输出y,有时候会应用全部时间步的输出y,有时候会使用最后一个时刻的输出y

这样看着就会很清晰,然后我们看一下每一个时刻的时间步究竟在计算什么?

为什么需要循环神经网络模型?

针对于某一时刻的RNN的维度信息:

如果有3句话每句话10个词,每个词向量化之后词的维度为100,那么它的维度为(10,3,100),将这个输入输入到RNN中,此时每一个时间步接收Xt的维度信息为(3,100)

然后此时Wxh的维度为(隐藏层数,特征维度数),如果隐藏层数是30,那么Wxh的维度信息就是(30,100)

然后ht的维度信息是(batch,隐藏层数),所以本例中ht的维度信息为(5,20),Wh的维度信息为(隐藏层数,隐藏层数),此时它的维度为(20,20),计算图如下所示:

为什么需要循环神经网络模型?

实例:

当我们创建RNN的时候,我们需要指定三个参数,一个参数是featrue len,还有一个是hidden len,最后一个是num layers(层数),

Wxh的维度信息为(hidden,feature),而whh的维度信息为(hidden,hidden)

net=RNN(100,30,2)表明feature len=100,然后hidden len=30,层数是两层

为什么需要循环神经网络模型?

其中前向传播返回值中ht表明最后一个时刻的输出,如果有多层,那么每一层都会有一个最后时刻的输出

而out表明所有时刻的输出,如果有多层,就是说最上一层的所有时刻的输出

为什么需要循环神经网络模型?

import torch
from torch import nn
rnn=nn.RNN(100,20,1)
x=torch.randn(10,3,100)
out,h=rnn(x,torch.zeros(1,3,20))
print(out.shape)
print(h.shape)

这里是一层的RNN结构,如果要是多层RNN结构那么计算是这样的

为什么需要循环神经网络模型?

import torch

from torch import nn

rnn=nn.RNN(100,20,num_layers=4)

x=torch.randn(10,3,100)

out,h=rnn(x,torch.zeros(4,3,20))

print(out.shape)

print(h.shape)

© 版权声明

相关文章

暂无评论

none
暂无评论...