循环神经网络(rnn)讲解

•    循环神经网络(rnn)

•  RNN简介

•  Rnn基本结构

•  双向rnn基本结构

•  rnn梯度消失问题

•  RNN应用举例

 

•    RNN简介

•    循环神经网络(RNN)能够从序列和时序数据中学习特征和长期依赖关系。

•   循环神经网络(RNN)近几年在语言模型与文本生成,机器翻译,语音识别,图像描述生成等领域都取得了不错的效果。

 

 

 

 

 

•  Rnn基本结构

•    回顾一下神经网络的一般结构:

 

•    Z1 = W1*X+ bias

•    a1 = sigmoid(Z1)

•    Z2 = W2*a1+bias

•    a2 = sigmoid(Z2)

•    a2 = y(预测值)

 

 

 

 

 

 

•  将序列用标准神经网络处理会怎样??

•    存在两个问题:

•     难以解决每个训练样例输入输出长度不同的情况

•     标准的神经网络不能共享从文本不同位置上学到的特征。


•  RNN基本结构

•     a<0>是初始的隐状态,一般置为零向量。

•     a<i>代表输入序列中第i个输入所隐含的信息,即时间步i的激活值

•     x<i>代表输入序列中第i个字符,输入序列的长度为Tx

•     y^<i>代表与x<i>相对应的输出值。

 

•  RNN正向传播

•    计算公式如下:

 

 

 

•    激活函数:

•    循环神经网络常用的隐藏层激活函数是 tanh,有时候也会用 ReLU 函数



•    RNN正向传播示意图


•    RNN反向传播

•    三个步骤:

•    1.前向传播,计算神经网络的输出;

•    2.根据误差函数(或损失函数) 对所有所需训练的参数求偏导(其间要先计算每个神经元的偏导数);

•    3.基于2步,使用随机梯度下降算法计算每个参数的梯度.

 

•    RNN反向传播

 

•    定义损失函数: 

•    一个元素的损失函数:

叫做交叉熵损失函数(Cross Entropy Loss

整个序列的损失函数:

•   

RNN反向传播示意图


对每一个参数求其偏导数
使用随机梯度下降方法更新参数


 

•  不同类型的循环神经网络

•    情感分析 many toone

•    音乐生成 one to many

•    命名实体识别 ,机器翻译       manyto many

 

•    双向循环神经网络

•    对于语言模型来说,很多时候光看前面的词是不够的,比如下面这句话:

 

•    双向循环神经网络模型能够让我们在序列的某处,不仅可以获取之前的信息,还可以获取未来的信息。

 

 

•   双向循环神经网络


•  深层循环神经网络

•    前面我们介绍的循环神经网络只有一个隐藏层,我们当然也可以堆叠两个以上的隐藏层,这样就得到了深度循环神经网络

•    深层循环神经网络



•    循环神经网络中的梯度消失

•    “The cat, which already ate ……, was full.

•    “The cats, which ate ……, were full.

•   以下图的反向传播为例(假设每一层只有一个神经元且对于每一层                           ,其中σ为sigmoid函数)

 

•    可以推导出:


•    Sigmoid的导数图像如下图;

•    可见其导数最大值为0.25,而我们初始化的网络权值|w|通常小于1,因此,                 

•    上面的链式求导,层数越多,求导结果     越小,因而导致梯度消失的情况出现。


•    梯度爆炸问题的出现原因

 

•    梯度消失和梯度爆炸的解决方案

•   1.使用relu、leakrelu等激活函数

•   Relu函数                                        leakRelu函数

 

•   2.使用LSTM的结构设计

•   3.梯度剪切、正则:主要是针对梯度爆炸提出的,其思想是设置一个梯度剪切阈值,然后更新梯度的时候,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内。这可以防止梯度爆炸。

 


猜你喜欢

转载自blog.csdn.net/javaisnotgood/article/details/80671086