1.RNN

我们前面学习的简单的神经网络和卷积神经网络都有一个主要的特点,就是它们都没记忆能力,即他们都是单独处理每个输入,在前一个输入和后一个输入之间没有任何关系。比如你需要处理数据点或者时间序列,你就需要向网络同时展示整个序列,即将序列转换成单个数据点输入。这种输入方式的网络被称为前馈神经网络(feddforward network)

可我们在阅读句子时是一个词一个词地阅读,在阅读一个词时往往会记住上个词的意思,以此来理解整个句子所表达的含义。**循环神经网络(RNN,recurrent netural network)**就是这样一个原理,不过采取的是及其简化的过程,它的处理方式是先便利所有元素,保存一个状态,这个状态包含了已经遍历完获取的信息。如图,在处理几个不同序列时,输入序列不仅在一个步骤中进行处理,还会进入下一个步骤进行处理。即每一个节点处理的序列都含有前面所有节点的信息。
在这里插入图片描述
为了使这个过程更加容易理解,我们用简单的循环逻辑来实现一个RNN的前向传播。

#简单的RNN实现Numpy实现
import numpy as np
timesteps=100
input_feature=32
output_fearture=64
inputs=np.random.random((timesteps,input_feature))#生成100,32形状的矩阵
print(inputs)
state_t=np.zeros((output_fearture,))#生成64个全为0的数
print(state_t)
w=np.random.random((output_fearture,input_feature))
u=np.random.random((output_fearture,output_fearture))
b=np.random.random((output_fearture,))
successive_outputs=[]
for input_t in inputs:
    output_t=np.tanh(np.dot(w,input_t)+np.dot(u,state_t)+b)#np.dot表示数组点积
    successive_outputs.append(output_t)
    state_t=output_t
final_output_sequence=np.stack(successive_outputs,axis=0)
print(final_output_sequence)

2.RNN的梯度问题

2.1 RNN的结构

在这里插入图片描述

2.2 RNN的前向传播过程

在这里插入图片描述

2.3 RNN的损失函数

在这里插入图片描述

RNN的后向传播过程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

这里我们参考链接: RNN梯度问题.

3.LSTM

从理论上来说,RNN应该能够记住过去时间段见过的信息,但实际上它不可能学习长久的信息,主要是因为梯度消失的问题,上面的第二部分主要就是讲的这一部分内容。所以研究者设计出了LSTM(long short-term memory),也叫作长短期记忆。

3.1 LSTM的结构

这张图我们在很多地方都看见过,我们取出其中一个神经元来研究内部的结构。
在这里插入图片描述
注释:黄色的框代表的是激活函数,其中σ代表sigmoid函数(0-1之间),tanh自然就是tanh函数(-1-1之间);粉色的圆圈代表的是向量之间的运算。
在这里插入图片描述
注释:黄色的C代表的是携带(carry),表示的是携带跨越时间步的信息。

3.2 LSTM的遗忘门、输入门、输出门和细胞状态

遗忘门

在这里插入图片描述图中红框的地方就是遗忘门,接受t-1时刻的隐层转态h(t-1)和t时刻输入的向量Xt,然后根据权重进行计算利用sigmoid函数输出,结果越接近0,则越应该被遗忘,越接近1就越应该被保留。该层的作用主要是对输入的信息进行选择性遗忘。

输入门与细胞状态

在这里插入图片描述
图中圈住的地方叫做输入门,输入门中it的部分也可以看做是一个选择遗忘的过程,而旁边的C波浪线t代表的是新输入的信息,将这部分信息向量做乘积,就可得到新输入的信息需要保留哪部分有用信息。
在这里插入图片描述
红框中的部分叫做细胞状态,即对前一时刻携带的信息流进行更新将C(t-1)更新为C(t),图中的公式就是C(t)的更新过程。这是对过去信息的保留并更新的过程。

输出门

在这里插入图片描述
图中框住的部分叫做输出门,主要更新隐层状态ht,将得到的新的细胞状态C(t)和O(t)做向量乘积得出新ht,继续传递给下一个部分。

这就是LSTM的整个过程,说白了,LSTM相比 RNN多了一种携带信息跨域的多个时间步的方法(细胞状态C),这个方法就像一个传送带,运行方向平行于你处理的序列方向,序列中的信息可以随时跳上传送带,然后被传送带送去更远的时间步,并在需要的时候原封不动跳回来。这就是LSTM的原理。

这里我们推荐动图理解
链接: LSTM动图理解.

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