Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

邵洲作者

如何基于时间的反向传播算法来训练LSTMs?

LSTM是一种时间递归神经网络,适合于处理和预测时间序列中间隔和延迟相对较长的重要事件。在自然语言处理语言识别等一系列的应用上都取得了很好的效果。

《Long Short Term Memory Networks with Python》是澳大利亚机器学习专家Jason Brownlee的著作,里面详细介绍了LSTM模型的原理和使用。

该书总共分为十四个章节,具体如下:

第一章:什么是LSTMs?

第二章:怎么样训练LSTMs?(本期内容)

第三章:怎么样准备LSTMs的数据?

第四章:怎么样在Keras中开发LSTMs?

第五章:序列预测建模

第六章:怎么样开发一个Vanilla LSTM模型?

第七章:怎么样开发Stacked LSTMs?

第八章:开发CNN LSTM模型

第九章:开发Encoder-Decoder LSTMs

第十章:开发Bidirectional LSTMs

第十一章:开发生成LSTMs

第十二章:诊断和调试LSTMs

第十三章:怎么样用LSTMs做预测?

第十四章:更新LSTMs模型

本文的作者对此书进行了翻译整理之后,分享给大家。本文是第二期内容,第一期内容为:一万字纯干货|机器学习博士手把手教你入门LSTM(附代码资料)

2.0 概览

2.0.1 课程目标

本课程的目标是理解基于时间的反向传播算法(Backpropagation Through Time algorithm)来训练LSTMs。完成本课程之后,你将会知道:

  • 基于时间的反向传播算法是什么?以及它涉及的多层感知机网络所使用的反向传播训练算法。

  • 引起Truncated Backpropagation Through Time需要的动机,深度学习中训练LSTMs时最广泛的使用的变体。

  • 一种用于考虑如何通过时间和时间来研究反向传播的规范,以及用于研究和深度学习库中的正则表达式。

2.0.2 课程概要

本课程分为6个部分,它们是:

  1. 反向训练算法;

  2. 展开循环神经网络

  3. 基于时间的反向传播;

  4. 截断基于时间的反向传播;

  5. 截断BPTT的配置;

  6. TBPTT的Keras实现。

让我们开始吧!

2.1 反向传播训练

反向传播是指两件事情:

  • 计算导数的数学方法和链式求导规则的使用;

  • 更新网络权值以最小化误差的训练算法;

这是我们在本课中使用的后向传播算法的理解。反向传播算法训练的目的是修改神经网络权重,以使网络输出的误差与响应于相应输入的一些预期输出相比最小化。这是一个监督学习算法,允许网络对所犯特定错误进行校正。一般算法如下:

  1. 提出一种训练输入模式,并通过网络传播训练以获得输出;

  2. 将预测输出与预期输出进行比较,并计算误差;

  3. 计算误差相对于网络权重导数

  4. 重复。

2.2 展开循环神经网络

循环神经网络的一个简单概念是一种神经网络,它从先前的时间步长中获得输入。我们可以用图来阐明这一点:

图2.1 循环神经网络的一个简单示例

RNNs用于拟合,并在多时间步长上进行预测。随着时间步长的增加,具有递归连接的简单图开始失去所有意义。我们可以通过在输入序列上展开或者展开RNN图来简化模型。

可视化RNNs的一个有用的方法是考虑通过沿着输入序列“展开”网络形成的更新图。

——《用循环神经网络实现监督序列标签》,2008

2.2.1 展开向前传递

考虑下列的情况,我们有多个时间步长的输入 x(t),x(t+1),...,多个时间步长的内部状态 u(t),u(t+1),...,以及多个时间步长的输出 y(t),y(t+1),...。我们可以将网络示意图展开成为没有任何环的图,如下所示: 

图2.2 展开循环神经网络的例子

我们可以看到,我们除去了环,并且从先前的时间步长输出 (y(t))和内部状态 (u(t))作为输入,用于处理下一个时间步长。这个概念中的关键是网络(RNN)在展开的时间步长之间不改变。特别地,对于每个时间步长使用相同的权值,它只是不同的输出和内部状态。这样,就好像在输入序列中的每个时间步长复制了整个网络(拓扑和权重)。

