1. RNN的关键点:即在处理序列数据时会有顺序的记忆。比如,RNN在处理一个字符串时,在对字母表顺序有记忆的前提下,处理这个字符串会更容易。就像人一样,读取下面第一个字符串会更容易,因为人对字母出现的顺序是提前知道的。但是将字符串反转过来,读取第二个字符串时就没那么容易了。
2. RNN整体网络结构:分为输入层,隐藏层,输出层;输入层的[x1, x2,x3]是序列数据,隐藏层[h0, h1, h2, h3]存储着过去一段时间和当前的一些状态信息(说明是有记忆的),输出层[y1, y2, y3], y1 是由上一个的状态h0 和 当前状态h1的计算结果。同样,按照这样方式 y2,y3 依次计算出来。
3. RNN单层结构(RNN Cell):Hi是由上一个状态Hi-1计算得到的,输出Yi是由当前Hi计算得到。正式由于每一次隐藏状态的计算都包含了过去的状态,所以RNN是带记忆的。
4. RNN的例子:本例是通过输入一句话的前面几个词,来预测下一个词是什么;计算步骤如下:
(1)首先获取每个输入词(one-hot vectors)的词向量(参见LLM - 词向量 Word2vec-CSDN博客),即转换成语义更富的一个向量(word embeddings)。
(2)其次计算h1,h1是由初始状态h0 和 输入x1计算得到,一般h0是随机初始化的值。
(3)h2,h3等计算方式同上面的h1。
(4)计算h4,因为h4包含了前面h1,h2,h3所有词的信息,所以h4的值更符合句子语义。得到h4之后,再经过一个线性层和softmax处理,得到词表上每个词的概率。然后选择出现概率最大的词作为最终预测词。
5. RNN应用场景
(1):词性标注,给定一句话,预测每个词的词性
(2):序列预测,例如给定一周温度,预测每天天气如何
(3):图片描述,给定一个图片,生成一句描述该图片的话
(4):文本分类,给定一个句子,区别这句话情感是正面还是负面
6.RNN优点
(1)可以处理变长数据
(2)模型大小不会随着输入增加而增加
(3)模型权重参数是共享的
(4)后面的计算可以使用到前面的计算结果
7.RNN缺点
(1)是一个顺序计算过程,后面的计算依赖前面的结果,无法并行化
(2)随着序列不断向后推移,由于记忆步长的限制,后面的计算很难依赖更之前的状态,如下图,越往后计算梯度时链式越长,这会导致梯度消失或梯度爆炸。