做这样的笔记现在只是肤浅的认识,相信以后会有深入的感悟和更加熟练的应用
1.循环神经网络简介
下面是各个参数的含义
-
x t x_{t} xt是t时刻的输入
-
a t a_t at是时刻 t t t的隐层状态,由前一时刻的隐层状态和当前时刻的输入进行计算; a t a_t at可以认为是网络的记忆状态,可以认为捕获之前所有时刻发生的信息。
a t = f ( U x t + W a t − 1 ) a_t=f(Ux_t+Wa_{t-1}) at=f(Uxt+Wat−1)
-
o t o_t ot是t时刻的输出。
2.前向传播和随时间反向传播
a
<
t
>
=
tanh
(
[
a
<
t
−
1
>
x
t
]
[
W
a
a
W
a
x
]
+
b
a
)
a^{<t>}=\tanh([a^{<t-1>}x^{t}][W_{aa}W_{ax}]+b_a)
a<t>=tanh([a<t−1>xt][WaaWax]+ba)
y ^ t = s i g m o i d ( a < t > w y + b y ) \hat y^{t}= sigmoid(a^{<t>}w_y+b_y) y^t=sigmoid(a<t>wy+by)
L < t > ( y ^ < t > , y < t > ) = − y < t > log y ^ < t > + ( 1 − y < t > ) log ( 1 − y ^ < t > ) L^{<t>}(\hat y^{<t>}, y^{<t>})=-y^{<t>}\log \hat y^{<t>}+(1-y^{<t>})\log (1-\hat y^{<t>}) L<t>(y^<t>,y<t>)=−y<t>logy^<t>+(1−y<t>)log(1−y^<t>)
m i n L ( y ^ , y ) = ∑ t = 1 T y L < t > ( y ^ < t > , y < t > ) min L(\hat y, y)=\displaystyle \sum_{t=1}^{T_y} L^{<t>}(\hat y^{<t>}, y^{<t>}) minL(y^,y)=t=1∑TyL<t>(y^<t>,y<t>)
3.梯度消失或者爆炸
- 由于网络结构变深,使得模型丧失了学习先前信息的能力。通俗的来说就是标准的循环神经网络虽然有了记忆但是很健忘。循环神经网络实际上是在长时间序列的各个时刻重复应用相同操作来构建非常深的计算图。例如W是一个在时间步中反复被乘的矩阵,比方说 W W W可以用于矩阵分解
- W t = ( V d i a g ( λ ) V − 1 ) t W^t = (Vdiag(\lambda)V^{-1})^{t} Wt=(Vdiag(λ)V−1)t; 如果特征值 λ \lambda λ不为1,大于1会导致爆炸,小于1会导致消失。
处理梯度爆炸问题可以用梯度裁剪的方法
处理梯度消失问题目前流行的一种方法是长短时记忆网络LSTM
L
o
n
g
S
h
o
r
t
−
T
e
r
m
M
e
m
o
r
y
\displaystyle Long Short-Term Memory
LongShort−TermMemory
[1]: 与先后顺序有关的数据我们称之为序列数据