Pytorch学习笔记11:循环神经网络(基础篇)

带有注意力机制的RNN网络:https://blog.csdn.net/u011984148/article/details/99439993

之前的网络:之前所提到的线性网络大多是稠密网络,其输入是样本的多维特征,以此得到想要的输出。

解决序列问题:但是面对序列问题时,例如自然语言处理,此时的输入内容x1...xn是一组有序列性,即存在先后关系的样本。针对这样的问题,也可以使用线性的全连接网络来处理,如果序列很长,每个序列维度很高的话,对网络的训练也是一个挑战。但事实上,全连接网络所需要的计算权重太多,并不能够解决问题。

关于权重:对于一张128通道的图片,若想利用5*5的卷积核将其转换成一张64通道的图片,需要计算的权重有128*5*5*64=204800个(卷积层的权重数目只与通道数以及卷积核大小有关,但全连接层的权重数与转成一维向量后的整体数据量有关),若转为一维向量以后,输入为4096个元素,输出为1024个元素,则需要计算的权重大约4096*1024=4194304个,显然全连接层计算的权重远多与卷积层。

权重共享:给定一张输入图片,用一个固定大小的卷积核对图像进行处理,卷积核内的参数即为权重,而卷积核是对输入图片进行步长为stride的扫描计算,也就是说原图中的每一个像素都会参与到卷积计算当中,因此,对于整个卷积核而言,权重都是一样的,即共享。另外,图像信息的特征:图片底层特征与特征在图片中的位置无关,也是权重共享的一个依据。例如对于图像的边缘特征,无论边缘处在图像的什么位置,都是以同样的方法定义,作为同样的特征进行区别的。

   因此,为了能更好的解决序列问题,也要用到权重共享的思路方法,来减少计算过程中所需要的权重,由此产生了RNN

                                                                                                                        

RNN cell:本质就是一个线性层,t时刻下的N维向量,讲过RNN cell之后变成了一个M维的向量ht,与其他的线性层不同,RNN cell为一个共享的线性层,即重复利用,权重共享。

                                                                   RNN Cell示æå¾

将上图展开:

RNNå±å¼å¾

 

序列与前置信息:由于x1...xn为一组序列信息,每一个xi都至少包含xi-1的信息,也就是说,正对x2的操作所得到的h2应该包含x1的信息,因此在设计中,把x1处理后得到的h1一并向下传递。图中的h0是一种前置信息,例如若实现图像到文本的转换,可以利用CNN+fc对图像进行操作,再将输出的向量作为h0参与到RNN运算当中。若没有可获知的前置信息,可将h0设置为与xi同维度的零向量。图中所有的RNN cell为同一个线性层,即让设计好的线性层反复参与运算,实现权重共享。

RNN计算过程:分别对输入xt以及前文的隐藏层输出ht-1进行线性计算,再进行求和,对所得到的一维向量,利用tanh进行激活,由此可以得到当前的隐藏层输出ht,最终形成一个大小为hidden_size * 1的张量。

 

         RNN Cell计ç®è¿ç¨

各个符号表示的含义:

ht ht-1:隐藏层的输出向量

xt:输入向量

hidden_size:隐藏层向量维度

input_size:输入向量维度

Wih:用于计算输入的权重,维度的大小为hidden_size * input_size

bih:输入时的偏置

Whh:隐藏层的权重,维度大小为hidden_size * hidden_size

bhh:隐藏层的偏置

tanh:激活函数,值域为(-1,+1)

+:  求和模块

代码的实现:

1.实现自己的RNN ce

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值