NLP——RNN系列
RNN模型与NLP应用(3/9):Simple RNN模型_哔哩哔哩_bilibili
普通 RNN 模型
many to one 或者 many to many,适合输入和输出常读不固定,所以很适合文本、语音的处理。
RNN 和人的阅读思维和相似,不断积累信息。
用状态向量 h 记录阅读过的信息,上图的 h2 已经包含 the cat sat。整个 RNN 只有一个 A,最后训练的就是这个 A。
如果设置了 return_sequences=False,那么表示只保留最后一个 ht,前面的向量都删除;如果设置为 true,则保留所有的 h,再手动在其后增加一个 Flatten() 层
如果发现 val_acc 变差(不是 acc),在变差之前就要通过减少 epochs 停止训练(Early stopping)。
缺陷
SimpleRNN 记忆力很短。它适合 short-term dependence,因为它擅长从周围的上下文预测下文,比如给一句话的一部分,预测下一个词。但是它不擅长 long_term dependence,文本太长会导致忘记前文,使得信息丢失。
LSTM
LSTM 也是循环神经网络,它比 SimpleRNN 记忆力长很多,但是仍然会有遗忘的情况。
sigmod 函数将向量的每个元素压到 [0,1] 之间
一共有四个参数矩阵,下面列出:
遗忘门 ft
输入门 it
New Value
注意激活函数不是 sigmod,而是 tanh (双曲正切函数)
输出门 ot
更新状态
实现
只保留最后一个 ht(特征向量)
多层 RNN
前两层的 LSTM 的所有输出的 h 都需要保留,只有最后一层的 LSTM 的输出只需要最后的 ht。最后增加全连接层即可。
双向 RNN
两条相反方向的独立 RNN。
预训练 RNN
对 Embedding 层作预训练,从而减少 Embedding 的输出过于冗余的缺点。
小结
simpleRNN 效果不好,能用 simpleRNN 尽量用 LSTM。推荐双向 LSTM、多层 RNN、预训练 RNN。







