RNN
解决问题示例:语句情感分析
传统方法问题:
- 长句子,参数过多 (改进:使用参数共享,每个单词的特征提取方式一致)
- 没有上下句的语境信息 (改进:需要长期的记忆模块)
改进的模型: h 0 h_0 h0为初始化数据
共享的参数: w h h w_{hh} whh和 w w h w_{wh} wwh;
最后输出可以是最后的节点,也可以将所有的记忆节点综合输出,比较灵活。
最后的实际模型为:
其中:
激活函数使用 t a n h ( ) tanh() tanh()函数
输出 y t y_t yt也可以将所有的 h t h_t ht t = 1... t t=1...t t=1...t以全连接层综合起来输出。
训练
BP though time
梯度求导公式:注意:梯度公式有累积项,所以会出现梯度爆炸的情况
Pytorch调用RNN
输入: x : [ s e q l e n , b a t c h , f e a t u r e l e n ] x:[seq len,batch,feature len] x:[seqlen,batch,featurelen],一次送一个单词 x t : [ b a t c h , f e a t u r e l e n ] x_t:[batch,feature len] xt:[batch,featurelen]
模型中反复的计算步骤: x t ∗ w w h + h t ∗ w h h x_t*w_{wh}+h_t*w_{hh} xt∗wwh+ht∗whh 其中, x t 是 输 入 特 征 x_t是输入特征 xt是输入特征, h t h_t ht是上一时刻的记忆内容
输入大小: [ b a t c h , f e a t u r e l e n ] [batch,feature len] [batch,featurelen],输出大小: [ b a t c h , h i d d e n l e n ] [batch,hidden len] [batch,hiddenlen]
梯度弥散和梯度爆炸
根据梯度的形式里面存在 w k w^k wk的形式,可以得到, w w w如果大于1,梯度爆炸,小于1,梯度弥散。梯度爆炸解决方法:对每一个梯度信息,进行clip(剪辑);梯度弥散解决方法:LSTM
LSTM
输入门: i t = σ ( W i ∗ [ h t − 1 , x t ] + b i ) i_t=\sigma(W_i*[h_{t-1},x_t]+b_i) it=σ(Wi∗[ht−1,xt]+