RNN及其梯度分析
本文是笔者《动手学深度学习》的学习笔记,如有谬误,请随时指出。
语言模型
对于一个基于历史数据来预测未来数据的任务,一定存在一个前提假设:序列本身的规律是不变的。这是因为,如果规律变化,那么规律一定受到新的数据影响,并且我们不能基于目前的数据来找到新的规律,此时基于历史数据来预测未来数据没有意义。因此,只要我们希望基于历史数据预测未来数据,一定存在序列规律不变这一假设。
假设存在一个文本序列
x
1
,
…
,
x
T
x_1, \ldots, x_T
x1,…,xT,其中
x
t
x_t
xt代表在时间步
t
∈
Z
+
t\in\mathbb{Z}^+
t∈Z+时的词元(token)。我们希望基于过去的文本预测
x
t
x_t
xt值,可以采用如下方式
X
t
∼
P
(
X
t
∣
X
1
=
x
1
,
…
,
X
t
−
1
=
x
t
−
1
)
X_t \sim P(X_t|X_1=x_1, \ldots, X_{t-1}=x_{t-1})
Xt∼P(Xt∣X1=x1,…,Xt−1=xt−1)
其中
X
i
X_i
Xi为随机变量,
x
i
x_i
xi为观测值,故
x
t
x_t
xt可以取值为
x
t
=
arg
max
P
(
X
t
=
x
∣
X
1
=
x
1
,
…
,
X
t
−
1
=
x
t
−
1
)
x_t = \arg\max P(X_t=x|X_1=x_1, \ldots, X_{t-1}=x_{t-1})
xt=argmaxP(Xt=x∣X1=x1,…,Xt−1=xt−1)
此时问题变为了如何估计
P
(
X
t
∣
X
1
=
x
1
,
…
,
X
t
−
1
=
x
t
−
1
)
P(X_t|X_1=x_1, \ldots, X_{t-1}=x_{t-1})
P(Xt∣X1=x1,…,Xt−1=xt−1),为了方便起见删去
X
i
X_i
Xi,以下的
x
i
x_i
xi均代表随机变量。根据贝叶斯公式:
P
(
x
t
∣
x
1
,
…
,
x
t
−
1
)
=
P
(
x
1
,
…
,
x
t
)
P
(
x
1
,
…
,
x
t
−
1
)
P(x_t|x_1,\ldots, x_{t-1}) = \frac{P(x_1, \ldots, x_t)}{P(x_1, \ldots, x_{t-1})}
P(xt∣x1,…,xt−1)=P(x1,…,xt−1)P(x1,…,xt)
因此我们只需要得到
P
(
x
1
,
…
,
x
T
)
P(x_1, \ldots, x_T)
P(x1,…,xT),对于任意的
t
<
T
t<T
t<T都可以得到
P
(
x
1
,
…
,
x
t
)
P(x_1, \ldots, x_t)
P(x1,…,xt),而语言模型的目标正好是估计联合概率
P
(
x
1
,
,
…
,
x
T
)
P(x_1,, \ldots, x_T)
P(x1,,…,xT)
对于一个理想的语言模型,只要能获得前面的对话片段,即可生成一个有意义的对话。
学习语言模型
那么如何根据一个文档来估计语言模型的联合概率呢?一个基本的概率规则是:
P
(
x
1
,
…
,
x
T
)
=
∏
t
=
1
T
P
(
x
t
∣
x
1
,
…
,
x
t
−
1
)
P(x_1, \ldots, x_T) = \prod_{t=1}^T P(x_t|x_1, \ldots, x_{t-1})
P(x1,…,xT)=t=1∏TP(xt∣x1,…,xt−1)
对于
P
(
x
t
∣
x
1
,
…
,
x
t
−
1
)
P(x_t|x_1, \ldots, x_{t-1})
P(xt∣x1,…,xt−1)我们可以采用如下方法来估计:
P
^
(
x
t
∣
x
1
,
…
,
x
t
−
1
)
=
n
(
x
1
,
…
,
x
t
)
n
(
x
1
,
…
,
x
t
−
1
)
\hat{P}(x_t|x_1, \ldots, x_{t-1}) = \frac{n(x_1, \ldots, x_t)}{n(x_1, \ldots, x_{t-1})}
P^(xt∣x1,…,xt−1)=n(x1,…,xt−1)n(x1,…,xt)
其中
n
(
x
1
,
…
,
x
t
)
n(x_1, \ldots, x_t)
n(x1,…,xt)代表序列
x
1
,
…
,
x
t
x_1, \ldots, x_t
x1,…,xt在文本中出现的次数。此时出现了两个问题:
- 当序列 x 1 , … , x t x_1, \ldots, x_t x1,…,xt在文本中没有出现时, P ( x t ∣ x 1 , … , x t − 1 ) P(x_t|x_1, \ldots, x_{t-1}) P(xt∣x1,…,xt−1)必定为零。这说明了如果采用此种方法,无法产生出文本中没有出现过的文本序列。
- 当 T T T较大时,假设词表长度为 V \mathcal{V} V,每个 x i x_i xi都存在 V \mathcal{V} V种取值, x 1 , … , x T x_1, \ldots, x_T x1,…,xT则存在 V T \mathcal{V}^T VT种组合,对于每种组合都需要计算 P ( x 1 , … , x T ) P(x_1, \ldots, x_T) P(x1,…,xT),此时计算量巨大。
对于第一个问题,我们可以采用拉普拉斯平滑的方式来缓解,具体来说:
P
^
(
x
t
)
=
n
(
x
t
)
+
ϵ
1
/
m
n
+
ϵ
1
P
^
(
x
t
∣
x
1
,
…
,
x
t
−
1
)
=
n
(
x
1
,
…
,
x
t
)
+
ϵ
t
P
^
(
x
t
)
n
(
x
1
,
…
,
x
t
−
1
)
+
ϵ
t
\hat{P}(x_t) = \frac{n(x_t)+\epsilon_1/m}{n+\epsilon_1}\\ \hat{P}(x_t|x_1, \ldots, x_{t-1}) = \frac{n(x_1, \ldots, x_t)+\epsilon_t\hat{P}(x_t)}{n(x_1, \ldots, x_{t-1})+\epsilon_t}
P^(xt)=n+ϵ1n(xt)+ϵ1/mP^(xt∣x1,…,xt−1)=n(x1,…,xt−1)+ϵtn(x1,…,xt)+ϵtP^(xt)
其中
m
m
m代表词表的长度,
n
n
n代表单词总数,
ϵ
1
\epsilon_1
ϵ1和
ϵ
t
\epsilon_t
ϵt均为超参数,当
ϵ
1
=
0
\epsilon_1=0
ϵ1=0时,不使用拉普拉斯平滑;当
ϵ
→
∞
\epsilon\rightarrow\infty
ϵ→∞时,接近均匀分布。
对于第二个问题,现在有两种策略:
- 假设 x t x_t xt仅与 x t − 1 , … , x t − τ x_{t-1}, \ldots, x_{t-\tau} xt−1,…,xt−τ相关,因此有 P ( x 1 , … , x T ) = ∏ t = 1 T P ( x t ∣ x 1 , … , x t − τ ) P(x_1, \ldots, x_T) = \prod_{t=1}^TP(x_t|x_1, \ldots, x_{t-\tau}) P(x1,…,xT)=∏t=1TP(xt∣x1,…,xt−τ)。
- 使用 h t h_t ht来总结 x 1 , … , x t − 1 x_1, \ldots, x_{t-1} x1,…,xt−1的信息,因此有 P ( x 1 , … , x T ) = ∏ t = 1 T P ( x t ∣ h t ) P(x_1, \ldots, x_T) = \prod_{t=1}^TP(x_t|h_t) P(x1,…,xT)=∏t=1TP(xt∣ht),其中 h t = g ( h t − 1 , x t ) h_t=g(h_{t-1}, x_{t}) ht=g(ht−1,xt)。
暂时只考虑第一种策略,这种策略又称为
n
n
n元语法。我们从文档中分别采集一元语法(unigram)、二元语法(bigram)和三元语法(trigram)的词频:
从图中可以看出:
- 第 i i i个最常用的单词频率 n i n_i ni与其排名几乎成反比,随着语法词元数增多,曲线放缓。这说明了如果使用拉普拉斯平滑,将会大大高估尾部单词的频率。
- 词表中的 n n n元组存在许多结构。n元语法的种类是指数增长的,会很大,但是大部分出现次数很少,不能当作结构,因此可以设定一个阈值,小于这个阈值的n元组全部丢掉
可以发现, n n n元语法中模型参数依然是指数增长的,如果 n n n太小没有办法学习到有效的结构,如果 n n n太大模型参数量呈指数增长,并且使用 n n n元语法常常需要进行拉普拉斯平滑,而拉普拉斯平滑又存在一些缺陷。因此考虑第二种策略。
循环神经网络
从MLP到RNN
考虑只有一个单隐含层的多层感知机(MLP)。令激活函数为
ϕ
\phi
ϕ,给定小批量样本
X
∈
R
n
×
d
\mathbf{X}\in\mathbb{R}^{n\times d}
X∈Rn×d,其中
n
n
n为批量大小,
d
d
d为维度,隐藏层的输出为
H
∈
R
n
×
h
\mathbf{H}\in\mathbb{R}^{n\times h}
H∈Rn×h,权重参数
W
x
h
∈
R
d
×
h
\mathbf{W}_{xh}\in\mathbb{R}^{d\times h}
Wxh∈Rd×h,偏置参数
b
h
∈
R
1
×
h
\mathbf{b}_h\in\mathbb{R}^{1\times h}
bh∈R1×h,容易看出隐含层单元数目为
h
h
h
H
=
ϕ
(
X
W
x
h
+
b
h
)
O
=
H
W
h
q
+
b
q
\mathbf{H} = \phi(\mathbf{X}\mathbf{W}_{xh}+\mathbf{b}_h)\\ \mathbf{O} = \mathbf{H}\mathbf{W}_{hq}+\mathbf{b}_q
H=ϕ(XWxh+bh)O=HWhq+bq
其中输出变量
O
∈
R
n
×
q
\mathbf{O}\in\mathbb{R}^{n\times q}
O∈Rn×q,权重参数
W
h
q
∈
R
h
×
q
\mathbf{W}_{hq}\in\mathbb{R}^{h\times q}
Whq∈Rh×q,偏执参数
b
q
∈
R
1
×
q
\mathbf{b}_q\in\mathbb{R}^{1\times q}
bq∈R1×q。对于一个分类问题,对输出做
softmax
(
O
)
\text{softmax}(\mathbf{O})
softmax(O)即可,令
x
∈
R
d
\mathbf{x}\in\mathbb{R}^d
x∈Rd
softmax
(
x
i
)
=
exp
(
x
i
)
∑
j
=
1
d
exp
(
x
j
)
\text{softmax}(\mathbf{x}_i) = \frac{\exp(\mathbf{x}_i)}{\sum_{j=1}^d \exp(\mathbf{x}_j)}
softmax(xi)=∑j=1dexp(xj)exp(xi)
对矩阵
O
\mathbf{O}
O执行
softmax
(
⋅
)
\text{softmax}(\cdot)
softmax(⋅)操作即对每个行向量作
softmax
\text{softmax}
softmax即可。
考虑基于MLP引入隐藏变量
H
t
\mathbf{H}_t
Ht,此时
X
t
\mathbf{X}_t
Xt代表时间步
t
t
t的小批量输入,根据
h
t
=
g
(
h
t
−
1
,
x
t
)
h_t=g(h_{t-1}, x_{t})
ht=g(ht−1,xt)扩展得出
H
t
=
ϕ
(
X
t
W
x
h
+
H
t
−
1
W
h
h
+
b
h
)
O
t
=
H
t
W
h
q
+
b
q
\mathbf{H}_t = \phi(\mathbf{X}_t\mathbf{W}_{xh}+\mathbf{H}_{t-1}\mathbf{W}_{hh}+\mathbf{b}_h)\\ \mathbf{O}_t = \mathbf{H}_t\mathbf{W}_{hq}+\mathbf{b}_q
Ht=ϕ(XtWxh+Ht−1Whh+bh)Ot=HtWhq+bq
值得一提的是,即使在不同的时间步,循环神经网络也总是使用这些模型参数。因此,循环神经网络的参数开销不会随着时间步的增加而增加。
困惑度(Perplexity)
困惑度用于评估语言模型的质量,定义为
exp
(
−
1
n
∑
t
=
1
n
log
P
(
x
t
∣
x
t
−
1
,
…
,
x
1
)
)
\exp\left(-\frac{1}{n}\sum_{t=1}^n\log P(x_t|x_{t-1},\ldots, x_1)\right)
exp(−n1t=1∑nlogP(xt∣xt−1,…,x1))
稍微推导一下
exp
(
−
1
n
∑
t
=
1
n
log
P
(
x
t
∣
x
t
−
1
,
…
,
x
1
)
)
=
exp
(
−
1
n
log
P
(
x
1
,
…
,
x
n
)
)
=
P
(
x
1
,
…
,
x
n
)
−
1
n
\begin{align*} \exp\left(-\frac{1}{n}\sum_{t=1}^n\log P(x_t|x_{t-1},\ldots, x_1)\right) &= \exp(-\frac{1}{n}\log P(x_1, \ldots, x_n))\\ &= P(x_1, \ldots, x_n)^{-\frac{1}{n}} \end{align*}
exp(−n1t=1∑nlogP(xt∣xt−1,…,x1))=exp(−n1logP(x1,…,xn))=P(x1,…,xn)−n1
为什么要把这么简单的式子定义的这么麻烦?这是为了便于计算,因为时间步
t
t
t时RNN输出的值可以看作
P
(
x
t
∣
x
1
,
…
,
x
t
−
1
)
P(x_t|x_1, \ldots, x_{t-1})
P(xt∣x1,…,xt−1),按照最初的式子,我们只需要把每次RNN的输出值加起来就行了。
- 在最好的情况下,模型总是完美地估计标签词元的概率为1。在这种情况下,模型的困惑度为1。
- 在最坏的情况下,模型总是预测标签词元的概率为0。在这种情况下,困惑度是正无穷大。
- 在基线下,对于所有 P ( x t ∣ x 1 , … , x t − 1 ) P(x_t|x_1, \ldots, x_{t-1}) P(xt∣x1,…,xt−1)都是一个均匀分布,代入后可得困惑值为 V \mathcal{V} V
梯度分析
为了方便起见,先不考虑矩阵形式和具体计算过程。存在输入序列
x
1
,
…
,
x
T
x_1, \ldots, x_T
x1,…,xT,则预测序列为
(
x
1
,
h
1
,
o
1
)
,
…
,
(
x
T
,
h
T
,
o
T
)
(x_1, h_1, o_1), \ldots, (x_T, h_T, o_T)
(x1,h1,o1),…,(xT,hT,oT),其中
h
i
h_i
hi代表隐藏变量,
o
i
o_i
oi代表输出值,标签序列为
y
1
,
…
,
y
T
y_1, \ldots, y_T
y1,…,yT,隐藏层权重和输出层权重分别为
w
h
,
w
o
w_h, w_o
wh,wo,有:
h
t
=
f
(
x
t
,
h
t
−
1
,
w
h
)
o
t
=
g
(
h
t
,
w
o
)
L
(
x
1
,
…
,
x
T
,
y
1
,
…
,
y
T
,
w
h
,
w
o
)
=
1
T
∑
t
=
1
T
l
(
o
t
,
y
t
)
h_t = f(x_t, h_{t-1}, w_h)\\ o_t = g(h_t, w_o)\\ L(x_1, \ldots, x_T, y_1, \ldots, y_T, w_h, w_o) = \frac{1}{T}\sum_{t=1}^T l(o_t, y_t)
ht=f(xt,ht−1,wh)ot=g(ht,wo)L(x1,…,xT,y1,…,yT,wh,wo)=T1t=1∑Tl(ot,yt)
于是对
w
h
w_h
wh求偏导可得:
∂
L
∂
w
h
=
1
T
∑
t
=
1
T
∂
l
(
o
t
,
y
t
)
∂
w
h
=
1
T
∑
t
=
1
T
∂
l
(
o
t
,
y
t
)
∂
o
t
∂
g
∂
h
t
∂
h
t
∂
w
h
=
1
T
∑
t
=
1
T
∂
l
(
o
t
,
y
t
)
∂
o
t
∂
g
∂
h
t
(
∂
f
∂
w
h
+
∂
f
∂
h
t
−
1
∂
h
t
−
1
∂
w
h
)
\begin{align*} \frac{\partial L}{\partial w_h} &= \frac{1}{T}\sum_{t=1}^T\frac{\partial l(o_t, y_t)}{\partial w_h} \\ &= \frac{1}{T}\sum_{t=1}^T \frac{\partial l(o_t, y_t)}{\partial o_t}\frac{\partial g}{\partial h_t}\frac{\partial h_t}{\partial w_h}\\ &= \frac{1}{T}\sum_{t=1}^T \frac{\partial l(o_t, y_t)}{\partial o_t}\frac{\partial g}{\partial h_t}(\frac{\partial f}{\partial w_h}+\frac{\partial f}{\partial h_{t-1}}\frac{\partial h_{t-1}}{\partial w_h}) \end{align*}
∂wh∂L=T1t=1∑T∂wh∂l(ot,yt)=T1t=1∑T∂ot∂l(ot,yt)∂ht∂g∂wh∂ht=T1t=1∑T∂ot∂l(ot,yt)∂ht∂g(∂wh∂f+∂ht−1∂f∂wh∂ht−1)
由于
∂
h
t
∂
w
h
=
∂
f
∂
w
h
+
∂
f
∂
h
t
−
1
∂
h
t
−
1
∂
w
h
\frac{\partial h_t}{\partial w_h} = \frac{\partial f}{\partial w_h}+\frac{\partial f}{\partial h_{t-1}}\frac{\partial h_{t-1}}{\partial w_h}
∂wh∂ht=∂wh∂f+∂ht−1∂f∂wh∂ht−1,令
a
t
=
∂
h
t
∂
w
h
b
=
∂
f
∂
w
h
c
t
=
∂
f
∂
h
t
−
1
a_t = \frac{\partial h_t}{\partial w_h} \quad b = \frac{\partial f}{\partial w_h} \quad c_t = \frac{\partial f}{\partial h_{t-1}}
at=∂wh∂htb=∂wh∂fct=∂ht−1∂f
有
a
t
=
b
+
c
t
⋅
a
t
−
1
=
b
+
c
t
⋅
(
b
+
c
t
−
1
⋅
a
t
−
2
)
=
b
+
c
t
⋅
b
+
c
t
⋅
c
t
−
1
⋅
a
t
−
2
=
b
+
c
t
⋅
b
+
…
+
c
t
…
c
2
⋅
b
=
b
+
∑
i
=
1
t
−
1
(
∏
j
=
i
+
1
t
c
j
)
b
\begin{align*} a_t &= b+c_t\cdot a_{t-1}\\ &= b+c_t\cdot(b+c_{t-1}\cdot a_{t-2})\\ &= b+c_t\cdot b+c_t\cdot c_{t-1}\cdot a_{t-2}\\ &= b+c_t\cdot b+\ldots+c_t\ldots c_2\cdot b\\ &= b+\sum_{i=1}^{t-1}\left(\prod_{j=i+1}^t c_j\right)b \end{align*}
at=b+ct⋅at−1=b+ct⋅(b+ct−1⋅at−2)=b+ct⋅b+ct⋅ct−1⋅at−2=b+ct⋅b+…+ct…c2⋅b=b+i=1∑t−1(j=i+1∏tcj)b
代入原变量可得
∂
L
∂
w
h
=
1
T
∑
t
=
1
T
∂
l
(
o
t
,
y
t
)
∂
o
t
⋅
∂
g
∂
h
t
(
∂
f
∂
w
h
+
∑
i
=
1
t
−
1
(
∏
j
=
i
+
1
t
∂
f
∂
h
j
−
1
)
∂
f
∂
w
h
)
\frac{\partial L}{\partial w_h} = \frac{1}{T}\sum_{t=1}^T \frac{\partial l(o_t, y_t)}{\partial o_t}\cdot \frac{\partial g}{\partial h_t}\left(\frac{\partial f}{\partial w_h}+\sum_{i=1}^{t-1}(\prod_{j=i+1}^t \frac{\partial f}{\partial h_{j-1}})\frac{\partial f}{\partial w_h}\right)
∂wh∂L=T1t=1∑T∂ot∂l(ot,yt)⋅∂ht∂g(∂wh∂f+i=1∑t−1(j=i+1∏t∂hj−1∂f)∂wh∂f)
如果我们完全计算出梯度,当
t
t
t较大时,计算非常缓慢,并且可能会发生梯度爆炸或梯度消失,因为初始条件的微小变化就可能会对结果产生巨大的影响。因此我们不能完全计算出梯度,我们存在以下两种解决方案:
- 截断时间步:在 τ \tau τ步后截断求和计算
- 随机截断:定义随机变量
ξ
t
\xi_t
ξt,其中
P
(
ξ
t
=
0
)
=
1
−
π
t
,
P
(
ξ
t
=
π
t
−
1
)
=
π
t
P(\xi_t = 0)=1-\pi_t, P(\xi_t=\pi_t^{-1})=\pi_t
P(ξt=0)=1−πt,P(ξt=πt−1)=πt,此时
E
[
ξ
t
]
=
1
\mathbb{E}[\xi_t] = 1
E[ξt]=1,将梯度
∂
h
t
/
∂
w
h
\partial h_t/\partial w_h
∂ht/∂wh替换为
z t = ∂ f ∂ w h + ξ t ∂ f ∂ h t − 1 ∂ h t − 1 ∂ w h z_t = \frac{\partial f}{\partial w_h}+\xi_t\frac{\partial f}{\partial h_{t-1}}\frac{\partial h_{t-1}}{\partial w_h} zt=∂wh∂f+ξt∂ht−1∂f∂wh∂ht−1
此时 E [ z t ] = ∂ h t / ∂ w h \mathbb{E}[z_t] = \partial h_t/\partial w_h E[zt]=∂ht/∂wh。
这两种截断策略实际上就是将整个文本截断,然后训练。虽然随机截断在理论上具有吸引力,但很可能是由于多种因素在实践中并不比常规截断更好。因此我们一般还是使用常规截断。
反向传播细节
令
x
t
∈
R
d
x_t\in\mathbb{R}^d
xt∈Rd为单样本输入,
W
h
x
∈
R
h
×
d
,
W
h
h
∈
R
h
×
h
,
W
q
h
∈
R
q
×
h
,
b
h
∈
R
h
,
b
q
∈
R
q
,
h
t
∈
R
h
\mathbf{W}_{hx}\in\mathbb{R}^{h\times d}, \mathbf{W}_{hh}\in\mathbb{R}^{h\times h}, \mathbf{W}_{qh}\in\mathbb{R}^{q\times h}, \mathbf{b}_h\in\mathbb{R}^h, \mathbb{b}_q\in\mathbb{R}^q, h_t\in\mathbb{R}^h
Whx∈Rh×d,Whh∈Rh×h,Wqh∈Rq×h,bh∈Rh,bq∈Rq,ht∈Rh,有
h
t
=
ϕ
(
W
h
x
x
t
+
W
h
h
h
t
−
1
+
b
h
)
o
t
=
W
q
h
h
t
+
b
q
L
(
x
1
,
…
,
x
T
,
y
1
,
…
,
y
T
,
W
h
x
,
W
q
h
,
W
h
h
,
b
h
,
b
q
)
=
1
T
∑
t
=
1
T
l
(
o
t
,
y
t
)
h_t = \phi(\mathbf{W}_{hx}x_t+\mathbf{W}_{hh}h_{t-1}+\mathbf{b}_h)\\ \mathbf{o}_t = \mathbf{W}_{qh}h_t+\mathbf{b}_q\\ L(x_1, \ldots, x_T, y_1, \ldots, y_T, \mathbf{W}_{hx}, \mathbf{W}_{qh}, \mathbf{W}_{hh}, \mathbf{b}_h, \mathbf{b}_q) = \frac{1}{T}\sum_{t=1}^T l(\mathbf{o}_t, y_t)
ht=ϕ(Whxxt+Whhht−1+bh)ot=Wqhht+bqL(x1,…,xT,y1,…,yT,Whx,Wqh,Whh,bh,bq)=T1t=1∑Tl(ot,yt)
求
∂
L
/
∂
W
q
h
\partial L/\partial \mathbf{W}_{qh}
∂L/∂Wqh和
∂
L
/
∂
b
h
\partial L/\partial \mathbf{b}_h
∂L/∂bh
d
L
=
1
T
∑
t
=
1
T
d
l
=
1
T
∑
t
=
1
T
(
∂
l
∂
o
t
)
⊤
d
o
t
=
1
T
∑
t
=
1
T
(
∂
l
∂
o
t
)
⊤
d
(
W
q
h
h
t
+
b
q
)
=
1
T
∑
t
=
1
T
(
∂
l
∂
o
t
)
⊤
d
b
q
+
1
T
∑
t
=
1
T
(
∂
l
∂
o
t
)
⊤
d
(
W
q
h
)
h
t
=
1
T
∑
t
=
1
T
(
∂
l
∂
o
t
)
⊤
d
b
q
+
1
T
∑
t
=
1
T
tr
(
(
∂
l
∂
o
t
)
⊤
d
(
W
q
h
)
h
t
)
=
1
T
∑
t
=
1
T
(
∂
l
∂
o
t
)
⊤
d
b
q
+
1
T
∑
t
=
1
T
tr
(
h
t
(
∂
l
∂
o
t
)
⊤
d
(
W
q
h
)
)
\begin{align*} \text{d} L &= \frac{1}{T}\sum_{t=1}^T\text{d} l\\ &= \frac{1}{T}\sum_{t=1}^T(\frac{\partial l}{\partial \mathbf{o}_t})^\top\text{d}\mathbf{o}_t\\ &= \frac{1}{T}\sum_{t=1}^T(\frac{\partial l}{\partial \mathbf{o}_t})^\top\text{d}\mathbf(\mathbf{W}_{qh}h_t+\mathbf{b}_q)\\ & = \frac{1}{T}\sum_{t=1}^T(\frac{\partial l}{\partial \mathbf{o}_t})^\top\text{d}\mathbf{b}_q+\frac{1}{T}\sum_{t=1}^T(\frac{\partial l}{\partial \mathbf{o}_t})^\top\text{d}\mathbf(\mathbf{W}_{qh})h_t\\ &= \frac{1}{T}\sum_{t=1}^T(\frac{\partial l}{\partial \mathbf{o}_t})^\top\text{d}\mathbf{b}_q+\frac{1}{T}\sum_{t=1}^T\text{tr}((\frac{\partial l}{\partial \mathbf{o}_t})^\top\text{d}\mathbf(\mathbf{W}_{qh})h_t)\\ &= \frac{1}{T}\sum_{t=1}^T(\frac{\partial l}{\partial \mathbf{o}_t})^\top\text{d}\mathbf{b}_q+\frac{1}{T}\sum_{t=1}^T\text{tr}(h_t(\frac{\partial l}{\partial \mathbf{o}_t})^\top\text{d}\mathbf(\mathbf{W}_{qh}))\\ \end{align*}
dL=T1t=1∑Tdl=T1t=1∑T(∂ot∂l)⊤dot=T1t=1∑T(∂ot∂l)⊤d(Wqhht+bq)=T1t=1∑T(∂ot∂l)⊤dbq+T1t=1∑T(∂ot∂l)⊤d(Wqh)ht=T1t=1∑T(∂ot∂l)⊤dbq+T1t=1∑Ttr((∂ot∂l)⊤d(Wqh)ht)=T1t=1∑T(∂ot∂l)⊤dbq+T1t=1∑Ttr(ht(∂ot∂l)⊤d(Wqh))
因此有
∂
L
∂
W
q
h
=
1
T
∑
t
=
1
T
∂
l
∂
o
t
h
t
⊤
,
∂
L
∂
b
q
=
1
T
∑
t
=
1
T
∂
l
∂
o
t
\frac{\partial L}{\partial \mathbf{W}_{qh}} = \frac{1}{T}\sum_{t=1}^T\frac{\partial l}{\partial \mathbf{o}_t}h_t^\top, \quad \frac{\partial L}{\partial \mathbf{b}_q} = \frac{1}{T}\sum_{t=1}^T\frac{\partial l}{\partial \mathbf{o}_t}
∂Wqh∂L=T1t=1∑T∂ot∂lht⊤,∂bq∂L=T1t=1∑T∂ot∂l
接下来求
∂
L
/
∂
h
t
\partial L/\partial h_t
∂L/∂ht,当
t
=
T
t=T
t=T时有
d
L
=
1
T
∑
t
=
1
T
d
l
=
1
T
∑
t
=
1
T
(
∂
l
∂
o
t
)
⊤
d
o
t
=
(
∂
l
T
∂
o
T
)
⊤
W
q
h
d
h
T
\begin{align*} \text{d} L &= \frac{1}{T}\sum_{t=1}^T\text{d} l\\ &= \frac{1}{T}\sum_{t=1}^T(\frac{\partial l}{\partial \mathbf{o}_t})^\top\text{d}\mathbf{o}_t\\ &= (\frac{\partial l}{T\partial \mathbf{o}_T})^\top\mathbf{W}_{qh}\text{d}h_T \end{align*}
dL=T1t=1∑Tdl=T1t=1∑T(∂ot∂l)⊤dot=(T∂oT∂l)⊤WqhdhT
即
∂
L
∂
h
T
=
1
T
W
q
h
⊤
∂
l
∂
o
T
\frac{\partial L}{\partial h_T} = \frac{1}{T}\mathbf{W}_{qh}^\top\frac{\partial l}{\partial \mathbf{o}_T}
∂hT∂L=T1Wqh⊤∂oT∂l
当
t
<
T
t<T
t<T时,令
u
j
=
W
h
x
x
j
+
W
h
h
h
j
−
1
+
b
h
\mathbf{u}_j = \mathbf{W}_{hx}x_j+\mathbf{W}_{hh}h_{j-1}+\mathbf{b}_h
uj=Whxxj+Whhhj−1+bh有
d
L
=
1
T
∑
i
=
1
T
d
l
(
o
i
,
y
i
)
=
1
T
∑
i
=
t
T
d
l
(
o
i
,
y
i
)
=
1
T
∑
i
=
t
T
∂
l
∂
o
i
⊤
d
(
W
q
h
h
i
+
b
q
)
=
1
T
∑
i
=
t
T
∂
l
∂
o
i
⊤
W
q
h
d
h
i
=
1
T
∑
i
=
t
T
∂
l
∂
o
i
⊤
W
q
h
(
∂
ϕ
∂
u
i
)
⊤
W
h
h
d
h
i
−
1
=
1
T
∑
i
=
t
T
(
∂
l
∂
o
i
)
⊤
W
q
h
(
∏
j
=
t
i
(
∂
ϕ
∂
u
j
)
⊤
W
h
h
)
d
h
t
\begin{align*} \text{d}L &= \frac{1}{T}\sum_{i=1}^T \text{d} l(\mathbf{o}_i, y_i)\\ &= \frac{1}{T}\sum_{i=t}^T \text{d} l(\mathbf{o}_i, y_i)\\ &= \frac{1}{T}\sum_{i=t}^T \frac{\partial l}{\partial \mathbf{o}_i}^\top \text{d}(\mathbf{W}_{qh}h_i+\mathbf{b}_q)\\ &= \frac{1}{T}\sum_{i=t}^T \frac{\partial l}{\partial \mathbf{o}_i}^\top\mathbf{W}_{qh}\text{d}h_i\\ &= \frac{1}{T}\sum_{i=t}^T \frac{\partial l}{\partial \mathbf{o}_i}^\top\mathbf{W}_{qh}(\frac{\partial \phi}{\partial \mathbf{u}_i})^\top\mathbf{W}_{hh}\text{d}h_{i-1}\\ &= \frac{1}{T}\sum_{i=t}^T(\frac{\partial l}{\partial \mathbf{o}_i})^\top\mathbf{W}_{qh}\left(\prod_{j=t}^i(\frac{\partial \phi}{\partial \mathbf{u}_j})^\top \mathbf{W}_{hh}\right)\text{d}h_t \end{align*}
dL=T1i=1∑Tdl(oi,yi)=T1i=t∑Tdl(oi,yi)=T1i=t∑T∂oi∂l⊤d(Wqhhi+bq)=T1i=t∑T∂oi∂l⊤Wqhdhi=T1i=t∑T∂oi∂l⊤Wqh(∂ui∂ϕ)⊤Whhdhi−1=T1i=t∑T(∂oi∂l)⊤Wqh(j=t∏i(∂uj∂ϕ)⊤Whh)dht
即
∂
L
∂
h
t
=
1
T
∑
i
=
t
T
(
∏
j
=
t
i
W
h
h
⊤
∂
ϕ
∂
u
j
)
W
q
h
⊤
∂
l
∂
o
i
\frac{\partial L}{\partial h_t} = \frac{1}{T}\sum_{i=t}^T\left(\prod_{j=t}^i \mathbf{W}_{hh}^\top\frac{\partial \phi}{\partial \mathbf{u}_j}\right)\mathbf{W}_{qh}^\top\frac{\partial l}{\partial \mathbf{o}_i}
∂ht∂L=T1i=t∑T(j=t∏iWhh⊤∂uj∂ϕ)Wqh⊤∂oi∂l
当激活函数
ϕ
(
x
)
=
x
\phi(x)=x
ϕ(x)=x时,矩阵
W
h
h
\mathbf{W}_{hh}
Whh的幂次很高,在这个幂中,小于1的特征值将会消失,大于1的特征值将会发散。应用链式法则容易求得
∂
L
∂
W
h
x
=
∑
t
=
1
T
∂
L
∂
h
t
x
t
⊤
,
∂
L
W
h
h
=
∑
t
=
1
T
∂
L
∂
h
t
h
t
−
1
⊤
\frac{\partial L}{\partial \mathbf{W}_{hx}} = \sum_{t=1}^T\frac{\partial L}{\partial h_t}x_t^\top, \quad \frac{\partial L}{\mathbf{W}_{hh}} = \sum_{t=1}^T \frac{\partial L}{\partial h_t}h_{t-1}^\top
∂Whx∂L=t=1∑T∂ht∂Lxt⊤,Whh∂L=t=1∑T∂ht∂Lht−1⊤
其中 ∂ L / ∂ h t \partial L/\partial h_t ∂L/∂ht是递归计算得到的。