RNN
RNN 网络是一种基础的多层反馈神经网络,该神经网络的节点定向连接成环,其内部状态可以展示动态时序行为。相比于前馈神经网络,该网络内部具有很强的记忆性,它可以利用它内部的记忆来处理任意时序的输入序列。因为循环神经网络可以将序列进行较好的处理,且时间同样也是有序数列,在实际应用中,RNN 循环神经网络对于处理时序数据具有天然的优势。
RNN结构
其中最为普遍的系统形式为:
s
(
t
)
=
f
(
s
(
t
−
1
)
;
θ
)
s^{(t)}=f(s^{(t-1)};\theta)
s(t)=f(s(t−1);θ)
利用这个公式可以将每一个序列的元素进行连接处理,将公式进行展开可以得到类似于下面的形式:
相比于前面描述的循环网络,RNN 中加入了其他参数的输入。即在某一个节点或某一时刻 t,输入网络的参数还有外界的信号 x(t),这样将上式进行重写,有:
s
(
t
)
=
f
(
s
(
t
−
1
)
,
x
(
t
)
;
θ
)
s^{(t)}=f(s^{(t-1)},x^{(t)};\theta)
s(t)=f(s(t−1),x(t);θ)
也可以理解成为对于同一个网络,每次传入的参数不同。传入参数的一部分是某一时刻 𝑡 的新参数,另一部分是上一时刻 𝑡−1 已经获取到的参数。
进行展开后可以获得下图所示的链结构:
- x(t)为t时刻的输入参数
- h(t)为隐藏层的激活函数
- o(t)为t时刻的输出参数
- L(t)为网络的损失值
- y(t)为目标函数
一般情况下使用图中蓝色线标注的迭代方式,当整个网络位数很高并且信息非常多时,可以利用橙色算法进行传参。
当输入关键信息的位置和输出信息的位置之间的节点变得非常长之后,RNN 神经网络会丧失链接到判断输出的关键信息位置的能力。在实际的应用中,对于循环神经网络,人们经常应用的是 RNN 网络的变体,例如 LSTM 网络。在 LSTM 网络中没有因为位置远近而降低输出精度的问题。
LSTM
LSTM 网络,即为长短期记忆网络。因为该网络的结构,该网络适合处理序列中间隔和延时较长的事件。在基础 RNN 网络中,之所以不能解决长期依赖问题,是因为 RNN 处理数据的计算图( 细胞体 )结构简单,只有一个非常简单的结构,比如说只进行一个 𝑆𝑖𝑔𝑚𝑜𝑖𝑑 函数的数据处理,这使得网络很难对长时间的信息进行记忆,同时网络对于哪些信息需要舍弃,哪些信息需要保留也无法做出很好的判断。
LSTM结构
在 LSTM 网络中,通过将细胞体结构复杂化,在算法中加入了判断信息是否有用的处理器。在网络中加入了三道 “ 门 ” ,分别叫做:遗忘门、输入门、输出门。信息进入网络中,网络会根据一定的规则来判断信息是否有用,有用的信息将加以保留,无用的信息将进行遗忘。
𝜎 层代表一个输出的权重,表示信息通过的量,其取值范围为 [0 1] 。
-
当取值为 0 时,代表所有信息都不能通过;
-
当取值为 1 时,代表所有信息都能通过。
网络通过接受前一个细胞体的两个参数 ℎ(𝑡−1) 、 𝐶(𝑡−1) ,以及外界给予的参数 𝑥(𝑡) ,经过三个门的过滤整合将信息传递给下一个细胞体。
遗忘门
遗忘门为网络中的第一个门,网络会对信息进行判断,决定信息的弃留。遗忘门将网络信息进行过滤,放在之后容易对新加入的信息进行错误处理。
在遗忘门中信息经过一个 𝑆𝑖𝑔𝑚𝑜𝑖𝑑 函数处理得到新的信息 𝑓1(t) ,这个网络层决定了信息的保存还是丢弃。
f
1
(
t
)
=
σ
(
W
f
1
×
[
h
(
t
−
1
)
,
x
(
t
)
]
+
b
f
1
)
f_{1}^{(t)}=\sigma(W_{f_{1}}\times[h^{(t-1)},x^{(t)}]+b_{f_{1}})
f1(t)=σ(Wf1×[h(t−1),x(t)]+bf1)
输入门
输入门分为两步进行,首先绿色线的部分需要选择什么值需要进行更新,之后黄色线的部分是确定将什么值进行传输。这两步中可以用如下公式进行解释。
绿色线部分:
f
2
(
t
)
=
σ
(
W
f
2
×
[
h
(
t
−
1
)
,
x
(
t
)
]
+
b
f
2
)
f_{2}^{(t)}=\sigma(W_{f_{2}}\times[h^{(t-1)},x^{(t)}]+b_{f_{2}})
f2(t)=σ(Wf2×[h(t−1),x(t)]+bf2)
黄色线部分:
f
3
(
t
)
=
t
a
n
h
(
W
f
3
×
[
h
(
t
−
1
)
,
x
(
t
)
]
+
b
f
3
)
f_{3}^{(t)}=tanh(W_{f_{3}}\times[h^{(t-1)},x^{(t)}]+b_{f_{3}})
f3(t)=tanh(Wf3×[h(t−1),x(t)]+bf3)
现在已经将网络信息中需要更新的旧信息予以遗忘,新信息定位好并获取其内容,之后就是将信息进行整合,更新细胞体状态,并且这里得到细胞体的一部分输出:
C
(
t
)
=
C
(
t
−
1
)
×
f
1
(
t
)
+
f
2
(
t
)
×
f
3
(
t
)
C^{(t)}=C^{(t-1)}\times f_{1}^{(t)}+f_{2}^{(t)}\times f_{3}^{(t)}
C(t)=C(t−1)×f1(t)+f2(t)×f3(t)
输出门
最后是将信息进行输出,输出门所采用的信息是将细胞状态进行处理并和初始信息整合后进行输出。
f
4
(
t
)
=
σ
(
W
f
4
×
[
h
(
t
−
1
)
,
x
(
t
)
]
+
b
f
4
)
f_{4}^{(t)}=\sigma(W_{f_{4}}\times[h^{(t-1)},x^{(t)}]+b_{f_{4}})
f4(t)=σ(Wf4×[h(t−1),x(t)]+bf4)
h
(
t
)
=
f
4
(
t
)
×
t
a
n
h
(
C
(
t
)
)
h^{(t)}=f_{4}^{(t)}\times tanh(C^{(t)})
h(t)=f4(t)×tanh(C(t))
通过最后输出门的处理,将细胞信息进行了选择,输出了我们需要的那部分信息。