RNN
参考
RNN 解决了什么问题
- 即应用场景,RNN在处理有时序关系的输入的时候比一般的神经网络更具有优势,原因是一个句子中的前后往往是相联系的,而一般的神经网络只是将句子里的每个词分开来考虑,这样的话对句子这种有时序关系的输入是很不利的,而RNN就考虑了当前词的前面的信息,相对会好很多。
- 例子就参考一文搞懂RNN(循环神经网络)基础篇这篇的词性标注的例子
RNN的结构
- 相对FC,RNN多了一层支线——隐藏层的输出s会被权重矩阵 w保存下来,用于下一时刻和新的input一起输入,即上图中右侧公式a所示,本时刻输出的话就加一层softmax(这个可以自行根据任务选择)即可
- 我们将RNN按照时间序列展开就是这样
RNN的特点
- 串联结构,体现“前因后果”,即后面结果的生成需要参考前面的信息
- 所有特征共享参数:
- 减少参数量
- Seq2Seq
- 词不同和词序不同都能学对相应的不同的结果
RNN的损失函数
- 单个时间步的损失函数
- 这个可以根据不同任务而自定义
- 整个序列的损失函数
RNN的反向传播
- 由于参数是共享的,于是这里化简一下图之后画出BP路线,名为通过时间的反向传播(loss用的交叉熵,不过这不重要) - ![在这里插入图片描述](https://img-blog.csdnimg.cn/0b7717821550463a80af58c70a834363.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBA5qSw5a2Q5aW257OW,size_20,color_FFFFFF,t_70,g_se,x_16)
- 实际上,上面Y<t+1>在BP的到a<t+1>的时候也会对w_aa做一个梯度
RNN的缺点
- 当序列太长,容易导致梯度消失
- 怎么理解?就类似于卷积网络深度过深(没有残差的情况),然后导致BP到前几层的时候梯度消失
|