我们可以把这个概念进一步地深化,在那里每个网络副本可以被看做是同一前馈神经网络的附加层。较深的层作为输入的前一层的输出以及一个新的输入时间步长。这些层实际上是同一组权重的所有副本,并且从层到层更新内部状态,这可能是这种经常使用的类比的延伸。

图2.3 以层为单位展开递归神经网络的例子

RNNs一旦在时间上展开,时间可以被看做是非常深的前馈网络,其中所有的层共享相同的权重

——Deep learning, Nature,2015

这是一个有用的工具,可视化有助于理解在前向传递中网络中发生了什么。它可能是也可能不是,网络是由深度学习库所的实现方式。

2.2.2 前向传播展开

网络展开的思想在循环神经网络实现向后传递方面发挥了更大的作用。

作为“通过时间的反向传播”的标准,网络随着时间的推移而展开,因此到达层的连接被视为来自先前的时间步长。

— Framewise phoneme classification with bidirectional LSTM and other neural network architectures, 2005

重要的是,对于给定的时间步长,误差的反向传播取决于在先前时间步长的网络的激活。以这种方式,向后传递需要展开网络概念化。误差被传播回序列的第一输出时间步长,从而可以计算误差梯度,并且可以更新网络权重

像标准反向传播,“基于时间的反向传播”包括重复应用链式规则。微妙的是,对于循环神经网络损失函数依赖于隐藏层的激活,不仅依赖于其在输出层上的隐藏激活,还取决于隐层在下一个时间步长上的隐层的激活。

— Supervised Sequence Labelling with Recurrent Neural Networks, 2008.

展开循环神经网络图也引入了额外的关注点。每个时间步长都需要一个新的网络副本,而网络又需要更多的内存,特别是对于具有数千或者数百万个权值的大型网络。随着时间步长攀升到数百,训练大型循环网络的内存需求会迅速膨胀。

它需要根据输入序列的长度展开RNNs。通过将RNN N次展开,网络内的神经元的每一次激活被复制N次,这会消耗大量的存储器,特别是当序列很长的时候。这阻碍了小规模的在线学习或者适应的实施。此外,这种“完全展开”使得多个序列并行训练,如图形处理单元(GPU)等共享内存模型。

——Online Sequence Training of Recurrent Neural Networks with Connectionist Temporal Classification, 2015.

2.3 基于时间的反向传播算法

基于时间的反向传播算法(或叫做BPTT),是反向传播训练算法在递归神经网络中的应用。在最简单的情况下,循环神经网络被显示出了每一个时间步长的一个输入,并预测一个输出。从概念上讲,BTPP通过展开所有时间步长来工作。每个时间步长具有一个输入时间步长、一个网络拷贝和一个输出。然后对每个时间步长计算和累计误差。网络被回滚,权重被更新。我们可以将算法总结如下:

  1. 向网络呈现输入和输出对时间步长的序列;

  2. 展开网络,然后计算并累计每个时间步长的误差

  3. 卷起网络并更新权重

  4. 重复。

BPTT随着时间步长的增加而计算变得昂贵。如果输入序列由数千个时间步长组成,那么这将是单个权重更新所需的导数的数目。这会导致梯度消失或者梯度爆炸(变成0或者溢出),并使学习缓慢或者模型技能嘈杂。

BPTT的主要问题之一就是但参数更新的成本太高,这使得不可能使用大量的迭代。

— Training Recurrent Neural Networks, 2013

解决梯度消失和梯度爆炸的一种方法是在执行权重更新之前限制时间步长的数量。

2.4 截断基于时间的反向传播算法

截断基于时间的反向传播算法,或者简称为TBPTT,是递归神经网络的BPTT训练算法的修改版本,其中序列被一次处理一个时间步长,并且周期性地为一个固定数量的时间步长执行更新。

