循环神经网络:循环神经网络

tech2022-08-11  140

本节将介绍循环神经⽹络。它并⾮刚性地记忆所有固定⻓度的序列,而是通过隐藏状态来储存之前时间步的信息。⾸先我们回忆⼀下前⾯介绍过的多层感知机,然后描述如何添加隐藏状态来将它变成循环神经⽹络。

一、不含隐藏状态的神经网络

先考虑一个单层的多层感知机: 复习一遍隐藏层的输出、输出层的输出。 隐藏层的输出: H = ϕ ( X W x h + b h ) H=\phi (XW_{xh}+b_h) H=ϕ(XWxh+bh)

其中, W x h W_{xh} Wxh表示输入层 x x x和隐藏层 h h h之间的权重参数, b h b_h bh为隐藏层h的偏差参数。 输出层的输出: O = H W h q + b q O=HW_{hq} + b_q O=HWhq+bq

其中 q q q表示输出个数(例如分类问题的类别数)

可以看到,隐藏层 H H H的输出只由输入 x x x得到。

二、含隐藏状态的循环神经网络

首先说明:隐藏状态是一个变量——隐藏变量的别称。

前面章节说到,语言模型的一段文本,可以看做一段时间序列。这段文本中的每个词为 w t w_t wt,其中 t t t称为时间步。(相当于在原有的最基本的神经网络基础上增加了一个维度——时间维度)。下面我们就考虑这种数据存在时间相关性的情况。

假设 X t ∈ R n × d X_t \in R^{n × d} XtRn×d是序列中时间步 t t t的小批量输入, H t ∈ R n × h H_t \in R^{n × h} HtRn×h是该时间步的隐藏层变量( t t t表示时间步。 n n n表示小批量样本数。 d d d表示输入个数,及特征个数)。由于加入了时间的维度,所以每个时间步都会有一个 H H H H 1 , H 2 , H 3 , . . . , H t − 1 , H t , H t + 1 . . . , H T H_1,H_2,H_3,...,H_{t-1},H_t,H_{t+1}...,H_T H1,H2,H3,...,Ht1,Ht,Ht+1...,HT

循环神经网络的做法与多层感知机的不同之处在于:隐藏层 H t H_t Ht的输出由当前时间步的输入 X t X_t Xt和上一时间步的隐藏层变量 H t − 1 H_{t-1} Ht1得到。具体公式如下: H t = ϕ ( X t W x h + H t − 1 W h h + b h ) H_t=\phi (X_tW_{xh} + H_{t-1}W_{hh}+b_h) Ht=ϕ(XtWxh+Ht1Whh+bh)

与多层感知机的不同,除了输入输出增加了代表当前时间步的下标 t t t之外,还增加了一项 H t − 1 W h h H_{t-1}W_{hh} Ht1Whh。(通俗地理解,就是:文本可以看成我们平时说的话。而我们平时说话都是有逻辑的,每个字前前后后都是相关联的,反映到这个公式上,就是隐藏变量在不同时间步上的相关性。)

该公式的图示如下:

三、其他说明

上述隐藏变量的计算公式表明:当前的隐藏变量捕捉了截至当前时间步的序列的历史信息,就像是神经网络当前时间步的状态或记忆一样所有的时间步都使用相同的模型参数 X t W x h + H t − 1 W h h X_tW_{xh} + H_{t-1}W_{hh} XtWxh+Ht1Whh等价于 X t X_t Xt H t − t H_{t-t} Htt连接后(concat)的矩阵乘以 W x h W_{xh} Wxh W h h W_{hh} Whh连接后的矩阵
最新回复(0)