精华内容
下载资源
问答
  • 深度循环神经网络
    千次阅读
    2017-04-12 11:34:04

    深度循环神经网络用于时间序列预测

    原文:
    Deep Recurrent Neural Networks for TimeSeries Prediction


    Problem

    文章简介内容和后面内容极大重合,有点不知所云
    感觉前面废话有点多
    文章内容很晦涩

    摘要

    增加隐藏层or增加反馈范围都会提高erro下降的速度

    数据集:癫痫数据
    (epileptic seizure suppression electro-stimulator)

    1 Introduction

    癫痫发作是一种异常现象,特征是:简短、偶发的急剧幅度变化
    Detection算法探索从EEG信号中提取的特征

    输入向量: uk
    特征向量: vk
    内部状态: xk
    转换函数: f ,且有,xk+1=f(xk,vk)
    度量函数: h ,且有,zk^=h(xk,vk)
    要想定义内部变量 xk ,尝试满足马尔科夫条件: P(xk|vk,vk1,...,v0)=P(zk|xk,vk)

    通常,预测算法的参数需要通过训练阶段来确定
    两种训练方式:online & offline
    offline:随着参数变化,offline训练需要重复(或者连续并行运行),同时detection算法需要根据新的参数更新
    online:可以连续增长的训练自己,因此很有适应性

    本文提及的framework:
    输入序列: U[k+1]={u1,u2,...,uk+1}
    观测序列: Z[k]={z1,z2,...,zk} , zi=h(xi,ui) ,其中 h 度量函数已知,xi不可观测
    x^k+1|k ,表示给定 U[k+1] Z[k] ,估计 xk+1
    首先预测 x^k+1|k ,当得到 zk+1 ,计算 {x^k+1|k+1,x^k|k+1,...,x^kq+2|k+1} 作为predict-correct framework
    predict-correct framework可以go back并且计算比 x^kq+2|kq+1 改进的估计 x^kq+2|k+1 ,因为当在 k+1 时候发生了更加易于检测的事件,同时 zkq+2 未知或信息不够,则可以用它来做正确的映射

    深度神经网络可以自动的抽取相关高层次特征,不必手动的工程特征提取,避免不适任务的特征引起的性能丢失
    网络深度和网络合并反馈都会增加训练的难度

    DNN训练方法举例:
    有监督的训练,结合或跟随不监督的预训练
    这些训练方法的核心:
    反向传播梯度下降

    DNN训练方法举例:Back-Propagation Through Time(BPTT)
    有点类似Feed-Forward networks
    但是BPTT在误差超平面容易陷入浅层局部最优,传统的,为了避免这种情况,单元activation and/or 权重更新是随机的,并且两者是被赋值的,而不是计算出来的值。这些值的来源为适合的分布+时刻下的分布的计算值

    很多问题都是在将非线性的当成线性来近似

    如果从外部输入的转换穿过层的集合,到最后的输出被考虑了,那么这个转换就代表一个大程度的非线性

    本文工作贡献
    (1)DRNN作为一个统一的解决方案,可以自动提取相关变量,自动构建内部变量、预测时间序列
    (2)多隐藏层、多法相传播的理论推演
    (3)训练DRNN的方法:Back-Propagation 穿过Time-and-Space的训练方法
    (4)权重计算的动态规划公式

    2 时间序列与预测

    数据:EEG记录的数据
    记录进行了band-pass滤波处理,数字化
    模型表示可以基于傅里叶变换

    输入向量: uk
    特征向量: vk
    内部状态: xk
    转换函数: f ,且有,xk+1=f(xk,vk)
    度量函数: h ,且有,zk^=h(xk,vk)
    要想定义内部变量 xk ,尝试满足马尔科夫条件: P(xk|vk,vk1,...,v0)=P(zk|xk,vk)

    offline(batch)训练算法:
    给定特征向量 xi 和目标 zi {(xi,zi)}i=Ni=1
    训练遍历所有数据集,确定detection参数

    online(incremental)训练算法:
    用特定的初始值,初始化参数
    给定单特征向量 xi 或者单特征目标向量 zi (xi,zi)
    如果只给定一个特征向量,只产生一个预测 zi^
    如果也给定一个目标特征向量对 (xi,zi) ,则也更新其参数

    度量:
    SPC: specificity
    SEN: sensitivity
    ADR: aerage detection rate
    SEN= Y+/(Y++N)
    SPC= N+/(N++Y)
    ADR=(SPC+SEN)/2
    其中:
    Y+ =true positive
    N+ =true negtive
    Y =false positive
    N =false negtive

    问题之一:
    计算参数化函数的参数 w={wi}i=Mi=1 ,以便当应用训练输入数据 U={uj}j=Nj=1 ,会返回一些从 Z^={z^j=fw(Xj)}j=Nj=1 计算来的和输出 Z={zj}j=Nj=1 计算来的度量数据,使这些度量最优

    机器学习中加入正则化是为了避免过拟合

    ridge-regression:岭回归
    w^=(UTU+λI)1UTy

    以上提及的offline训练方法
    前提假设:

    • zj 线性依赖于 uj
    • uj 是i.i.d,即独立同分布
    • uj 的components不是线性相关的
    • 给定的训练对 (uj,zj) 不受噪声影响
    • objective and regularization as in 岭回归???

    综上,对于本文的癫痫数据集,online训练法才是合适的

    uj 不是正交的时候,有方法使之正交

    NN可以快速的找到非线性映射

    DNN训练方法举例:
    有监督的训练,结合或跟随不监督的预训练
    无监督的预训练旨在最小化energy,因为低能量状态捕捉数据的structure
    后面的训练旨在捕捉输入输出的理想映射
    这些训练方法的核心:
    反向传播梯度下降

    DRNN

    Feed-Forward之接收前一层的输入,因此无法处理时间序列推理

    计算得到k时刻的权重,再反过来更新k-1时刻的权重???

    add a bias ???
    bias = 1 ???

    跨时间和空间:???
    跨时间=前面的时刻的hidden layer影响后面时刻
    跨空间=多层hidden layer, distance不一样

    V. Experimental results

    可见层、隐藏层、输出层均只有一个单元
    可见层和输出层的unit,其输入来源:
    (1)outside or 前面的层
    (2)一个bias输入
    隐藏层unit,输入来源:
    (1)可见层
    (2)一个bias输入
    (3)前一时刻自己的输出
    网络中只有一个输入和输出

    结论

    从三个维度讨论RNN:层里面的unit数目、隐藏层数目、反向传播的instants数

    更多相关内容
  • 文章目录一、深度循环神经网络二、函数依赖关系三、简介实现3.1 网络构建3.2 训练与预测四、总结   本节非常简单,就是在RNN的基础上加了层的概念,毕竟之前讨论的RNN、GRU和LSTM我们都是在单层神经网络的基础上...


      本节非常简单,就是在RNN的基础上加了层的概念,毕竟之前讨论的RNN、GRU和LSTM我们都是在单层神经网络的基础上讨论的

    一、深度循环神经网络

      到目前为止,我们只讨论了具有一个单向隐藏层的循环神经网络。其中,隐变量和观测值与具体的函数形式的交互方式是相当随意的。只要我们可以对不同的交互类型建模具有足够的灵活性,这就不是一个大问题。然而,对于一个单层来说,这可能具有相当的挑战性。在线性模型的情况下,我们通过添加更多的层来解决这个问题。而在循环神经网络中,因为我们首先需要决定如何添加以及在哪里添加额外的非线性,因此这个问题有点棘手。

      事实上,我们可以将多层循环神经网络堆叠在一起,通过对几个简单层的组合,产生了一个灵活的机制。特别是,数据可能与不同层的堆叠有关。例如,我们可能希望保持有关金融市场状况(熊市或牛市)的高层数据可用,而在底层数据就只记录较短期的时间动态。

      下面是具有 L L L 个隐藏层的深度循环神经网络,每个隐藏状态都连续地传递到当前层的下一个时间步和下一层的当前时间步。(有趣的地方在于你将之前的RNN图片与之对比,可以发现 H 1 ( 1 ) 、 H 2 ( 1 ) H^{(1)}_1、H^{(1)}_2 H1(1)H2(1)他们是之前对应的输出,现在只是变成了下一层神经元的输入)

    二、函数依赖关系

      我们可以对深度架构中的函数依赖关系形式化,这个架构是由 L L L 个隐藏层构成。假设我们在时间步 t t t 有一个小批量的输入数据 X t ∈ R n × d \mathbf{X}_t \in \mathbb{R}^{n \times d} XtRn×d(样本数: n n n,每个样本中的输入数: d d d)。同时,将 l t h l^\mathrm{th} lth 隐藏层( l = 1 , … , L l=1,\ldots,L l=1,,L)的隐藏状态设为 H t ( l ) ∈ R n × h \mathbf{H}_t^{(l)} \in \mathbb{R}^{n \times h} Ht(l)Rn×h(隐藏单元数: h h h),输出层变量设为 O t ∈ R n × q \mathbf{O}_t \in \mathbb{R}^{n \times q} OtRn×q(输出数: q q q)。设置 H t ( 0 ) = X t \mathbf{H}_t^{(0)} = \mathbf{X}_t Ht(0)=Xt,第 l l l 个隐藏层的隐藏状态使用激活函数 ϕ l \phi_l ϕl 的表示如下:

    H t ( l ) = ϕ l ( H t ( l − 1 ) W x h ( l ) + H t − 1 ( l ) W h h ( l ) + b h ( l ) ) , \mathbf{H}_t^{(l)} = \phi_l(\mathbf{H}_t^{(l-1)} \mathbf{W}_{xh}^{(l)} + \mathbf{H}_{t-1}^{(l)} \mathbf{W}_{hh}^{(l)} + \mathbf{b}_h^{(l)}), Ht(l)=ϕl(Ht(l1)Wxh(l)+Ht1(l)Whh(l)+bh(l)),

      其中,权重 W x h ( l ) ∈ R h × h \mathbf{W}_{xh}^{(l)} \in \mathbb{R}^{h \times h} Wxh(l)Rh×h W h h ( l ) ∈ R h × h \mathbf{W}_{hh}^{(l)} \in \mathbb{R}^{h \times h} Whh(l)Rh×h 和偏置 b h ( l ) ∈ R 1 × h \mathbf{b}_h^{(l)} \in \mathbb{R}^{1 \times h} bh(l)R1×h 都是第 l l l 个隐藏层的模型参数。最后,输出层的计算仅基于第 l l l 个隐藏层最终的隐藏状态:

    O t = H t ( L ) W h q + b q , \mathbf{O}_t = \mathbf{H}_t^{(L)} \mathbf{W}_{hq} + \mathbf{b}_q, Ot=Ht(L)Whq+bq,

    其中,权重 W h q ∈ R h × q \mathbf{W}_{hq} \in \mathbb{R}^{h \times q} WhqRh×q 和偏置 b q ∈ R 1 × q \mathbf{b}_q \in \mathbb{R}^{1 \times q} bqR1×q 都是输出层的模型参数。

      与多层感知机一样,隐藏层的数目 L L L 和隐藏单元的数目 h h h 都是超参数。也就是说,它们可以由我们来调整或指定。另外,用门控循环单元或长短期记忆网络的隐藏状态来代替深度RNN中的隐藏状态进行计算,可以很容易地得到深度门控循环神经网络(沐神在课程中说使用LSTM和GRU就看个人爱好了,并没有本质上的差别,当然后面还有更NB的transformer可以应用),毕竟Attention is all you need 不是闹着玩儿的。

    三、简介实现

    import torch
    from torch import nn
    from d2l import torch as d2l
    
    batch_size, num_steps = 32, 35
    train_iter, vocab = d2l.load_data_time_machine(batch_size, num_steps)
    
    Downloading ../data/timemachine.txt from http://d2l-data.s3-accelerate.amazonaws.com/timemachine.txt...
    

    3.1 网络构建

    # 超参数架构决策与单层lstm中相同,需要输入和输出选择相同的数量,隐藏单元设置为256,只是多了一个隐藏层层数
    vocab_size,num_hiddens,num_layers = len(vocab),256,2
    num_inputs = vocab_size
    device = d2l.try_gpu()
    lstm_layers = nn.LSTM(num_inputs,num_hiddens,num_layers)
    model = d2l.RNNModel(lstm_layers,len(vocab))
    model = model.to(device)
    

    3.2 训练与预测

    num_epochs,lr=500,2
    d2l.train_ch8(model,train_iter,vocab,lr,num_epochs,device)
    
    perplexity 1.0, 161938.1 tokens/sec on cuda:0
    time traveller for so it will be convenient to speak of himwas e
    traveller with a slight accession ofcheerfulness really thi
    

    在这里插入图片描述

    四、总结

    • 在深度循环神经网络中,隐藏状态的信息被传递到当前层的下一时间步和下一层的当前时间步
    • 有许多不同风格的深度循环神经网络,如LSTM、GRU或者经典RNN网络。这些模型在深度学习框架中都有高级的API涵盖
    • 总体二言,深度RNN需要大量的工作(学习率调整、修剪)来确保合适的收敛,模型地初始化也需要非常谨慎
    • 上面的两层模型在200个epoch的时候就基本收敛了,而之前单层模型在差不多300个epoch的时候才会收敛。多层增加了非线性,加速了收敛但是也增加了过拟合的风险。通常不会采用特别深的RNN网络
    展开全文
  • 人工智能-基于深度循环神经网络的渣油加氢装置建模研究.pdf
  • 戈恩Golang 中的深度循环神经网络和长短期记忆。 此代码基于 。 免责声明:这是我第一次使用 Go。作者Taehoon Kim /
  • 基于深度循环神经网络的社交网络用户情感研究.pdf
  • 深度学习-41: 深度循环神经网络(Recurrent NN, RNN) 深度学习原理与实践(开源图书)-总目录 在图像分类和目标识别领域,基于前馈神经网络的深度学习模型表现优异,但是在语音识别和自然语音处理领域深度学习...

    深度学习-41: 深度循环神经网络(Recurrent NN, RNN)

    深度学习原理与实践(开源图书)-总目录, 构建知识谱系。

    在图像分类和目标识别领域,基于前馈神经网络的深度学习模型表现优异,但是在语音识别和自然语音处理领域深度学习模型水土不服,时间序列数据存在时间关联性和整体逻辑特性。深度学习模型无法利用历史数据的时间依赖关系,来分析数据特征,故而无法处理时间序列数据。计算机科学家借鉴大脑处理时序数据的模式,改造了深度学习模型,提出了循环神经网络模型。循环神经网络模型在隐层引入了定向循环,它能更好的表征高纬度信息的整体逻辑性。

    1 RNN简史

    • 1982年,约翰·霍普菲尔德提出Hopfiled网络,网络内部有反馈连接,能够处理信号中的时间依赖性;
    • 1986年,Michael Jordan 在神经网络中引入循环连接;
    • 1990年,Jeffrey Elman 正式提出了RNN模型,RNN具备有限短期记忆;(利用反向传播和梯度下降算法过程中遭受到了严重的梯度消失问题)
    • 1997年,Sepp Hochreiter提出长短期记忆(Long short-term memory)网络模型;
    • 2003年,Yoshua Bengio基于RNN的N元统计模型,解决了分词特征表征和维度魔咒问题。
    • 2010年以后,循环神经网络(RNN)/卷积神经网络(CNN)/深度信念网络(DBN)成为深度学习的三个模型。并诞生了很多智能语音应用(SIRI,Alexa…)。

    2 RNN的生物机理

    时间认知和目标导向在人脑处理语音识别和自然语音处理活动时显然非常重要。“书读百遍,其义自见”,“一回生二回熟”,“失败是成功母”等俗语均能发现时间认知和目标导向在人脑处理信息时的作用。历史信息经过强化叠加,逐渐沉淀下来,最终成为我们的经验知识,经验知识和上下文场景在某些场合可能比真实输入数据还要重要。RNN通过使用带有自反馈的神经元,能够处理理论上任意长度的(存在时间关联性的)序列数据。相比于传统的前馈神经网络,它更符合生物神经元的连接方式,更符合人类大脑处理信息的工作模式。

    3 循环神经网络(Recurrent Neural Network)

    时间序列数据存在时间关联性和整体逻辑特性,传统神经网络信息是单向传播的(误差反向传播不改变单向性),循环神经网络(RNN)将输出层的结果再次输入到隐藏层,以其能够发现时间序列数据的时间关联性和整体逻辑特性等高维度信息。1990年,Jeffrey Elman正式提出了RNN模型,RNN具备有限短期记忆;1997年,Sepp Hochreiter提出长短期记忆(LSTM)网络模型。

    Recurrent NN模型的创新:

    • 循环神经网络(RNN)处理时间序列数据具有先天优势;
    • 循环神经网络(RNN)通过反向传播和梯度下降算法达到了纠正错误的能力,但未解决梯度消失问题;
    • 直到1997年,循环神经网络(RNN)引入了一个基于LSTM的架构后,梯度消失问题得以解决;
    • LSTM的架构中的单元相当于一个模拟计算机,显著提高了网络精度。

    3.1 时间序列数据

    常见的时间序列数据包括:语言模型、手写体识别、序列生成、机器翻译、语音、视频分析等。时间序列数据的样本间存在顺序关系,每个样本和它之前的样本存在关联;直白一点呢的表述也就是选择和决策参考了上一次的状态。RNN不仅能够处理序列的输入,也能得到序列的输出,这里的序列指的是向量序列。

    假设时间序列为: X { x 1 , x 2 , … , x N } X\{x_1, x_2, \ldots, x_N\} X{x1,x2,,xN}

    时间序列模型为: P ( X ) = ∏ i = 1 N P ( x i ∣ x 1 , … , x i − 1 ) P(X)=\prod_{i=1}^N{P(x_i|x_1,\ldots,x_{i-1})} P(X)=i=1NP(xix1,,xi1)

    根据输出和输入序列不同数量rnn可以有多种不同的结构,不同结构自然就有不同的引用场合。每个矩形是一个向量;箭头代表函数(例如矩阵乘法);红色的是输入向量;蓝色的是输出向量;绿色的是某一时间的RNN状态。如下图,

    • 函数问题(不是序列): 一个输入得到一个输出,未体现序列的特征,例如:图像分类场景。
    • 一到多: 给一个输入得到一系列输出,可用于生产图片描述的场景,例如:图像自动字幕,将一幅幅图像转化为句子输出。
    • 多到一: 给一系列输入得到一个输出,可用于文本情感分析,对一些列的文本输入进行分类,看是消极还是积极情感,例如:情感分类,将一个给定的句子分类为积极的情感或者负面的情感
    • 间隔多到多: 给一些列输入得到一系列输出,可用于翻译或聊天对话场景,对输入的文本转换成另外的文本,例如:机器翻译,RNN读入英语的句子,翻译出法语的句子
    • 同步多到多: 它是经典的rnn结构,前一输入的状态会带到下一个状态中,而且每个输入都会对应一个输出,例如:视频分类,我们需要给视频的每一帧打标签。

    时间序列数据输出和输入序列的几种模式

    3.2 模型的结构

    和经典神经网络一样,循环神经网络(RNN)包含输入层,隐藏层和输出层;隐藏层分配了若干个权重矩阵,并利用优化函数(损失函数)按照一定优化条件定向优化,限定实际输出与目标输出之间的误差,最终计算出网络的权重矩阵。循环神经网络(RNN)引入了两个创新,(1) 即时输入和历史输入均分配权重,并通过优化函数确认最终的权重。(2) 引入了时间反向传播(BackPropagation Through Time,简称BPTT)。

    循环神经网络(RNN)继承了常规的梯度下降算法优化网络模型,常用随机梯度下降算法等均可用于优化循环神经网络(RNN)模型。梯度下降算法通过放大多维误差或代价函数的局部最小值来打破维数灾难。

    RNN与我们大脑神经元的工作方式更加的贴近,因为大脑的思考过程各个神经元是有相互间的交互的,但是以前的神经网络仅仅从一层到另外一层忽视了隐含层中神经元的复杂交互。在RNN中,神经元的输出可以在下一个时间戳直接作用到自身,即第i层神经元在m时刻的输入,除了(i-1)层神经元在该时刻的输出外,还包括其自身在(m-1)时刻的输出。

    RNN在NLP中有广泛的应用,语言模型与文本生成(Language Modeling and Generating Text),机器翻译(Machine Translation),语音识别(Speech Recognition),图像描述生成 (Generating Image Descriptions) 等。所有递归神经网络都具有神经网络重复模块链的形式。在标准RNN中,该重复模块将具有非常简单的结构,例如单个tanh层。为了分析方便,我们常将RNN在时序上展开,得到如下的结构:

    循环神经网络(RNN)模型展开
    图像来源:colah blog

    3.3 模型的优化

    RNN训练困难的主要原因在于隐藏层参数ww的传播:由于误差传播在展开后的RNN上,无论在前向传播过程还是在反向传播过程中ww都会乘上多次,这就导致:

    • 梯度消失:如果梯度很小的话(<1),乘上多次指数级下降,对输出几乎就没有影响了
    • 梯度爆炸:反过来,如果梯度很大的话,乘上多次指数级增加,又导致了梯度爆炸

    1 通过时间的反向传播

    经典神经网络使用著名的BP算法反向逐层回归优化网络模型,利用损失函数的偏导调整每个单元的权重。循环神经网络(RNN)使用新版本机制即时间的反向传播(BPTT),引入了记忆单元,历史时刻T-1/T-2的数据也参与计算,用以关注时间序列数据的 时间关联性和整体逻辑特性。当然记忆模块可以有多种变体,比如长时记忆、短时记忆和工作记忆,不一而足。

    2 梯度消失问题

    初代的循环神经网络(RNN)获取了初步的成功,但是梯度消失问题像梦魇一样让其陷入研究的低谷。梯度可以视为斜率,梯度值就是优化指示器;梯度值越大,网络模型很快速收敛到最佳状态;梯度值平坦或微弱,网络优化就失去了优化目标,网络模型无法收敛到最佳状态,只能处于随机漫步状态。

    3.4 长期依赖问题

    对于看电影、写作或思考的场景来说,我们总会或多或少的记住前面的东西(短暂记忆或持久记忆),然后旧的记忆和新的记忆反复叠加,最终我们完成了电影、写作或思考之旅。例如,我们看章子怡的电影《无问西东》,我们可以根据已经发生的故事情节推测当前故事情节的可能情节;或者我们的大脑会把所有已经发生的故事串起来,在某一刹那我们的泪如雨下。

    传统的神经网络(串行的卷积网络)不能做到这一点,这似乎是一个主要的缺点。例如,假设您想要对电影中每个点发生的事件进行分类。目前尚不清楚传统神经网络如何利用其对电影中先前事件的推理来告知后者。循环神经网络解决了这个问题。它们是具有循环的网络,允许信息持续存在。由于独特的设计结构,LSTM特别适合于处理时序间隔和延迟非常长的任务,作为非线性模型,LSTM非常适合于构造更大型深度神经网络。

    1 短期依赖问题

    时序数据(文本、音频或视频等)任务中,多数情况需要很多的上下文联系(甚至常识知识)才能准确预测。考虑尝试预测文本中的最后一个词“我在法国长大…我说流利的法语。”。最近的信息表明,下一个词可能是一种语言的名称,但如果我们想缩小哪种语言,我们需要从更进一步的背景来看,法国的背景。相关信息与需要变得非常大的点之间的差距完全是可能的。不幸的是,随着差距的扩大,RNN无法学会连接信息。

    RNN的短期依赖示意图
    图像来源:colah blog

    2 长期依赖问题

    RNN的优势是能够将先前信息连接到当前任务。我们只需要查看最近的信息来执行当前任务。如果相关信息与所需地点之间的差距很小,RNN可以学习使用过去的信息。例如: 考虑一种语言模型,试图根据之前的单词预测下一个单词。如果我们试图预测“云在天空中”的最后一个词,我们不需要任何进一步的背景 - 很明显,下一个词将是天空。

    RNN的短期依赖示意图
    图像来源:colah blog

    4 RNN代码示例

    5 扩展思考

    5.1 LTSM的原理,LTSM对RNN的主要改进是什么?
    5.2 请列举基于RNN/LTSM的流行产品或应用?
    5.3 RNN/LTSM可以预测股票等金融数据吗?

    系列文章

    参考文献

    • [1] Ian Goodfellow, Yoshua Bengio. Deep Learning. MIT Press. 2016.
    • [2] 焦李成等. 深度学习、优化与识别. 清华大学出版社. 2017.
    • [3] 佩德罗·多明戈斯. 终极算法-机器学习和人工智能如何重塑世界. 中信出版社. 2018.
    • [4] 雷.库兹韦尔. 人工智能的未来-揭示人类思维的奥秘. 浙江人民出版社. 2016.
    展开全文
  • 基于深度循环神经网络的异常用电检测方法.pdf
  • 结合深度循环神经网络的单通道盲分离.pdf
  • 嵌入指针网络的深度循环神经网络模型求解作业车间调度问题.pdf
  • 基于深度循环神经网络的大规模风力发电功率预测.pdf
  • 基于深度循环神经网络和改进SMOTE算法的组合式入侵检测模型.pdf
  • 深度学习极大地推进了计算机视觉、自然语言处理和其他领域的最新技术。 该论文探讨了深度学习在汇率预测方面的潜力。... 尤其是在交易利润方面,更简单的神经网络的表现可能与更复杂的深度神经网络一样好,甚至更好。
  • 文章目录循环神经网络门控循环单元(GRU)门控循环单元重置门和更新门候选隐藏状态隐藏状态输出结果长短期记忆(LSTM)输入门、遗忘门和输出门候选记忆细胞记忆细胞隐藏状态输出结果深度循环神经网络双向循环神经...

    循环神经网络

    在循环神经网络中输入数据是存在时间相关性的,也就是说,前一个时间点的数据会对后一时间点的数据产生影响。假设 X t ∈ R n × d \boldsymbol{X}_t \in \mathbb{R}^{n \times d} XtRn×d 是序列中时间步 t t t 的小批量输入, H t ∈ R n × h \boldsymbol{H}_t \in \mathbb{R}^{n \times h} HtRn×h 是该时间步的隐藏变量。与多层感知机不同的是,这里我们保存上一时间步的隐藏变量 H t − 1 \boldsymbol{H}_{t-1} Ht1,并引入一个新的权重参数 W h h ∈ R h × h \boldsymbol{W}_{hh} \in \mathbb{R}^{h \times h} WhhRh×h,该参数用来描述在当前时间步如何使用上一时间步的隐藏变量。具体来说,时间步 t t t 的隐藏变量的计算由当前时间步的输入和上一时间步的隐藏变量共同决定:

    H t = ϕ ( X t W x h + H t − 1 W h h + b h ) . \boldsymbol{H}_t = \phi(\boldsymbol{X}_t \boldsymbol{W}_{xh} + \boldsymbol{H}_{t-1} \boldsymbol{W}_{hh} + \boldsymbol{b}_h). Ht=ϕ(XtWxh+Ht1Whh+bh).

    与多层感知机相比,我们在这里添加了 H t − 1 W h h \boldsymbol{H}_{t-1} \boldsymbol{W}_{hh} Ht1Whh 一项。由上式中相邻时间步的隐藏变量 H t \boldsymbol{H}_t Ht H t − 1 \boldsymbol{H}_{t-1} Ht1 之间的关系可知,这里的隐藏变量能够捕捉截至当前时间步的序列的历史信息,就像是神经网络当前时间步的状态或记忆一样。因此,该隐藏变量也称为隐藏状态。隐藏状态中 X t W x h + H t − 1 W h h \boldsymbol{X}_t \boldsymbol{W}_{xh} + \boldsymbol{H}_{t-1} \boldsymbol{W}_{hh} XtWxh+Ht1Whh 的计算等价于 X t \boldsymbol{X}_t Xt H t − 1 \boldsymbol{H}_{t-1} Ht1 连结后的矩阵乘以 W x h \boldsymbol{W}_{xh} Wxh W h h \boldsymbol{W}_{hh} Whh连结后的矩阵。由于隐藏状态在当前时间步的定义使用了上一时间步的隐藏状态,上式的计算是循环的。使用循环计算的网络即循环神经网络(recurrent neural network)。

    循环神经网络有很多种不同的构造方法。含上式所定义的隐藏状态的循环神经网络是极为常见的一种。在时间步 t t t,输出层的输出和多层感知机中的计算类似:

    O t = H t W h q + b q . \boldsymbol{O}_t = \boldsymbol{H}_t \boldsymbol{W}_{hq} + \boldsymbol{b}_q. Ot=HtWhq+bq.

    循环神经网络的参数包括隐藏层的权重 W x h ∈ R d × h \boldsymbol{W}_{xh} \in \mathbb{R}^{d \times h} WxhRd×h W h h ∈ R h × h \boldsymbol{W}_{hh} \in \mathbb{R}^{h \times h} WhhRh×h 和偏差 b h ∈ R 1 × h \boldsymbol{b}_h \in \mathbb{R}^{1 \times h} bhR1×h,以及输出层的权重 W h q ∈ R h × q \boldsymbol{W}_{hq} \in \mathbb{R}^{h \times q} WhqRh×q 和偏差 b q ∈ R 1 × q \boldsymbol{b}_q \in \mathbb{R}^{1 \times q} bqR1×q。值得一提的是,即便在不同时间步,循环神经网络也始终使用这些模型参数。因此,循环神经网络模型参数的数量不随时间步的增加而增长。
    在这里插入图片描述
    上图展示了循环神经网络在3个相邻时间步的计算逻辑。在时间步 t t t,隐藏状态的计算可以看成是将输入 X t \boldsymbol{X}_t Xt 和前一时间步隐藏状态 H t − 1 \boldsymbol{H}_{t-1} Ht1 连结后输入一个激活函数为 ϕ \phi ϕ 的全连接层。该全连接层的输出就是当前时间步的隐藏状态 H t \boldsymbol{H}_t Ht,且模型参数为 W x h \boldsymbol{W}_{xh} Wxh W h h \boldsymbol{W}_{hh} Whh 的连结,偏差为 b h \boldsymbol{b}_h bh。当前时间步 t t t 的隐藏状态 H t \boldsymbol{H}_t Ht 将参与下一个时间步 t + 1 t+1 t+1 的隐藏状态 H t + 1 \boldsymbol{H}_{t+1} Ht+1 的计算,并输入到当前时间步的全连接输出层。

    门控循环单元(GRU)

    循环神经网络中如何通过时间反向传播?一文中介绍了循环神经网络中的梯度计算方法。我们发现,当时间步数较大或者时间步较小时,循环神经网络的梯度较容易出现衰减或爆炸。虽然裁剪梯度可以应对梯度爆炸,但无法解决梯度衰减的问题。通常由于这个原因,循环神经网络在实际中较难捕捉时间序列中时间步距离较大的依赖关系。

    门控循环单元

    门控循环神经网络(gated recurrent neural network)的提出,正是为了更好地捕捉时间序列中时间步距离较大的依赖关系。它通过可以学习的门来控制信息的流动。其中,门控循环单元(gated recurrent unit,GRU)是一种常用的门控循环神经网络。

    重置门和更新门

    如下图所示,门控循环单元中的重置门和更新门的输入均为当前时间步输入 X t \boldsymbol{X}_t Xt 与上一时间步隐藏状态 H t − 1 \boldsymbol{H}_{t-1} Ht1,输出由激活函数为 sigmoid 函数的全连接层计算得到。
    在这里插入图片描述具体来说,假设样本数为 n n n、输入个数为 d d d(即每个样本包含的元素数,一般为词典大小)、隐藏单元个数为 h h h,给定时间步 t t t 的小批量输入 X t ∈ R n × d \boldsymbol{X}_t \in \mathbb{R}^{n \times d} XtRn×d 和上一时间步隐藏状态 H t − 1 ∈ R n × h \boldsymbol{H}_{t-1} \in \mathbb{R}^{n \times h} Ht1Rn×h。重置门 R t ∈ R n × h \boldsymbol{R}_t \in \mathbb{R}^{n \times h} RtRn×h 和更新门 Z t ∈ R n × h \boldsymbol{Z}_t \in \mathbb{R}^{n \times h} ZtRn×h 的计算如下:

    R t = σ ( X t W x r + H t − 1 W h r + b r ) \boldsymbol{R}_t = \sigma(\boldsymbol{X}_t \boldsymbol{W}_{xr} + \boldsymbol{H}_{t-1} \boldsymbol{W}_{hr} + \boldsymbol{b}_r) Rt=σ(XtWxr+Ht1Whr+br)
    Z t = σ ( X t W x z + H t − 1 W h z + b z ) \boldsymbol{Z}_t = \sigma(\boldsymbol{X}_t \boldsymbol{W}_{xz} + \boldsymbol{H}_{t-1} \boldsymbol{W}_{hz} + \boldsymbol{b}_z) Zt=σ(XtWxz+Ht1Whz+bz)

    其中 W x r , W x z ∈ R d × h \boldsymbol{W}_{xr}, \boldsymbol{W}_{xz} \in \mathbb{R}^{d \times h} Wxr,WxzRd×h W h r , W h z ∈ R h × h \boldsymbol{W}_{hr}, \boldsymbol{W}_{hz} \in \mathbb{R}^{h \times h} Whr,WhzRh×h 是权重参数, b r , b z ∈ R 1 × h \boldsymbol{b}_r, \boldsymbol{b}_z \in \mathbb{R}^{1 \times h} br,bzR1×h 是偏差参数。sigmoid 函数可以将元素的值变换到0和1之间。因此,重置门 R t \boldsymbol{R}_t Rt 和更新门 Z t \boldsymbol{Z}_t Zt 中每个元素的值域都是 [ 0 , 1 ] [0, 1] [0,1]

    候选隐藏状态

    接下来,门控循环单元将计算候选隐藏状态来辅助稍后的隐藏状态计算。如下图所示,我们将当前时间步重置门的输出与上一时间步隐藏状态做按元素乘法(符号为 ⊙ \odot )。如果重置门中元素值接近0,那么意味着重置对应隐藏状态元素为0,即丢弃上一时间步的隐藏状态。如果元素值接近1,那么表示保留上一时间步的隐藏状态。然后,将按元素乘法的结果与当前时间步的输入连结,再通过含激活函数 tanh 的全连接层计算出候选隐藏状态,其所有元素的值域为 [ − 1 , 1 ] [-1, 1] [1,1]

    具体来说,时间步 t t t 的候选隐藏状态 H ~ t ∈ R n × h \tilde{\boldsymbol{H}}_t \in \mathbb{R}^{n \times h} H~tRn×h 的计算为:

    H ~ t = tanh ( X t W x h + ( R t ⊙ H t − 1 ) W h h + b h ) \tilde{\boldsymbol{H}}_t = \text{tanh}(\boldsymbol{X}_t \boldsymbol{W}_{xh} + \left(\boldsymbol{R}_t \odot \boldsymbol{H}_{t-1}\right) \boldsymbol{W}_{hh} + \boldsymbol{b}_h) H~t=tanh(XtWxh+(RtHt1)Whh+bh)

    其中 W x h ∈ R d × h \boldsymbol{W}_{xh} \in \mathbb{R}^{d \times h} WxhRd×h W h h ∈ R h × h \boldsymbol{W}_{hh} \in \mathbb{R}^{h \times h} WhhRh×h 是权重参数, b h ∈ R 1 × h \boldsymbol{b}_h \in \mathbb{R}^{1 \times h} bhR1×h 是偏差参数。从上面这个公式可以看出,重置门控制了上一时间步的隐藏状态如何流入当前时间步的候选隐藏状态。而上一时间步的隐藏状态可能包含了时间序列截至上一时间步的全部历史信息。因此,重置门可以用来丢弃与预测无关的历史信息从而有助于捕捉时间序列里短期的依赖关系

    隐藏状态

    最后,时间步 t t t 的隐藏状态 H t ∈ R n × h \boldsymbol{H}_t \in \mathbb{R}^{n \times h} HtRn×h 的计算使用当前时间步的更新门 Z t \boldsymbol{Z}_t Zt 来对上一时间步的隐藏状态 H t − 1 \boldsymbol{H}_{t-1} Ht1 和当前时间步的候选隐藏状态 H ~ t \tilde{\boldsymbol{H}}_t H~t 做组合:

    H t = Z t ⊙ H t − 1 + ( 1 − Z t ) ⊙ H ~ t \boldsymbol{H}_t = \boldsymbol{Z}_t \odot \boldsymbol{H}_{t-1} + (1 - \boldsymbol{Z}_t) \odot \tilde{\boldsymbol{H}}_t Ht=ZtHt1+(1Zt)H~t
    在这里插入图片描述值得注意的是,更新门可以控制隐藏状态应该如何被包含当前时间步信息的候选隐藏状态所更新,如上图所示。假设更新门在时间步 t ′ t' t t t t t ′ < t t' < t t<t)之间一直近似于1。那么,在时间步 t ′ t' t t t t 之间的输入信息几乎没有流入时间步 t t t 的隐藏状态 H t \boldsymbol{H}_t Ht。实际上,这可以看作是较早时刻的隐藏状态 H t ′ − 1 \boldsymbol{H}_{t'-1} Ht1 一直通过时间保存并传递至当前时间步 t t t。这个设计可以应对循环神经网络中的梯度衰减问题,并更好地捕捉时间序列中时间步距离较大的依赖关系(即长期的依赖关系)。

    输出结果

    将上面得到的隐藏状态 H t H_t Ht 输入神经网络,得到结果 Y t ∈ R n × q \boldsymbol{Y}_t \in \mathbb{R}^{n \times q} YtRn×q
    Y t = H t W h q + b q \boldsymbol{Y}_t = \boldsymbol{H}_t \boldsymbol{W}_{hq} + \boldsymbol{b}_q Yt=HtWhq+bq

    总结来说:

    • 重置门有助于捕捉时间序列里短期的依赖关系;
    • 更新门有助于捕捉时间序列里长期的依赖关系。

    长短期记忆(LSTM)

    LSTM 中引入了3个门,即输入门(input gate)、遗忘门(forget gate)和输出门(output gate),以及与隐藏状态形状相同的记忆细胞(某些文献把记忆细胞当成一种特殊的隐藏状态),从而记录额外的信息。

    输入门、遗忘门和输出门

    与门控循环单元中的重置门和更新门一样,如下图所示,长短期记忆的门的输入均为当前时间步输入 X t \boldsymbol{X}_t Xt 与上一时间步隐藏状态 H t − 1 \boldsymbol{H}_{t-1} Ht1,输出由激活函数为 sigmoid 函数的全连接层计算得到。如此一来,这3个门元素的值域均为 [ 0 , 1 ] [0,1] [0,1]
    在这里插入图片描述
    具体来说,假设样本数为 n n n,输入个数为 d d d,隐藏单元个数为 h h h,给定时间步 t t t 的小批量输入 X t ∈ R n × d \boldsymbol{X}_t \in \mathbb{R}^{n \times d} XtRn×d 和上一时间步隐藏状态 H t − 1 ∈ R n × h \boldsymbol{H}_{t-1} \in \mathbb{R}^{n \times h} Ht1Rn×h。 时间步 t t t 的输入门 I t ∈ R n × h \boldsymbol{I}_t \in \mathbb{R}^{n \times h} ItRn×h、遗忘门 F t ∈ R n × h \boldsymbol{F}_t \in \mathbb{R}^{n \times h} FtRn×h 和输出门 O t ∈ R n × h \boldsymbol{O}_t \in \mathbb{R}^{n \times h} OtRn×h 分别计算如下:

    I t = σ ( X t W x i + H t − 1 W h i + b i ) \boldsymbol{I}_t = \sigma(\boldsymbol{X}_t \boldsymbol{W}_{xi} + \boldsymbol{H}_{t-1} \boldsymbol{W}_{hi} + \boldsymbol{b}_i) It=σ(XtWxi+Ht1Whi+bi)
    F t = σ ( X t W x f + H t − 1 W h f + b f ) \boldsymbol{F}_t = \sigma(\boldsymbol{X}_t \boldsymbol{W}_{xf} + \boldsymbol{H}_{t-1} \boldsymbol{W}_{hf} + \boldsymbol{b}_f) Ft=σ(XtWxf+Ht1Whf+bf)
    O t = σ ( X t W x o + H t − 1 W h o + b o ) \boldsymbol{O}_t = \sigma(\boldsymbol{X}_t \boldsymbol{W}_{xo} + \boldsymbol{H}_{t-1} \boldsymbol{W}_{ho} + \boldsymbol{b}_o) Ot=σ(XtWxo+Ht1Who+bo)

    其中的 W x i , W x f , W x o ∈ R d × h \boldsymbol{W}_{xi}, \boldsymbol{W}_{xf}, \boldsymbol{W}_{xo} \in \mathbb{R}^{d \times h} Wxi,Wxf,WxoRd×h W h i , W h f , W h o ∈ R h × h \boldsymbol{W}_{hi}, \boldsymbol{W}_{hf}, \boldsymbol{W}_{ho} \in \mathbb{R}^{h \times h} Whi,Whf,WhoRh×h 是权重参数, b i , b f , b o ∈ R 1 × h \boldsymbol{b}_i, \boldsymbol{b}_f, \boldsymbol{b}_o \in \mathbb{R}^{1 \times h} bi,bf,boR1×h 是偏差参数。

    候选记忆细胞

    接下来,长短期记忆需要计算候选记忆细胞 C ~ t \tilde{\boldsymbol{C}}_t C~t。它的计算与上面介绍的3个门类似,但使用了值域在 [ − 1 , 1 ] [-1, 1] [1,1]tanh 函数作为激活函数,如下图所示。
    在这里插入图片描述
    具体来说,时间步 t t t 的候选记忆细胞 C ~ t ∈ R n × h \tilde{\boldsymbol{C}}_t \in \mathbb{R}^{n \times h} C~tRn×h 的计算为

    C ~ t = tanh ( X t W x c + H t − 1 W h c + b c ) \tilde{\boldsymbol{C}}_t = \text{tanh}(\boldsymbol{X}_t \boldsymbol{W}_{xc} + \boldsymbol{H}_{t-1} \boldsymbol{W}_{hc} + \boldsymbol{b}_c) C~t=tanh(XtWxc+Ht1Whc+bc)

    其中 W x c ∈ R d × h \boldsymbol{W}_{xc} \in \mathbb{R}^{d \times h} WxcRd×h W h c ∈ R h × h \boldsymbol{W}_{hc} \in \mathbb{R}^{h \times h} WhcRh×h 是权重参数, b c ∈ R 1 × h \boldsymbol{b}_c \in \mathbb{R}^{1 \times h} bcR1×h 是偏差参数。

    记忆细胞

    我们可以通过元素值域在 [ 0 , 1 ] [0, 1] [0,1]的输入门、遗忘门和输出门来控制隐藏状态中信息的流动,这一般也是通过使用按元素乘法(符号为 ⊙ \odot )来实现的。当前时间步记忆细胞 C t ∈ R n × h \boldsymbol{C}_t \in \mathbb{R}^{n \times h} CtRn×h 的计算组合了上一时间步记忆细胞和当前时间步候选记忆细胞的信息,并通过遗忘门和输入门来控制信息的流动:

    C t = F t ⊙ C t − 1 + I t ⊙ C ~ t . \boldsymbol{C}_t = \boldsymbol{F}_t \odot \boldsymbol{C}_{t-1} + \boldsymbol{I}_t \odot \tilde{\boldsymbol{C}}_t. Ct=FtCt1+ItC~t.

    如下图所示,遗忘门控制上一时间步的记忆细胞 C t − 1 \boldsymbol{C}_{t-1} Ct1 中的信息是否传递到当前时间步,而输入门则控制当前时间步的输入 X t \boldsymbol{X}_t Xt 通过候选记忆细胞 C ~ t \tilde{\boldsymbol{C}}_t C~t 如何流入当前时间步的记忆细胞。如果遗忘门一直近似1且输入门一直近似0,过去的记忆细胞将一直通过时间保存并传递至当前时间步。这个设计可以应对循环神经网络中的梯度衰减问题,并更好地捕捉时间序列中时间步距离较大的依赖关系。
    在这里插入图片描述

    隐藏状态

    有了记忆细胞以后,接下来我们还可以通过输出门来控制从记忆细胞到隐藏状态 H t ∈ R n × h \boldsymbol{H}_t \in \mathbb{R}^{n \times h} HtRn×h 的信息的流动:

    H t = O t ⊙ tanh ( C t ) . \boldsymbol{H}_t = \boldsymbol{O}_t \odot \text{tanh}(\boldsymbol{C}_t). Ht=Ottanh(Ct).

    这里的 tanh 函数确保隐藏状态元素值在-1到1之间。需要注意的是,当输出门近似1时,记忆细胞信息将传递到隐藏状态供输出层使用;当输出门近似0时,记忆细胞信息只自己保留。下图展示了长短期记忆中隐藏状态的计算。
    在这里插入图片描述

    输出结果

    长短期记忆的隐藏层输出包括隐藏状态和记忆细胞,但只有隐藏状态会传递到输出层,而记忆细胞不参与输出层的计算。
    将上面得到的隐藏状态 H t H_t Ht 输入神经网络,得到结果 Y t ∈ R n × q \boldsymbol{Y}_t \in \mathbb{R}^{n \times q} YtRn×q
    Y t = H t W h q + b q \boldsymbol{Y}_t = \boldsymbol{H}_t \boldsymbol{W}_{hq} + \boldsymbol{b}_q Yt=HtWhq+bq

    深度循环神经网络

    到目前为止所涉及的循环神经网络只有一个单向的隐藏层,在深度学习应用里,我们通常会用到含有多个隐藏层的循环神经网络,也称作深度循环神经网络。下图演示了一个有 L L L 个隐藏层的深度循环神经网络,每个隐藏状态不断传递至当前层的下一时间步和当前时间步的下一层。在之前的介绍中,我们只包含输入层、第一层隐藏层和输出层。
    在这里插入图片描述
    具体来说,在时间步 t t t 里,设小批量输入 X t ∈ R n × d \boldsymbol{X}_t \in \mathbb{R}^{n \times d} XtRn×d(样本数为 n n n,输入个数为 d d d ),第 ℓ \ell 隐藏层( ℓ = 1 , … , L \ell=1,\ldots,L =1,,L )的隐藏状态为 H t ( ℓ ) ∈ R n × h \boldsymbol{H}_t^{(\ell)} \in \mathbb{R}^{n \times h} Ht()Rn×h(隐藏单元个数为 h h h ),输出层变量为 O t ∈ R n × q \boldsymbol{O}_t \in \mathbb{R}^{n \times q} OtRn×q(输出个数为 q q q ),且隐藏层的激活函数为 ϕ \phi ϕ。第一层隐藏层的隐藏状态和之前的计算一样:

    H t ( 1 ) = ϕ ( X t W x h ( 1 ) + H t − 1 ( 1 ) W h h ( 1 ) + b h ( 1 ) ) , \boldsymbol{H}_t^{(1)} = \phi(\boldsymbol{X}_t \boldsymbol{W}_{xh}^{(1)} + \boldsymbol{H}_{t-1}^{(1)} \boldsymbol{W}_{hh}^{(1)} + \boldsymbol{b}_h^{(1)}), Ht(1)=ϕ(XtWxh(1)+Ht1(1)Whh(1)+bh(1)),

    其中权重 W x h ( 1 ) ∈ R d × h \boldsymbol{W}_{xh}^{(1)} \in \mathbb{R}^{d \times h} Wxh(1)Rd×h W h h ( 1 ) ∈ R h × h \boldsymbol{W}_{hh}^{(1)} \in \mathbb{R}^{h \times h} Whh(1)Rh×h 和偏差 b h ( 1 ) ∈ R 1 × h \boldsymbol{b}_h^{(1)} \in \mathbb{R}^{1 \times h} bh(1)R1×h 分别为第一层隐藏层的模型参数。

    1 < ℓ ≤ L 1 < \ell \leq L 1<L 时,第 ℓ \ell 隐藏层的隐藏状态的表达式为

    H t ( ℓ ) = ϕ ( H t ( ℓ − 1 ) W x h ( ℓ ) + H t − 1 ( ℓ ) W h h ( ℓ ) + b h ( ℓ ) ) , \boldsymbol{H}_t^{(\ell)} = \phi(\boldsymbol{H}_t^{(\ell-1)} \boldsymbol{W}_{xh}^{(\ell)} + \boldsymbol{H}_{t-1}^{(\ell)} \boldsymbol{W}_{hh}^{(\ell)} + \boldsymbol{b}_h^{(\ell)}), Ht()=ϕ(Ht(1)Wxh()+Ht1()Whh()+bh()),

    其中权重 W x h ( ℓ ) ∈ R h × h \boldsymbol{W}_{xh}^{(\ell)} \in \mathbb{R}^{h \times h} Wxh()Rh×h W h h ( ℓ ) ∈ R h × h \boldsymbol{W}_{hh}^{(\ell)} \in \mathbb{R}^{h \times h} Whh()Rh×h 和偏差 b h ( ℓ ) ∈ R 1 × h \boldsymbol{b}_h^{(\ell)} \in \mathbb{R}^{1 \times h} bh()R1×h 分别为第 ℓ \ell 隐藏层的模型参数。

    最终,输出层的输出只需基于第 L L L 隐藏层的隐藏状态:

    O t = H t ( L ) W h q + b q , \boldsymbol{O}_t = \boldsymbol{H}_t^{(L)} \boldsymbol{W}_{hq} + \boldsymbol{b}_q, Ot=Ht(L)Whq+bq,

    其中权重 W h q ∈ R h × q \boldsymbol{W}_{hq} \in \mathbb{R}^{h \times q} WhqRh×q 和偏差 b q ∈ R 1 × q \boldsymbol{b}_q \in \mathbb{R}^{1 \times q} bqR1×q 为输出层的模型参数。

    同多层感知机一样,隐藏层个数 L L L 和隐藏单元个数 h h h 都是超参数。此外,如果将隐藏状态的计算换成门控循环单元或者长短期记忆的计算,我们可以得到深度门控循环神经网络。

    双向循环神经网络

    之前介绍的循环神经网络模型都是假设当前时间步是由前面的较早时间步的序列决定的,因此它们都将信息通过隐藏状态从前往后传递。有时候,当前时间步也可能由后面时间步决定。例如,当我们写下一个句子时,可能会根据句子后面的词来修改句子前面的用词。双向循环神经网络通过增加从后往前传递信息的隐藏层来更灵活地处理这类信息。下图演示了一个含单隐藏层的双向循环神经网络的架构。
    在这里插入图片描述
    下面我们来介绍具体的定义。 给定时间步 t t t 的小批量输入 X t ∈ R n × d \boldsymbol{X}_t \in \mathbb{R}^{n \times d} XtRn×d(样本数为 n n n,输入个数为 d d d )和隐藏层激活函数为 ϕ \phi ϕ。在双向循环神经网络的架构中, 设该时间步正向隐藏状态为 H → t ∈ R n × h \overrightarrow{\boldsymbol{H}}_t \in \mathbb{R}^{n \times h} H tRn×h(正向隐藏单元个数为 h h h ), 反向隐藏状态为 H ← t ∈ R n × h \overleftarrow{\boldsymbol{H}}_t \in \mathbb{R}^{n \times h} H tRn×h(反向隐藏单元个数为 h h h )。我们可以分别计算正向隐藏状态和反向隐藏状态:

    H → t = ϕ ( X t W x h ( f ) + H → t − 1 W h h ( f ) + b h ( f ) ) ,   H ← t = ϕ ( X t W x h ( b ) + H ← t + 1 W h h ( b ) + b h ( b ) ) \begin{aligned} \overrightarrow{\boldsymbol{H}}_t &= \phi(\boldsymbol{X}_t \boldsymbol{W}_{xh}^{(f)} + \overrightarrow{\boldsymbol{H}}_{t-1} \boldsymbol{W}_{hh}^{(f)} + \boldsymbol{b}_h^{(f)}),\ \overleftarrow{\boldsymbol{H}}_t &= \phi(\boldsymbol{X}_t \boldsymbol{W}_{xh}^{(b)} + \overleftarrow{\boldsymbol{H}}_{t+1} \boldsymbol{W}_{hh}^{(b)} + \boldsymbol{b}_h^{(b)}) \end{aligned} H t=ϕ(XtWxh(f)+H t1Whh(f)+bh(f)), H t=ϕ(XtWxh(b)+H t+1Whh(b)+bh(b))

    其中权重 W x h ( f ) ∈ R d × h \boldsymbol{W}_{xh}^{(f)} \in \mathbb{R}^{d \times h} Wxh(f)Rd×h W h h ( f ) ∈ R h × h \boldsymbol{W}_{hh}^{(f)} \in \mathbb{R}^{h \times h} Whh(f)Rh×h W x h ( b ) ∈ R d × h \boldsymbol{W}_{xh}^{(b)} \in \mathbb{R}^{d \times h} Wxh(b)Rd×h W h h ( b ) ∈ R h × h \boldsymbol{W}_{hh}^{(b)} \in \mathbb{R}^{h \times h} Whh(b)Rh×h 和偏差 b h ( f ) ∈ R 1 × h \boldsymbol{b}_h^{(f)} \in \mathbb{R}^{1 \times h} bh(f)R1×h b h ( b ) ∈ R 1 × h \boldsymbol{b}_h^{(b)} \in \mathbb{R}^{1 \times h} bh(b)R1×h 均为模型参数。

    然后我们连结两个方向的隐藏状态 H → t \overrightarrow{\boldsymbol{H}}_t H t H ← t \overleftarrow{\boldsymbol{H}}_t H t 来得到隐藏状态 H t ∈ R n × 2 h \boldsymbol{H}_t \in \mathbb{R}^{n \times 2h} HtRn×2h,并将其输入到输出层。输出层计算输出 O t ∈ R n × q \boldsymbol{O}_t \in \mathbb{R}^{n \times q} OtRn×q(输出个数为 q q q ):

    O t = H t W h q + b q \boldsymbol{O}_t = \boldsymbol{H}_t \boldsymbol{W}_{hq} + \boldsymbol{b}_q Ot=HtWhq+bq

    其中权重 W h q ∈ R 2 h × q \boldsymbol{W}_{hq} \in \mathbb{R}^{2h \times q} WhqR2h×q 和偏差 b q ∈ R 1 × q \boldsymbol{b}_q \in \mathbb{R}^{1 \times q} bqR1×q 为输出层的模型参数。不同方向上的隐藏单元个数也可以不同。

    展开全文
  • 网络游戏-基于深度循环神经网络的应用层通信协议识别的方法.zip
  • 深度循环神经网络(Deep RNN)4.双向循环神经网络(BRNN)   一、过拟合欠拟合 1.概念 欠拟合:训练误差(训练集的损失函数的值)较大。 过拟合:训练误差远远小于泛化误差(任意测试样本误差的期望)。 验证集:在训练...
  • 一个包含循环神经网络CNN的代码,运行没有问题
  • 文章目录门控循环神经网络GRU长短期记忆LSTM深度循环神经网络双向循环神经网络 门控循环神经网络GRU 该网络的提出也同样是为了应对普通RNN的梯度问题 基本原理看这一篇就能懂:转载自知乎 简单来说,GRU就是通过一个...
  • 深度学习》之 循环神经网络 原理 超详解

    万次阅读 多人点赞 2020-03-20 13:28:26
    循环神经网络 一.研究背景 1933年,西班牙神经生物学家Rafael Lorente de Nó发现大脑皮层(cerebral cortex)的解剖结构允许刺激在神经回路中循环传递,并由此提出反响回路假设(reverberating circuit hypothesis...
  • 循环神经网络(Recurrent Neural Network, RNN)是一类以序列(sequence)数据为输入,在序列的演进方向进行递归(recursion)且所有节点(循环单元)按链式连接的递归神经网络(recursive neural network)。 递归神经网络...
  • MIT版深度学习第10章 循环神经网络循环神经网络用于处理连续性数据,基础的神经网络只在层与层之间建立了权连接,RNN最大的不同之处就是在层之间的神经元之间也建立的权连接
  • 循环神经网络的研究始于二十世纪80-90年代,并在二十一世纪初发展为深度学习(deep learning)算法之一 [2] ,其中双向循环神经网络(Bidirectional RNN, Bi-RNN)和长短期记忆网络(Long Short-Term Memory ...
  • 深度学习中的循环神经网络LSTM详解

    千次阅读 2019-09-07 21:17:43
    (一)、什么是循环神经网络LSTM? LSTM指的是长短期记忆网络(Long Short Term Memory),它是循环神经网络的最知名和成功的扩展。由于循环神经网络有梯度消失和梯度爆炸的问题,学习能力有限,在实际任务中的效果很...
  • 循环神经网络实现语言模型循环神经网络裁剪梯度困惑度实现 循环神经网络 目的是基于当前的输入与过去的输入序列,预测序列的下一个字符。循环神经网络中引入一个隐含层HHH,用HtH_tHt​表示HHH在时间步ttt的值。HtH_...
  • 深度学习神经网络之循环神经网络(RNN)Matlab实现循环神经网络RNN
  • 3.深度循环神经网络 在前面几篇文章中,只讨论了具有一个单向隐藏层的循环神经网络。 其中,隐变量和观测值与具体的函数形式的交互方式是相当随意的。 只要交互类型建模具有足够的灵活性,这就不是一个大问题。 然而...
  • 深度学习的顶级循环神经网络的工作方式包括 LSTM、GRU 和 RNN. 循环神经网络(RNN)在自然语言处理、语音识别等有很广泛的用途。LSTM和GRU是目前使用最广泛的两个循环神经网络的模型变种。该视频课程内容主要分为三大...
  • pytorch版循环神经网络实现 import torch import torch.nn as nn import time import math import sys def load_data_jay_lyrics(): 加载周杰伦歌词数据集 with open('/Users/nick/Documents/dataset/jaychou_...
  • ⻔控循环神经⽹络:捕捉时间序列中时间步距离较⼤的依赖关系 重置⻔有助于捕捉时间序列⾥短期的依赖关系; 更新⻔有助于捕捉时间序列⾥⻓期的依赖关系 step 1 : 载入数据集 import os os.listdir('/home
  • 循环神经网络介绍进行了比较详细的介绍,讲解的比较浅显易懂
  • 介绍: RNN,也就是循环神经网络,是用来建模序列化数据的一种主流的深度学习模型。传统的前馈神经网络处理的输入往往都是一个定长向量,较难应对变长的序列信息,就算把序列处理成定长的向量,模型也很难捕捉序列中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 55,772
精华内容 22,308
关键字:

深度循环神经网络

友情链接: 2196086.rar