截断BPTT...在一个时间的一个时间步长处理时间序列,并且每 k1时间步长,在 k2时间步长它运行BPTT,因此,如果 k2很小,参数更新可以是很便宜的。因此,它的隐藏状态已经被暴露于很多的时间步长,因此可能包含关于很久之前的有用信息,这将会被选择性的利用。

— Training Recurrent Neural Networks, 2013

我们可以总结算法如下:

  1. 提出了一系列的 k1时间步长的网络输入和输出对;

  2. 打开网络,然后计算并累计 k2时间步长的误差;

  3. 卷起网络并更新权重

  4. 重复。

TBPTT算法需要考虑两个参数k1:更新之间的正向传递的时间步数。一般来说,这个是一个缓慢或者快速的训练,因为经常进行权重更新。 k2:应用BPTT的时间步数。一般来说,它应该足够大,以捕获网络中的时间结构以学习网络。过大的值导致梯度消失。 截断BPTT的一个简单应用是实现将 k1设置为序列长度,并调整 k2以训练速度和模型技能。

2.5 截断BPTT的配置

我们可以把事情更加向前推进一步,用一种符号来帮助更好地理解BPTT。在它们处理的BPTT的时候命名为“An Ecient Gradient-Based Algorithm for On-Line Training of Recurrent Network Trajectories”,Williams和Peng设计了一种符号来铺货截断和未截断的配置,例如: BPTT(h)BPTT(h;1)

我们可以沿用这个符号,并使用Sutskever的 k1k2参数(如上)。使用这种符号,我们可以得出一些标准或者常用的方法。注:这里 n指的是输入序列中的时间步长总数。

  • BPTT(n,n):更新实在序列结束时在序列中的所有时间步长进行的(例如:经典的BPTT).

  • BPTT(1,n):时间步长一次处理一次,接着更新一个更新,涵盖迄今为止所见的所有时间步长(例如,Williams和Peng的经典TBPTT)。

  • BPTT(k1,1):网络可能没有足够的时间背景来学习,很大程度上依赖于内部状态和输入。

  • BPTT(k1,k2):其中, k1<k2<N:每个序列执行多个更新,可以加速训练。

  • BPTT(k1,k2):其中 k1=k2:一个共同的配置,其中一个固定的时间步长用于前向和后向时间步长(例如10s到100s)。

我们可以看到,所有配置是 TBPTT(n,n)上的一种变化,本质上试图以更快的训练和更稳定的结果来近似相同的效果。文献中报道的规范TBPTT可以被认为是 TBPTT(k1,k2)k1=k2=kk<=N,并且所选择的参数小(几十到几百个时间步长)。这里, k是必须指定的单个参数。人们经常声称输入时间步长的序列长度应该限制在200~400之间。

2.6 Keras实现TBPTT

Keras深度学习lib库提供递归神经网络的训练TBPTT的实现。实现比上面列出的一般版本更受限制。特别地, k1k2的值是相等的,并且是固定的。

  • TBPTT(K1,K2),其中 k1=k2=k

这是通过训练像LSTM这样的递归神经网络所需的三维输入来实现的。LSTM期望输入数据具有维度:样本、时间步长和特征。这是输入格式的第二个维度,即时间步长,它减少了用于序列预测问题的向前和向后传递的时间步长的数量。

因此,在为Keras编写序列预测问题的输入数据时,必须谨慎地选择时间步数。时间步长的选择将在两个方面:

  • 在前向传播的过程中积累的内部状态。

  • 用于更新后向传播上权重的梯度估计。

注意,默认情况下,网络的内部状态在每个批次之后被重置,但是通过使用所谓的状态LSTM并手动调用重置操作,可以实现对内部状态重置时的更明确的控制。以后再谈这个问题。

该算法的Keras实现本质上是未截断的,要求在训练模型之前直接对输入序列执行任何截断。我们可以认为这是手动截断的BPTT。Sutskever称这是一个朴素的方法。

