RNN循环神经网络大白话讲解

RNN单元

RNN循环神经网络超级大白话
从上图看,input_data是输入,hidden_layer的输出是h1,从左边来的是初始的隐藏层参数为h0。

神经网络原本的公式也就是输入层X*Wih再经过设定的**函数得到h0。h0乘上Who权重矩阵得到输出层。

h
1
=
t
a
n
h
(
x

W
i
h
)
h1 = tanh(x*W_{ih})
h1=tanh(xWih)


o
u
t
p
u
t
=
h
1

W
h
o
output = h1*W_{ho}
output=h1Who

在单个完整的RNN单元中,(不加下一层),有上一层的隐藏层输出参与,因此RNN也就是循环神经网络具有记忆前面的数据的性质,(在RNN中**函数常用tanh)


h
1
=
t
a
n
h
(
x
1

W
i
h
+
h
0

W
h
h
)
h1 = tanh(x_1*W_{ih}+h_0*W_{hh})
h1=tanh(x1Wih+h0Whh)

对于下一层的h2则会继承一部分h1的内容,而h1又包含h0的内容。以此类推。

h
2
=

t
a
n
h
(
x
2

W
i
h
+
h
1

W
h
h
)
h2 = tanh(x_2*W_{ih}+h_1*W_{hh})
h2=tanh(x2Wih+h1Whh)

因此在我们进行梯度更新的时候需要计算的权重有三个,分别是
W
i
h
,
W
h
h
,
W
h
o
W_{ih},W_{hh},W_{ho}
Wih,Whh,Who

由于
W
h
h
W_{hh}
Whh
在每层的隐藏层输出中会累乘,因此会出现梯度爆炸和梯度消失的现象,这时就需要解决这个问题。因此长短期记忆网络LSTM为了解决梯度消失梯度爆炸的问题被提出,待下一篇讲解LSTM的大白话讲解。