循环神经网络

本文详细介绍了循环神经网络的基本结构、前向传播过程及其变形,如LSTM和GRU,探讨了如何解决梯度消失问题,并给出了Bi-RNN的概念。此外,还提到了在PyTorch中实现RNN的相关API。
摘要由CSDN通过智能技术生成

基本结构

在这里插入图片描述如图所示,从图中可以看到输入 x, 隐含层,输出层等,这些与传统神经网络类似。自循环W却是它的一大特色。
其中U是输入层到隐含层的权重矩阵,W是状态到隐含层的权重矩阵,s为状态,V是隐含层到输出层的权重矩阵。
从图中可以看出,它的共享参数是各个时间节点对W, U,V都是不变的,这个机制就像卷积神经网络的过滤器机制一样,通过这个方法,实现参数共享,可以大大降低参数量。

隐含层结构

循环神经网络单层的全连接结构图这个网络在每个时间t都有相同的网络结构。假设 输出的 x 是 n 维向量,隐含层的神经元个数是m,输出层的神经元个数为r个,则U的矩阵大小为 n x m维,W是上一次的at-1作为这一次输入的权重矩阵,大小为m×m维;V是连输出层的权重矩阵,大小为m×r维。而xt、at和ot都是向量。
各自的含义如下:
-xt:t时刻的输入
-at是t时刻的隐层状态。是网络记忆,at基于前一时刻的隐层状态和当前时刻的输入进行计算,即at=f(Uxt+Wat-1)。函数f通常是非线性的,如tanh或者ReLU。at-1为前一个时刻的隐藏状态,其初始化通常为0;
-ot是t时刻的输出,
at认为是网络的记忆状态,at可以捕获之前所有时刻发生的信息。输出ot的计算仅仅依赖于时刻t的记忆

前向传播

一般的神经网络采用前向传播和反向来更新,RNN基本思路也是一样的,便于理解,进行图例说明:
Rnn沿着时间展开的图其中x为输入值,一般是向量,a为状态值,y为输出值或预测值,wax、waa、wya为参数矩阵。其前向传播可表示为:初始化状态a为在这里插入图片描述,然后计算状态及输出,具体如下:
在这里插入图片描述随机设置一些数字实现一下:

import numpy as np
X = [2,3]  # 输入值
state = [0.0,0.0]   # 初始状态
w_cell_state = np.asarray([[0.1,0.2],[0.3,0.4],[0.5,0.6]])  # waa = [[0.1,0.2],[0.3,0.4]] wax = [0.5,0.6]
b_cell = np.asarray([0.2,-0.2]) # b
w_output = np.asarray([[1.0],[2.0]])
b_output = 0.1
for i in range(len(X)):
    state = np.append(state,X[i])
    before_activation = np.dot(state
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值