一.概述
全连接网络和卷积网络都属于前向反馈网络,模型的输出和模型本身没有关联。而循环神经网络的输出和模型间有反馈。
循环神经网络引入了记忆体的概念,
时刻的记忆体
通过
时刻的输入
和上一时刻的记忆体
求得,因此,循环神经网络保留了历史信息,常用来处理语音、文字等序列相关的信息。
上图所示为
时刻的循环神经网络,其中,只有一个记忆体
,它与
和上一
时刻的
相关;输出
和记忆体
相关。
如上图所示,将循环核按时间序列展开后,在前向传播的过程中,主要更新记忆体
和输出
,参数矩阵
是不变的;在反向传播过程中,主要用梯度下降来更新参数矩阵
。循环神经网络借助循环核对时间特征进行提取,然后将提取的特征送入全连接网络进行预测。
如上图所示,循环核的数量可以进行设定。
二.前向传播
1.
时刻记忆体
对于任意一个索引序号
,隐藏状态
由序列
对应的输入
和前一时刻的隐藏状态
共同决定:
其中,U、W为系数矩阵,全局共享。b为偏置向量。
为激活函数,一般为tanh。
2.
时刻的预测值
V和W、U一样,是全局共享的系数矩阵,c为偏置向量,
一般为softmax函数。
三.反向传播
1.损失函数
模型的整体损失定义为各个时刻损失的和:
时刻的损失一般定义为交叉熵损失:
其中,
为one-hot编码的0-1向量,
为各个类别的预测概率值。
为计算方便,引入中间量
,则
,
为softmax函数时:
上式中,
为全1行向量,
为类别数,分子为向量,分母为标量,
为向量,带入损失函数:
上式中,
,
为标量,最终结果
为标量。
2.
对V、c求梯度
标量对矩阵、向量求导,使用矩阵微分和迹函数公式:
所以:
3.对
求梯度:
已知:
可得:
综上:
令公共项
为误差项
,求误差项。由RNN模型的求解过程可知,在某一序列位置t的梯度损失由当前位置的输出对应的梯度损失和序列索引位置
t+1时的梯度损失两部分共同决定:
所以:
更新
梯度公式:
因此,可以由后一层的梯度误差
求出前一层的梯度误差
,那么最后一层的梯度误差
怎么求?
对于最后一层T层,后边没有
,所以,
与当前层的输出
相关,因此: