1. 前向传播
a
t
=
g
(
a
)
(
W
a
a
a
<
t
−
1
>
+
W
a
x
x
<
t
>
+
b
a
)
a^{t}=g^{(a)}(W_{aa}a^{<t-1>}+W_{ax}x^{<t>}+b_a)
at=g(a)(Waaa<t−1>+Waxx<t>+ba)
y
^
<
t
>
=
g
(
y
)
(
W
y
a
a
<
t
>
+
b
y
)
\hat y^{<t>}=g^{(y)}(W_{ya}a^{<t>}+b_y)
y^<t>=g(y)(Wyaa<t>+by)
or, 简化版
a
t
=
g
(
a
)
(
W
a
[
a
<
t
−
1
>
,
x
<
t
>
]
+
b
a
)
a^{t}=g^{(a)}(W_a[a^{<t-1>}, x^{<t>}]+b_a)
at=g(a)(Wa[a<t−1>,x<t>]+ba)
y
^
<
t
>
=
g
(
y
)
(
W
y
a
<
t
>
+
b
y
)
\hat y^{<t>}=g^{(y)}(W_ya^{<t>}+b_y)
y^<t>=g(y)(Wya<t>+by)
Note
- 一般而言,初始激活向量为: a < 0 > = 0 ⃗ a^{<0>}=\vec0 a<0>=0
- 通常, g ( a ) g^{(a)} g(a)选择 t a n h tanh tanh函数( t a n h tanh tanh函数梯度消失的问题会用其他方式解决),有时也会选用 r e l u relu relu函数。
- y ^ < t > = g ( y ) ( W y a a < t > + b y ) \hat y^{<t>}=g^{(y)}(W_{ya}a^{<t>}+b_y) y^<t>=g(y)(Wyaa<t>+by)如果是二分类问题,使用 s i g m o i d sigmoid sigmoid函数,如果是多分类问题,可以使用 s o f t m a x softmax softmax函数。
2. 损失函数
为了进行反向传播计算,使用梯度下降等方法来更新RNN的参数,我们需要定义一个损失函数,如下:
L
(
y
^
,
y
)
=
∑
t
=
1
T
y
L
<
t
>
(
y
^
<
t
>
,
y
<
t
>
)
=
∑
t
=
1
T
y
−
(
y
<
t
>
l
o
g
(
y
^
<
t
>
)
+
(
1
−
y
<
t
>
)
l
o
g
(
1
−
y
^
<
t
>
)
)
L(\hat y,y)=\sum^{T_y}_{t=1}L^{<t>}(\hat y^{<t>},y^{<t>})=\sum^{T_y}_{t=1}-(y^{<t>}log(\hat y^{<t>})+(1-y^{<t>})log(1-\hat y^{<t>}))
L(y^,y)=∑t=1TyL<t>(y^<t>,y<t>)=∑t=1Ty−(y<t>log(y^<t>)+(1−y<t>)log(1−y^<t>))
3. BPTT
RNN的反向传播将在后续部分有专门的介绍。