RNN(Recurrent Neural Networks),循环神经网络,循环两个字便是rnn的核心特征,系统的前时刻的输入会保留在网络内,和当前时刻的输入进行运算来决定下一刻的输出。即为此刻的状态包括上一刻的历史,优势下一刻变化的依据。,在我们处理序列问题的时候使用rnn,他会自己学会类似的输入输出,所以它具有预测能力(特别是处理序列问题的时候)。

下面就是个典型的结构:

深度学习的一些基本概念-RNN

上面的就是随着时间变化的序列

  • xt是在t时刻的输入。例如,x1可以是一个用来表示句子中第二个单词的one-hot向量。

  • st是在t时刻的隐状态(hidden state),也就是网络的“记忆”。st是根据之前的隐状态和当前时刻输入所计算得到的,既:st=f(Uxt+Wst1)。函数f通常是非线性函数(**函数),例如tanh或者ReLU

  • ot是在t时刻输出。例如,如果我们想要预测句子中的下一个词,那这个输出值将会是一个词表长度的向量,表示整个词表中每一个单词的概率,既ot=softmax(Vst)

  • 下面是对RNN的具体理解:

循环神经网络
那么我们究竟能够赋予我们的网络记忆能力呢? 为了回答这个问题,让我们回想一下我们的基本隐藏层神经网络,它将一个向量X作为输入,将其乘以权重矩阵W并应用非线性。 当三个连续输入通过网络馈送时,我们会考虑输出y 。 请注意,偏差项已被消除以便简化符号,并且我已着手对方程着色以使某些模式脱颖而出。


y0=f(WxX0)
y1=f(WxX1)
y2=f(WxX2)
鉴于以上简单的API,很明显,每个输出完全由其输入决定,即在计算其值时没有过去输入的痕迹。 所以让我们通过允许隐藏层使用当前输入和前一个输入的组合来更改API,并可视化发生的情况。


y0=f(WxX0)
y1=f(WxX1+WhX0)
y2=f(WxX2+WhX1)

太好了! 通过在公式中引入重现,我们设法在每个隐藏层中获得2种颜色的混合。 直观地说,我们的网络现在的内存深度为1,相当于“看到时间倒退一步。 请记住,我们的目标是能够捕获所有以前的时间步伐的信息,所以这不会削减它。


嗯......如果我们输入当前输入和前一个隐藏层的组合,该怎么办?


y0=f(WxX0)
y1=f(WxX1+Wh f(WxX0))
y2=f(WxX2+Wh f(WxX1+Wh f(WxX0)))
好多了! 我们在每个时间步的层都混合了所有前面的颜色,从而使我们的网络在计算其输出时能够考虑其过去的所有历史记录。 这是重现其辉煌的力量:创造一个信息可以持续跨越时间步伐的循环。
                                              深度学习的一些基本概念-RNN

在其核心,一个RNN可以用一个内部的隐藏状态h表示,每个时间步更新一次,并且可以从中导出输出y  。 此更新行为受以下等式的控制:


ht=f(Wxhxt+Whhht−1+b1)

yt=g(Whyht+b2)

不要让上面的符号吓倒你。 一旦你解剖它实际上很简单。


Wxhxt - 我们正在增加投入 xt 通过权重矩阵 Wxh 。 您可以将此点积作为隐藏层从输入中提取信息的一种方式。
Whhht−1 - 这个点产品允许网络从过去的输入历史中提取信息,它将与从当前输入收集的信息一起使用,以计算其输出。 这是RNNs的关键,自定义属性。
f 和 g 是**功能,将点产品压扁到特定范围。 功能 f 通常是tanh或ReLU 。 g 当我们想要输出类概率时可以是softmax 。
b1 和 b2 是偏见,有助于抵消输出远离原点(类似于你在典型的b ax+b 线)。
正如你所看到的,RNN模型非常简单。 一旦定义了它的体系结构,对其进行训练与正常神经网络完全相同,即初始化权重矩阵和偏差,定义损失函数并使用某种形式的梯度下降来最小化损失函数。

相关文章: