RNN模型与NLP应用(3/9):Simple RNN模型_哔哩哔哩_bilibili

普通 RNN 模型

many to one 或者 many to many,适合输入和输出常读不固定,所以很适合文本、语音的处理。

RNN 和人的阅读思维和相似,不断积累信息。

Pasted image 20230201160756

用状态向量 h 记录阅读过的信息,上图的 h2 已经包含 the cat sat。整个 RNN 只有一个 A,最后训练的就是这个 A。

如果设置了 return_sequences=False,那么表示只保留最后一个 ht,前面的向量都删除;如果设置为 true,则保留所有的 h,再手动在其后增加一个 Flatten() 层

Pasted image 20230201161002

如果发现 val_acc 变差(不是 acc),在变差之前就要通过减少 epochs 停止训练(Early stopping)。

缺陷

SimpleRNN 记忆力很短。它适合 short-term dependence,因为它擅长从周围的上下文预测下文,比如给一句话的一部分,预测下一个词。但是它不擅长 long_term dependence,文本太长会导致忘记前文,使得信息丢失。

LSTM

LSTM 也是循环神经网络,它比 SimpleRNN 记忆力长很多,但是仍然会有遗忘的情况。

Pasted image 20230201163451

sigmod 函数将向量的每个元素压到 [0,1] 之间 Pasted image 20230201164017

一共有四个参数矩阵,下面列出:

遗忘门 ft

Pasted image 20230201164220

输入门 it

Pasted image 20230201164334

New Value

注意激活函数不是 sigmod,而是 tanh (双曲正切函数) Pasted image 20230201164434

输出门 ot

Pasted image 20230201164738

更新状态 Pasted image 20230201164839

实现

只保留最后一个 ht(特征向量) Pasted image 20230201165143

多层 RNN

前两层的 LSTM 的所有输出的 h 都需要保留,只有最后一层的 LSTM 的输出只需要最后的 ht。最后增加全连接层即可。 Pasted image 20230202174210

双向 RNN

两条相反方向的独立 RNN。 Pasted image 20230202175122

预训练 RNN

对 Embedding 层作预训练,从而减少 Embedding 的输出过于冗余的缺点。

小结

simpleRNN 效果不好,能用 simpleRNN 尽量用 LSTM。推荐双向 LSTM、多层 RNN、预训练 RNN。