一种朴素的方法,将1000个长序列分成50个序列(例如)每个长度20,并将长度20的每个序列作为单独的训练案例处理。这是一种明智的方法,在实践中可以很好地工作,但是它对跨越20个以上的时间步长的时间依赖性是盲目的。

— Training Recurrent Neural Networks, 2013

这意味着作为你的问题框架的一部分,你必须把长的序列分成足够长的子序列来捕获相关的上下文来进行预测,但是足够短,以便很好地训练网络。

2.7 扩展阅读

下面的章节提供了进一步阅读的一些资源。

2.7.1 书籍

  • Neural Smithing, 1999.

  • Deep Learning, 2016.

  • Supervised Sequence Labelling with Recurrent Neural Networks, 2008.

2.7.2 研究论文

  • Online Sequence Training of Recurrent Neural Networks with Connectionist Temporal Classification, 2015.

  • Framewise phoneme classification with bidirectional LSTM and other neural network architectures, 2005.

  • Deep learning, Nature, 2015.

  • Training Recurrent Neural Networks, 2013.

  • Learning Representations By Backpropagating Errors, 1986.

  • Backpropagation Through Time: What It Does And How To Do It, 1990.

  • An Ecient Gradient-Based Algorithm for On-Line Training of Recurrent Network Trajectories, 1990.

  • Gradient-Based Learning Algorithms for Recurrent Networks and Their Computational Complexity, 1995.

2.8 扩展

你想更深入地了解BPTT吗?本章节列出了本课程中的一些具有挑战性的扩展。

  • 为新的学习者写一段关于BPTT的算法总结;

  • 研究和描述使用上述符号在最近或显著的LSTM研究论文中使用的BPTT参数

  • 设计一个实验来调整BPTT的参与以用于序列预测问题;

  • 研究和实现电子表格或者Python中单个存储单元的BPTT算法。

在网上发布你的扩展并与我分享链接。我很想知道你是怎么样想的!

2.9 总结

本课中,您发现了通过时间算法来训练LSTM序列预测问题的反向传播算法。特别地,您学到了:

  • 什么是基于时间的反向传播算法以及它和感知机网络中反向传播训练算法是有着怎么样的联系;

  • 导致需要截断基于时间的反向传播算法的动机,在深度学习中训练LSTMs模型最广泛使用的变体;

  • 关于怎么样配置TBPTT的创新性思考,以及研究和机器学习库中用到的典型的配置。

下周星期一,我们将会为您介绍,如何发现准备用于LSTM的序列数据?

AMiner学术头条
AMiner学术头条

AMiner平台由清华大学计算机系研发,拥有我国完全自主知识产权。系统2006年上线,吸引了全球220个国家/地区800多万独立IP访问,数据下载量230万次,年度访问量1000万,成为学术搜索和社会网络挖掘研究的重要数据和实验平台。

https://www.aminer.cn/
专栏二维码
工程反向传播算法LSTM深度学习RNN
3
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

感知技术

知觉或感知是外界刺激作用于感官时,脑对外界的整体的看法和理解,为我们对外界的感官信息进行组织和解释。在认知科学中,也可看作一组程序,包括获取信息、理解信息、筛选信息、组织信息。与感觉不同,知觉反映的是由对象的各样属性及关系构成的整体。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

损失函数技术

在数学优化,统计学,计量经济学,决策理论,机器学习和计算神经科学等领域,损失函数或成本函数是将一或多个变量的一个事件或值映射为可以直观地表示某种与之相关“成本”的实数的函数。

时间递归神经网络技术

时间递归神经网络 (aka.循环神经网络, RNN) 是一类擅长处理序列数据的神经网络,其单元连接形成一个有向环。一般人工神经网络(ANN)由多层神经元组成,典型的连接方式是在前馈神经网络中,仅存在层与层之间的互相连接,而同层神经元之间没有连接。RNN在此基础上结合了隐藏层的循环连接,从而能从序列或时序数据中学习特征和长期依赖关系。RNN隐藏层的每一单独计算单元对应了数据中某个时间节点的状态,它可以是简单神经元、神经元层或各式的门控系统。 每一单元通过参数共享的层间顺序连接,并随着数据序列传播。这一特性使得RNN中每一单元的状态都取决于它的过去状态,从而具有类似“记忆”的功能,可以储存并处理长时期的数据信号。 大多数RNN能处理可变长度的序列,理论上也可以建模任何动态系统。

