L
O
A
D
I
N
G

神经网络学习笔记Day6——循环神经网络


循环神经网络

参考链接:

机器学习 | 简单易懂学习RNN - 知乎 (zhihu.com)

循环神经网络详解(RNN/LSTM/GRU) - 知乎 (zhihu.com)

一、RNN循环神经网络

1.直观理解

RNN,即Recurrent Neural Network(循环神经网络),是一种拥有短期记忆力的神经网络,在处理序列数据方面有很好的效果,广泛应用于语音识别、语言翻译等任务。

至于为什么神经网络要有记忆力,我们可以类比到人脑。人脑在分析问题的时候会借助于之前已知的一些信息,也就是“上文”来进行特定场景下的判断。让神经网络有记忆力之后就可以像人脑一样进行一定程度上的分析识别,否则神经网络对于特定的输入只会给出一样的输出,变得机械且死板。

为了让神经网络记住前面的信息,我们只需要在一个普通神经网络的基础上加一个记忆单元

2.RNN结构

RNN结构如上图所示,如果将其中的记忆单元去掉,那么该神经网络就是一个普通的神经网络。多出来的记忆单元正是在隐藏层进行计算时发挥作用。

RNN中的隐藏层(图中简化为一个圈,实际可以很复杂,有多个神经元)在接收到输入$x_t$后,不是直接通过$h_t=f(x_t)$计算出$h_t$,交给输出层,而是要考虑上一个时刻对应的输出

我们将上一时刻输出$h_{t-1}$保存到记忆单元中,然后通过$h_t=f(h_{t-1}+x_t)$计算输出。

一就是说,在计算某一时刻的输出时,不仅仅要考虑这一时刻的输入,还要考虑上一时刻的输出。计算完隐藏层的输出$h_t$后,不仅要把它交给输出层,还要把它交给记忆单元,来帮助计算下一个输出,如图所示:

由于每次只记录上一时刻的输出,因此传统RNN只适合处理短时间序列的任务,面对长时间序列时存在梯度消失和梯度爆炸的问题,这限制了其对长期依赖关系的建模能力。为了解决这一问题,需要用到长短期记忆网络(LSTM)和门控循环单元(GRU)等RNN变体,通过引入门控机制来控制记忆状态的更新。

二、长短期记忆网络(LSTM)

LSTM(Long Short-Term Memory)是一种改进的RNN架构,它引入了一个记忆单元,该单元可以存储和访问信息,并通过门控机制来控制信息的流动。LSTM的关键部分包含输入门遗忘门输出门

1.遗忘门

LSTM的第一步是决定我们需要从cell状态中扔掉什么样的信息,这个决策由一个称为“遗忘门”的sigmoid层决定。输入$h_{t-1}$和$x_t$,输出一个0到1之间的数。1代表“完全保留这个值”,而0代表“完全扔掉这个值”。

遗忘门的计算方法如下:

$$
f_t=\sigma(W_f\cdot[h_{t-1},x_t]+b_f)
$$

2.输入门

第二步是决定需要在cell里存储什么信息。这一步有两个环节,首先sigmoid层调用“输入门”以决定哪些数据是需要更新的。然后,一个tanh层为新的候选值创建一个向量$\tilde{C}_t$,这些值能够加入state中。下一步,要将这两个部分合并以创建对state的更新。计算方法如下:

$$
i_t=\sigma(W_i\cdot[h_{t-1},x_t]+b_i)\\
\tilde{C}_t=tanh(W_c\cdot[h_{t-1},x_t]+b_c)
$$

在决定需要遗忘和需要加入的记忆之后,就可以更新旧的$C_{t-1}$到新的$C_t$了。这一步我们把旧的$C_{t-1}$与$f_t$相乘,遗忘先前决定遗忘的东西,然后加上$i_t*\tilde{C}_t$,可以理解为新的记忆信息。这里也体现了对状态值的更新度是有限制的,我们可以把$i_t$当成一个权重。

3.输出门

最后,需要决定要输出的东西,该输出是cell state过滤后的值。首先,运行一个sigmoid层,即输出门,以决定cell state中哪个部分是要输出的。然后我们把cell state放进tanh(将数值压到-1和1之间),最后将它与sigmoid门的输出相乘,就只输出我们所需要的部分。

$$
o_t=\sigma(W_o[h_{t-1},x_t]+b_o)\\
h_t=o_t*tanh(C_t)
$$

三、门控循环网络(GRU)

GRU(Gated Recurrent Unit)是对LSTM的略微改进,相对标准的LSTM来说更加简单,更容易训练。它将遗忘门和输入门合并成一个单一的“更新门”,同时将cell state和隐藏状态合并。

GRU与LSTM相比,主要的区别在于门控机制的设计。GRU只使用了一个更新门(update gate $z_t$)来控制信息的流动和状态的更新,减少了参数量和计算量。此外还有一个重置门(reset gate $r_t$),没有LSTM中的输出门。

$$
z_t=\sigma(W_z[h_{t-1},x_t])\\
r_t=\sigma(W_r[h_{t-1},x_t])\\
\tilde{h}_t=tanh(W[r_t \ast h_{t-1},x_t])\\
h_t=(1-z_t) \ast h_{t-1}+z_t \ast \tilde{h}_t
$$


文章作者: 叁月柒
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 叁月柒 !
评论
  目录