入门小菜鸟,希望像做笔记记录自己学的东西,也希望能帮助到同样入门的人,更希望大佬们帮忙纠错啦~侵权立删。
一、RNN出现的意义
我们所熟悉的CNN,它的输出都是只考虑前一个输入的影响而不考虑其它时刻输入的影响(即只能单独去处理一个又一个的输入)
但是, 对于一些与时间先后有关的, 一序列的信息(即前后输入是有关系的),比如进行文档前后文内容的预测等等, 这时候CNN的效果就不太好了。
而我们人的认知是基于过往的经验和记忆的,以此观点和对上述CNN不足的弥补,设计了不仅考虑前一时刻的输入,还能记忆网络前面的内容的循环神经网络——RNN。
二、RNN原理
1、RNN模型结构和前向传播
RNN由输入层,隐藏层和输出层组成。
其中x,s,o都是向量,分别是输入层的值,隐藏层的值和输出层的值。
U是输入层到隐藏层的权重矩阵,V是隐藏层到输出层的权重矩阵,W是隐藏层上一次的值作为这一次的输入的权重矩阵。
公式如下:
其中f和g是激活函数,f可以是tanh,relu,sigmoid等激活函数,而g通常是softmax。
在这里U,V,W是不变的(到反向传播再变,这里只为了强调变量是后面那3个),变的是Xt,St-1和St,这里的W*St-1就是上一时刻的值的影响(正所谓过去的记忆)加入。
具体来说如下图所示按时间来展开
2、反向传播
每一次的输出值Ot都会产生一个误差值Et
而损失函数既可以使用交叉熵损失函数也可以使用平方误差损失函数
首先让我们看一下公式:
🎈总的误差
🎈参数梯度求法
由上面的公式我们可以得出他的含义:每个时刻的偏差的偏导数之和(U,V,W都是这样)
我们就以W为参照:
🌳首先将公式用链式法则展开
🌳然后由刚刚的式子代入,并且发现st与前面的所有时刻的s都有直接或间接的关系,可以得到下面的公式:
V和U的公式如下
三、RNN的应用以及不足
1、RNN应用领域
🌳自然语言处理(NLP): 主要有视频处理, 文本生成, 语言模型, 图像处理
🌳机器翻译,文本相似度计算,图像描述生成
🌳语音识别
🌳推荐
2、不足
容易出现梯度消失或者梯度爆炸的问题。
原因:长时间依赖造成过拟合导致梯度爆炸以及时间过长而造成记忆值较小从而造成梯度消失。
欢迎大家在评论区批评指正,谢谢~