导数技术

导数(Derivative)是微积分中的重要基础概念。当函数y=f(x)的自变量x在一点x_0上产生一个增量Δx时,函数输出值的增量Δy与自变量增量Δx的比值在Δx趋于0时的极限a如果存在,a即为在x0处的导数,记作f'(x_0) 或 df(x_0)/dx。

神经网络技术

(人工)神经网络是一种起源于 20 世纪 50 年代的监督式机器学习模型,那时候研究者构想了「感知器(perceptron)」的想法。这一领域的研究者通常被称为「联结主义者(Connectionist)」,因为这种模型模拟了人脑的功能。神经网络模型通常是通过反向传播算法应用梯度下降训练的。目前神经网络有两大主要类型,它们都是前馈神经网络:卷积神经网络(CNN)和循环神经网络(RNN),其中 RNN 又包含长短期记忆(LSTM)、门控循环单元(GRU)等等。深度学习是一种主要应用于神经网络帮助其取得更好结果的技术。尽管神经网络主要用于监督学习,但也有一些为无监督学习设计的变体,比如自动编码器和生成对抗网络(GAN)。

反向传播算法技术

反向传播(英语:Backpropagation,缩写为BP)是“误差反向传播”的简称,是一种与最优化方法(如梯度下降法)结合使用的,用来训练人工神经网络的常见方法。该方法计算对网络中所有权重计算损失函数的梯度。这个梯度会反馈给最优化方法,用来更新权值以最小化损失函数。 在神经网络上执行梯度下降法的主要算法。该算法会先按前向传播方式计算(并缓存)每个节点的输出值,然后再按反向传播遍历图的方式计算损失函数值相对于每个参数的偏导数。

监督学习技术

监督式学习(Supervised learning),是机器学习中的一个方法,可以由标记好的训练集中学到或建立一个模式(函数 / learning model),并依此模式推测新的实例。训练集是由一系列的训练范例组成,每个训练范例则由输入对象(通常是向量)和预期输出所组成。函数的输出可以是一个连续的值(称为回归分析),或是预测一个分类标签(称作分类)。

神经元技术

(人工)神经元是一个类比于生物神经元的数学计算模型,是神经网络的基本组成单元。 对于生物神经网络,每个神经元与其他神经元相连,当它“兴奋”时会向相连的神经元发送化学物质,从而改变这些神经元的电位;神经元的“兴奋”由其电位决定,当它的电位超过一个“阈值”(threshold)便会被激活,亦即“兴奋”。 目前最常见的神经元模型是基于1943年 Warren McCulloch 和 Walter Pitts提出的“M-P 神经元模型”。 在这个模型中,神经元通过带权重的连接接处理来自n个其他神经元的输入信号,其总输入值将与神经元的阈值进行比较,最后通过“激活函数”(activation function)产生神经元的输出。

语言识别技术

在自然语言处理中,语言识别或语言猜测是确定给定内容所使用的自然语言的问题。针对该问题的计算方法被视为文本分类的特例,并用各种统计方法解决。

自然语言处理技术

自然语言处理(英语:natural language processing,缩写作 NLP)是人工智能和语言学领域的分支学科。此领域探讨如何处理及运用自然语言;自然语言认知则是指让电脑“懂”人类的语言。自然语言生成系统把计算机数据转化为自然语言。自然语言理解系统把自然语言转化为计算机程序更易于处理的形式。

在线学习技术

在计算机科学中,在线学习是一种机器学习方法。和立即对整个训练数据集进行学习的批处理学习技术相反,在线学习的数据按顺序可用,并在每个步骤使用未来数据更新最佳预测器。

批次技术

模型训练的一次迭代(即一次梯度更新)中使用的样本集。

推荐文章
暂无评论
暂无评论~