循环神经网络介绍(RNN)

发布于:2024-04-29 ⋅ 阅读:(24) ⋅ 点赞:(0)

序列模型

定义:自然语言处理、音频、视频以及其他序列数据的模型

类型

        语音识别

        情感分析

        机器翻译

特点:

      序列数据前后之间有很强的关联性

      序列数据的输入输出长度不固定

循环神经网络

定义:循环(递归)神经网络是神经网络的一种,RNN将状态在自身网络中循环传递,可以接受时间序列结构输入

类型:

一对一:固定的输入到输出,如图像分类

一对多:固定输入到序列输出,如图像的文字描述

多对一:序列输入到输出,如情感分析,分类正面负面情绪

多对多:序列输入到序列输出,如机器翻译,称为编解码网络

同步多对多:同步序列输入到同步输出,如文本生成,视频每一帧的分类,也称为序列生成

基础循环网络介绍

Xt:表示每一时刻的输入

Ot:表示每一时刻的输出

St:表示每一个隐层的输出

中间小圆圈代表隐藏层的一个单元(cell)

U V W参数共享所有的cell

每一个cell:有两个输入,前一个cell的状态和当前序列的输入

      _{S_{t}} = g1(Ux_{t}+Ws_{t-1}+ba)

每一个cell:有两个输出,当前cell的状态和cell的预测输出

       O_{t} = g2(Vs_{t}+by)

      输出:受到前面时刻隐藏状态的影响

g1,g2:表示激活函数  g1:tanh/relu    g2:sigmoid  softmax

序列生成案例

s  我  昨天  上学  迟到  了  e

词的表示

one - hot编码表示

建立一个所有词的词库(30000个),包含(开始结束)

输出的表示 --softmax

每一个时刻输出的是下一个最有可能的词,可以用概率表示,总长度为词的总数长度

所有词的概率组成的向量

使用softmax来计算概率

矩阵运算表示

以上面为例 

st = rule(Ust + Wst-1)

ot = softmax(Vst)

m :词的个数  xt:长度为m   n:可以人为设定,指定cell的状态输出 大小

形状表示:

[n  , m] * [m ,1] + [n , n] * [n , 1] = [n , 1]

矩阵U n*m  矩阵W n*n

[m , 1] * [n, 1] = [m * 1]

矩阵V [m , 1]

交叉熵损失

一整个序列作为一个训练实例,总误差就是各个时刻词的误差之和

时序反向传播算法(BPTT)

梯度沿着时间通道传播的BP算法

目标:计算误差关于参数U、V和W以及两个偏置bx,by的梯度

          每个时间的梯度都计算出来,然后加起来的梯度为每次w更新的梯度

区分最后一个cell和前面cell的s的梯度值

最后一个:计算最后一个时刻交叉熵损失对于st的梯度

最后一个前面的cell的ds

求出当前层损失对于当前隐层状态输出梯度 + 上一层梯度

每一个cell梯度计算过程

先计算ds^t 然后计算tanh函数梯度

利用链式法则去求U W ba 和x_t,s_t-1的梯度

梯度消失与梯度爆炸

如果矩阵中有非常小的值,并且经过矩阵相乘N次之后,梯度值快速以指数形式收缩,较远的时刻梯度变为0

如果矩阵的值非常大,就会出现梯度爆炸