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(x∗Wih)
o
u
t
p
u
t
=
h
1
∗
W
h
o
output = h1*W_{ho}
output=h1∗Who
在单个完整的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(x1∗Wih+h0∗Whh)
对于下一层的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(x2∗Wih+h1∗Whh)
因此在我们进行梯度更新的时候需要计算的权重有三个,分别是
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的大白话讲解。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:RNN循环神经网络超级大白话 - Python技术站