循环神经网络
- 定义:循环神经网络(RNN)是一类具有短期记忆能力的神经网络。在循环神经网络中,神经元不但可以接受其它神经元的信息,也可以接受自身的信息,形成具有环路的网络结构。
- 应用:广泛应用在语音识别、语言模型以及自然语言生成等任务上。
给网络增加记忆
- 1、延时神经网络:在前馈网络中的非输出层都添加一个延时器,记录最近几
次神经元的输出。 - 2、有外部输入的非线性自回归模型: 自回归模型的扩展,在每个时刻 t都有一个外部输入 xt,产生一个输出 yt。
- 3、循环神经网络: 通过使用带自反馈的神经元,能够处理任意长度的时序数据。
-
结构图:
-
给定一个输入序列x1:T = (x1, x2, . . . , xt, . . . , xT ), 其隐藏层的活性值为ht=f(ht-1,xt)
-
简单循环神经网络
-
特点:只有一个隐藏层的循环神经网络。
-
假设在时刻t时,网络的输入为xt,隐层状态(即隐层神经元活性值)为ht不仅和当前时刻的输入 xt 相关,也和上一个时刻的隐层状态 ht−1 相关。即:
- zt=Uht-1+Wxt+b
- ht=f(zt)
- yt=Vht
- 上述U被称为状态-状态权重矩阵,W被称为状态-输入权重矩阵.
-
将网络在时间维度上展开其结构图:
-
图灵机是一种抽象的信息处理装置, 可以用来解决任所有的可计算机问题。
-
图灵完备是指一种数据操作规则,比如一种计算机编程语言,可以实现图灵机(Turing Machine)的所有功能,解决所有的可计算问题。
应用
-
根据循环神经网络的不同应用领域,可以分为序列到类别模式, 同步序列到序列模式, 异步序列到序列模式.
序列到类别模式
- 定义:主要用于序列数据的分类问题,输入为序列,输出为类别。比如在文本分类中,输入数据为单词的序列,输出为该文本的类别。
- 序列到类别的两种模型:
同步序列到序列模式
- 主要用于序列标注(Sequence Labeling)任务,即每一时刻都有输入和输出,输入序列和输出序列的长度相同。比如词性标注(Partof-Speech Tagging)中,每一个单词都需要标注其对应的词性标签。
异步序列到序列模式.
- 称为编码器-解码器(Encoder-Decoder)模型,即输入序列和输出序列不需要有严格的对应关系,也不需要保持相同的长度。比如在机器翻译中,输入为源语言的单词序列,输出为目标语言的单词序列。
- 模型结构:
参数学习
- 循环神经网络的参数学习方式也是梯度下降算法,根据计算方式可以分为两种:随时间反向传播(BPTT)和实时循环学习(RTRL).
-
随时间反向传播:误差反向传播
- 误差传播结构图:
- 误差传播结构图:
- 实时循环学习:误差前向传播
-
比较: BPTT算法和 RTRL算法都是基于梯度下降的算法,分别通过前向模式和反向模式应用链式法则来计算梯度。在循环神经网络中,一般网络输出维度远低于输入维度,因此 BPTT算法的计算量会更小,但是 BPTT算法需要保存所有时刻的中间梯度,空间复杂度较高。 RTRL算法不需要梯度回传,因
此非常适合用于需要在线学习或无限序列的任务中。
长期依赖问题
- 当时间间隔较大时,容易出现梯度消失或者梯度爆炸现象.
-
梯度爆炸:一般而言,循环网络的梯度爆炸问题比较容易解决,一般通过权重衰减或梯度截断来避免。
-
权重衰减 是通过给参数增加 ℓ1 或 ℓ2 范数的正则化项来限制参数的取值范
围,从而使得 γ ≤ 1。 -
梯度截断是另一种有效的启发式方法,当梯度的模大于一
定阈值时,就将它截断成为一个较小的数。
-
权重衰减 是通过给参数增加 ℓ1 或 ℓ2 范数的正则化项来限制参数的取值范
- 梯度消失 是循环网络的主要问题.
-
记忆容量问题: 隐藏状态ht 可以存储的信息是有限的,随着记忆单元存储的内容越来越多,其丢失的信息也越来越多。为了解决容量问题,可以有两种方法:
- 一种是增加一些额外的存储单元:外部记忆;
- 另一种是进行选择性的遗忘,同时也进行有选择的更新。
基于门控的循环神经网络
-
长短期记忆网络(LSTM) 是基于门控的循环神经网络的一种,它引入了门机制,即输入门it, 遗忘门ft 和输出门ot.
- 遗忘门ft: 控制上一个时刻的内部状态ct-1 需要遗忘多少信息。
- 输入门it: 控制当前时刻的候选状态c˜t 有多少信息需要保存。
- 输出门ot: 控制当前时刻的内部状态ct有多少信息需要输出给外部状态ht。
-
三个门及候选状态的计算方式:
-
结构图:
-
门控循环单元(GRU)网络 是一种比 LSTM网络更加简单的循环神经网络。其将输入门和遗忘门合并为一个更新门.
-
当前时刻的候选状态 h˜t ,重置门rt,隐状态ht,更新门zt计算方式:
-
结构图:
深层神经网络
-
堆叠循环神经网络
-
双向循环神经网络
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:6、循环神经网络 - Python技术站