RNN及其梯度分析

RNN及其梯度分析

本文是笔者《动手学深度学习》的学习笔记,如有谬误,请随时指出。

语言模型

对于一个基于历史数据来预测未来数据的任务,一定存在一个前提假设:序列本身的规律是不变的。这是因为,如果规律变化,那么规律一定受到新的数据影响,并且我们不能基于目前的数据来找到新的规律,此时基于历史数据来预测未来数据没有意义。因此,只要我们希望基于历史数据预测未来数据,一定存在序列规律不变这一假设。

假设存在一个文本序列 x 1 , … , x T x_1, \ldots, x_T x1,,xT,其中 x t x_t xt代表在时间步 t ∈ Z + t\in\mathbb{Z}^+ tZ+时的词元(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}) XtP(XtX1=x1,,Xt1=xt1)
其中 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=xX1=x1,,Xt1=xt1)
此时问题变为了如何估计 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(XtX1=x1,,Xt1=xt1),为了方便起见删去 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(xtx1,,xt1)=P(x1,,xt1)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=1TP(xtx1,,xt1)
对于 P ( x t ∣ x 1 , … , x t − 1 ) P(x_t|x_1, \ldots, x_{t-1}) P(xtx1,,xt1)我们可以采用如下方法来估计:
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^(xtx1,,xt1)=n(x1,,xt1)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在文本中出现的次数。此时出现了两个问题:

  1. 当序列 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(xtx1,,xt1)必定为零。这说明了如果采用此种方法,无法产生出文本中没有出现过的文本序列。
  2. 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^(xtx1,,xt1)=n(x1,,xt1)+ϵ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 ϵ时,接近均匀分布。

对于第二个问题,现在有两种策略:

  1. 假设 x t x_t xt仅与 x t − 1 , … , x t − τ x_{t-1}, \ldots, x_{t-\tau} xt1,,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(xtx1,,xtτ)
  2. 使用 h t h_t ht来总结 x 1 , … , x t − 1 x_1, \ldots, x_{t-1} x1,,xt1的信息,因此有 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(xtht),其中 h t = g ( h t − 1 , x t ) h_t=g(h_{t-1}, x_{t}) ht=g(ht1,xt)

暂时只考虑第一种策略,这种策略又称为 n n n元语法。我们从文档中分别采集一元语法(unigram)、二元语法(bigram)和三元语法(trigram)的词频:

从图中可以看出:

  1. i i i个最常用的单词频率 n i n_i ni与其排名几乎成反比,随着语法词元数增多,曲线放缓。这说明了如果使用拉普拉斯平滑,将会大大高估尾部单词的频率。
  2. 词表中的 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} XRn×d,其中 n n n为批量大小, d d d为维度,隐藏层的输出为 H ∈ R n × h \mathbf{H}\in\mathbb{R}^{n\times h} HRn×h,权重参数 W x h ∈ R d × h \mathbf{W}_{xh}\in\mathbb{R}^{d\times h} WxhRd×h,偏置参数 b h ∈ R 1 × h \mathbf{b}_h\in\mathbb{R}^{1\times h} bhR1×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} ORn×q,权重参数 W h q ∈ R h × q \mathbf{W}_{hq}\in\mathbb{R}^{h\times q} WhqRh×q,偏执参数 b q ∈ R 1 × q \mathbf{b}_q\in\mathbb{R}^{1\times q} bqR1×q。对于一个分类问题,对输出做 softmax ( O ) \text{softmax}(\mathbf{O}) softmax(O)即可,令 x ∈ R d \mathbf{x}\in\mathbb{R}^d xRd
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(ht1,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+Ht1Whh+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=1nlogP(xtxt1,,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=1nlogP(xtxt1,,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(xtx1,,xt1),按照最初的式子,我们只需要把每次RNN的输出值加起来就行了。

  • 在最好的情况下,模型总是完美地估计标签词元的概率为1。在这种情况下,模型的困惑度为1。
  • 在最坏的情况下,模型总是预测标签词元的概率为0。在这种情况下,困惑度是正无穷大。
  • 在基线下,对于所有 P ( x t ∣ x 1 , … , x t − 1 ) P(x_t|x_1, \ldots, x_{t-1}) P(xtx1,,xt1)都是一个均匀分布,代入后可得困惑值为 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,ht1,wh)ot=g(ht,wo)L(x1,,xT,y1,,yT,wh,wo)=T1t=1Tl(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*} whL=T1t=1Twhl(ot,yt)=T1t=1Totl(ot,yt)htgwhht=T1t=1Totl(ot,yt)htg(whf+ht1fwhht1)
由于 ∂ 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} whht=whf+ht1fwhht1,令
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=whhtb=whfct=ht1f

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+ctat1=b+ct(b+ct1at2)=b+ctb+ctct1at2=b+ctb++ctc2b=b+i=1t1(j=i+1tcj)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) whL=T1t=1Totl(ot,yt)htg(whf+i=1t1(j=i+1thj1f)whf)
如果我们完全计算出梯度,当 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=πt1)=π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=whf+ξtht1fwhht1
    此时 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 xtRd为单样本输入, 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 WhxRh×d,WhhRh×h,WqhRq×h,bhRh,bqRq,htRh,有
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+Whhht1+bh)ot=Wqhht+bqL(x1,,xT,y1,,yT,Whx,Wqh,Whh,bh,bq)=T1t=1Tl(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=1Tdl=T1t=1T(otl)dot=T1t=1T(otl)d(Wqhht+bq)=T1t=1T(otl)dbq+T1t=1T(otl)d(Wqh)ht=T1t=1T(otl)dbq+T1t=1Ttr((otl)d(Wqh)ht)=T1t=1T(otl)dbq+T1t=1Ttr(ht(otl)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} WqhL=T1t=1Totlht,bqL=T1t=1Totl
接下来求 ∂ 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=1Tdl=T1t=1T(otl)dot=(ToTl)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} hTL=T1WqhoTl
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+Whhhj1+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=1Tdl(oi,yi)=T1i=tTdl(oi,yi)=T1i=tToild(Wqhhi+bq)=T1i=tToilWqhdhi=T1i=tToilWqh(uiϕ)Whhdhi1=T1i=tT(oil)Wqh(j=ti(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} htL=T1i=tT(j=tiWhhujϕ)Wqhoil
当激活函数 ϕ ( 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 WhxL=t=1ThtLxt,WhhL=t=1ThtLht1

其中 ∂ L / ∂ h t \partial L/\partial h_t L/ht是递归计算得到的。

  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值