循环神经网络 - RNN
循环神经网络(Rerrent Neural Network,RNN)是神经网络的一种,类似的还有深度神经网络(DNN)、卷积神经网路(CNN)、生成对抗网络(GAN)等。**RNN对具有时序特性的数据非常有成效,他能挖掘数据中的时序信息以及语义信息。**利用RNN的这种能力,使深度学习模型在解决语音识别、语言模型、机器翻译以及时序分析等NLP领域的问题时有所突破。
潜变量自回归模型
- 使用潜变量 h t h_t ht总结过去信息 p ( h t ∣ h t − 1 , x t − 1 ) p(h_t|h_{t-1},x_{t-1}) p(ht∣ht−1,xt−1), p ( x t ∣ h t , x t − 1 ) p(x_t|h_t,x_{t-1}) p(xt∣ht,xt−1)
循环神经网络
更新隐藏状态: h t = ∅ ( W h h h t − 1 + W h x X t − 1 + b h ) h_t=\empty(W_{hh}h_{t-1}+W_{hx}X_{t-1}+b_h) ht=∅(Whhht−1+WhxXt−1+bh)
输出: o t = ∅ ( W h o h t + b o ) o_t=\empty(W_{ho}h_t+b_o) ot=∅(Whoht+bo)
困惑度(perplexity)
- 衡量一个语言模型的好坏可以用评价你交叉熵
π = 1 n ∑ i = 1 n − l o g p ( x t ∣ x t − 1 , . . . ) \pi = \frac{1}{n}\sum\limits_{i=1}^n-logp(x_t|x_{t-1},...) π=n1i=1∑n−logp(xt∣xt−1,...)
p p p是语言模型的概率预测, x t x_t xt是真实词
- 历史原因NLP使用困惑的 e x p ( π ) exp(\pi) exp(π)来衡量,时平均每次可能选项
- 1表示完美,无穷大是最差情况
梯度剪裁
-
迭代中计算这 T T T个时间步上的梯度,在反向传播过程中产生长度为 O ( T ) O(T) O(T)的矩阵乘法链,导致数值不稳定
-
梯度裁剪能有效预防梯度爆炸
- 如果梯度长度超过
θ
\theta
θ,那么拖影回长度
θ
\theta
θ
g ← m i n ( 1 , θ ∣ ∣ g ∣ ∣ ) g g\leftarrow min(1,\frac{\theta}{||g||})g g←min(1,∣∣g∣∣θ)g
- 如果梯度长度超过
θ
\theta
θ,那么拖影回长度
θ
\theta
θ
更多的应用 RNNs
总结:
- 循环神经网络的输出取决于当下输入和前一时间的隐变量
- 应用到语言模型中时,循环神经网络根据当前词预测下一次时刻词
- 通常使用困惑度来衡量语言模型的好坏