• 循环神经网络(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.梯度剪切、正则:主要是针对梯度爆炸提出的,其思想是设置一个梯度剪切阈值,然后更新梯度的时候,如果梯度超过这个阈值,那么就将其强制限制在这个范围之内。这可以防止梯度爆炸。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:循环神经网络(rnn)讲解 - Python技术站