首页 > 编程笔记 > 通用技能 阅读:2

RNN(循环神经网络)是什么(新手必看)

循环神经网络(Recurrent Neural Network,RNN)是深度学习领域里一种非常经典的网络结构,在现实生活中有着广泛的应用。

RNN 是一种有记忆的神经网络。在 RNN 里面,每一次隐藏层的神经元产生输出时,输出就会被存到记忆元(memory cell)里。下图 (a) 中的蓝色方块表示记忆元。


图 1 循环神经网络运算示例

下一次有输入时,这些神经元不仅会考虑输入 x₁ 和 x₂,还会考虑存到记忆元里的值。除了 x₁ 和 x₂,存在记忆元里的值 a₁ 和 a₂ 也会影响神经网络的输出。

记忆元简称单元(cell),记忆元的值也可称为隐状态(hidden state)。

举个例子,假设图 1(b) 中的循环神经网络的所有权重都是 1,且所有的神经元没有任何的偏置。为了便于计算,假设所有的激活函数都是线性的,输入是序列:

[1, 1]ᵀ, [1, 1]ᵀ, [2, 2]ᵀ, …

所有的权重都是 1。把这个序列输入循环神经网络里面会发生什么事呢?在使用循环神经网络的时候,必须给记忆元设置初始值,假设初始值都为 0。

输入第一个 [1, 1]ᵀ,对于左边的神经元(第一个隐藏层),除了接收到输入的 [1, 1]ᵀ 之外,还接收到了记忆元,输出为 2。同理,右边神经元的输出为 2,第二层神经元的输出为 4。

接下来,循环神经网络会将绿色神经元的输出存到记忆元里,所以记忆元里的值被更新为 2。如图 1(c) 所示,输入 [1, 1]ᵀ,于是绿色神经元的输入为 [1, 1]ᵀ 和 [2, 2]ᵀ,输出为 [6, 6]ᵀ,第二层神经元的输出为[12, 12]ᵀ。由此可见,循环神经网络有记忆元,就算输入相同,输出也可能不一样.

如图 1(d) 所示,将 [6, 6]ᵀ 存到记忆元里,接下来的输入是[2, 2]ᵀ,输出为[16, 16]ᵀ,第二层神经元的输出为[32, 32]ᵀ。循环神经网络会考虑序列的顺序,将输入序列调换顺序之后,输出将不同。

因为当前时刻的隐状态使用与上一时刻隐状态相同的定义,所以隐状态的计算是循环的(recurrent),基于循环计算的隐状态神经网络称为循环神经网络。

相关文章