• 递归神经网络(RNN,Recurrent Neural Networks)和反向传播的指南 A guide to recurrent neural networks and backpropagation(转载)


    摘要

    这篇文章提供了一个关于递归神经网络中某些概念的指南。与前馈网络不同,RNN可能非常敏感,并且适合于过去的输入(be adapted to past inputs)。反向传播学习(backpropagation learning)是为了前馈网络而描述,并进行调整来满足我们的建模需要,并且推广到递归网络。这篇简要的文章的目的是搭建一个应用和理解递归神经元网络的图景(scene)。

    1.简介

    广为人知的是,给定了一个隐藏节点的集合(可能非常大),传统的前馈网络可以用来近似任何空间受限的有限函数。这就是说,对于拥有确定输入空间的函数,我们总有方法利用神经元网络对这些函数进行编码。对于一个两层的网络,这个映射包含两步。

    如果拥有足够的采样点,我们能够利用反向传播等自动学习的技术来寻找网络的权重(G和F)。

    回顾神经元网络不仅在输入空间上进行操作,而且在内部状态空间进行操作(一条已经被网络处理过的轨迹(a trace of what already been processed by the network,往下看就理解什么意思)),从这个意义上,回归神经元网络与前馈网络结构有本质的不同。这等价于一个迭代函数系统(IFS; see (Barnsley, 1993) for a general introduction to IFSs;
    (Kolen, 1994) for a neural network perspective)或者一个动力学系统(DS; see e.g. (Devaney, 1989) for a general introduction to dynamical systems; (Tino et al., 1998; Casey, 1996) for neural network perspectives)。状态空间让对于在未指定的(可能是无限的)时间间隔上的暂时的/循序的扩展相关性的表示(和学习)成为可能,依据

    为了限制这篇文章的讨论范围,简化数学推导,我们假设网络按照离散的时间运行(完全有可能采用连续的时间)。可以证明,如果我们进一步假设权重都是有理的而且采用连续的输出函数,网络能够表示任何的图灵机(再一次假设任何隐藏节点的个数都是可取的)。很重要的一点是,我们马上就会看到所有这些都可以被一个离散时间的RNN计算和处理。甚至有证据显示,如果采用实权重系数(即这个网络是完全模拟的),我们可以得到超过图灵机的处理能力。

    2.一些基本定义

    为了简化记法我们我们会限制网络仅包含两层(一个“隐藏层”或“状态层”,一个输出层,不包括输入层)。每一层都有自己的下标变量:输出层k,隐藏层j(和h),输入层i。在一个前馈网络中,输入向量x是通过一个权重层V进行传播的,

    其中n是输入的个数,theta_j是偏置,f是输出函数(任意可微的函数类型)。一个网络如图1所示。

    在一个简单的递归网络中,输入向量也是相似地通过一个权重层传播,但是同时通过一个加性的递归矩阵U结合了先前的激活状态

    其中m是“状态节点”的数量。

    网络的输出是由状态和一系列输出权重W决定的


    其中g是输出函数(很可能与f相同)。

    3.反向传播的原则

    当期望的输出模式存在而且每个用来计算实际输出模式的函数都是可微的,任何网络结构都可以利用反向传播进行训练。正如传统的梯度下降(或上升)算法,对于每一个可编辑的权重系数,反向传播计算与其相关的代价(或者误差)的梯度然后做出相应的调整。

    最常用的代价函数是误差平方和。每个模式(pattern)或者表示(presentation)(来自训练集)p都对代价函数做出贡献,对于所有的输出节点k:

    其中d是期望的输出,n是训练集中元素的总个数,m是所有输出节点的个数。

    根据梯度下降算法,每个权重的变化正比于其梯度

    其中eta是学习率。

    最好的理解权重改变的方式是,区分误差分量,和。这样,输出节点的误差就是

    对于隐藏节点

    对于一阶的多项式,等于输入的激活状态。权重改变就简化为:
    对于输出权重

    对于输入权重

    加上时间下标,递归权重可以根据下式更新:

    一个通用的输出函数是sigmoid函数:

    sigmoid函数的微分可以写为

    由于显而易见的原因,大多数代价函数当网络的每个实际输出都等于期望输出时都取值为0。然而,还是有比误差平方和更合适的代价函数来指导权重的更新(Rumelhart et al., 1995)。对于下面列出的条目,通用的假设是,实际输出和期望输出之间的关系是概率型的(网络依旧是确定型的),而且误差的分布是已知的。这样反过来让网络的输出解释有了坚实的理论基础。(没看懂,This, in turn, puts the interpretation
    of the output activation of the network on a sound theoretical footing.)

    如果网络的输出是高斯分布的均值(由训练集决定),我们能够最小化代价函数

    其中sigma假设是确定的。这个代价函数与误差平方和非常相似。

    高斯分布下(输出不是有界的),输出节点的一个自然的选择就是


    权重改变简化为

    如果假设为二项式分布(每个输出值是一个输出为1或0的期望值,例如特征提取),一个合适的代价函数是所谓的交叉熵,


    如果输出是在0到1上的分布,sigmoid函数就很有用。再一次,输出权重的变化是

    如果处理的是“1-of-n”的分类问题,多项式分布是适用的。代价函数定义为


    其中q是所有输出节点的下标。如果选择了正确的输出函数,所谓的softmax函数,

    现在熟悉的更新规则自动出现了,

    As shown in (Rumelhart et al., 1995) this result occurs whenever we choose a probability function from the exponential family of probability distributions.(这一句不会翻译,没看懂结构)

    4.抽头延迟线式存储器

    也许最合适的将暂时的或循序的信息包含进一个训练场景(training situation)的方法就是将时间域(temporal domain)转移到空间域(spacial)并使用一种前馈的结构。过去的时间上的有效信息被插入到扩展的输入空间上,输入空间是按照一个事先确定的“窗口”来扩展的。扩展后的输入空间用X表示,X = x(t), x(t - 1), x(t - 2), ..., x(t - w)(见图3)。这经常被称作抽头延迟线式存储,因为输入是存放在延迟缓冲区并按照离散时间进行刷新。

    也可能手动地推广这一逼近(approach),通过选择特定的回溯步数并选取其均值或其他预处理过的可以反映信号衰减的特征来作为输入。

    这种逼近的一个典型例子是NETtalk system(Sejnowski and Rosenberg,1987),这个网络对样例的学习来读出文本中输入的单词。它一次接受七个字母作为输入,但每次仅读出中间的那个。

    这一方法的缺点包括:用户必须选择对于网络有用的最大的时间步长(the maximum number of time steps which is useful to the network)。而且,在处理不同步骤中的相同分量时使用独立的权重会妨碍到算法的推广(generalization,泛化?)。同时,极大的权重个数需要极大的样本集来防止过拟合(over-specialization)。

    5.简单的递归网络

    一个严格的前馈结构不包括短期记忆。任何记忆效应都是因为过去的输入在网络中的重复表示(re-presented)(对于抽头延迟线式结构)。

    一个简单的递归网络(SRN; (Elman, 1990))拥有体现了短期记忆的反馈结构。状态层更新时不仅依赖于网络的外部输入,还与之前的前向传播有关。反馈根据一系列自适应(例如反向传播)的权重决定。

    5.1.SRN中的学习:沿时间反向传播(backpropagation through time)

    在原先的Jeff Elman (Elman, 1990)的实验中使用了所谓的截断反向传播(truncated backpropagation)。主要思想就是y_j(t - 1)被简单地看作一个输入。状态层的任何误差 epsilon_j 被用来更新这个额外的输入槽(见图4)。

    误差可以反向传播更远。这被称作backpropagation through time (BPTT; (Rumelhart et al., 1986)),是我们现在已知结构的一个扩展。BPTT的基本原则是“unfolding”。所有的递归权重都可能被复制任意多步,这里设为tau。因此,每个发送(直接或间接)激活状态的节点在串环式连接中都具有tau个副本(见图5)。

    按照等式13,误差按照下式反向传播:

    其中h是接受激活状态的节点下标,j是发送节点(也就是一步之前的节点)。This allows us to calculate the error as assessed at time t, for node outputs (at the state or input layer) calculated on the basis of an arbitrary number of previous presentations(这句又不会了)。

    需要注意,在每次计算误差之后,权重会向后折叠,累加成一个大的改变值(folded back adding up to one big change for each weight)。显然当tau越大,就需要越多的存储空间(过去的误差和激活状态都要存储起来)。

    在实践中,因为“消失的梯度效应”(vanishing gradient effect),过大的tau是没有必要的。在每一层,误差在反向传播的过程中越来越小直到完全消失。还有人指出由不明确的delta导致的不稳定性可能破坏网络的收敛性。一个针对特定问题的反面例子已经由(Bod´en et al., 1999)提出。

    6.讨论

    人们已经讨论过很多网络结构的变种和学习规则(例如,所谓的Jordan网络(Jordan, 1986),完全递归网络,试试递归学习(Williams and Zipser, 1989)等等。)。尽管如此,递归网络有能力内部使用并创建反映暂时性(甚至是就诶够性)依赖的结构。对于更简单的任务(例如学习由小型有限状态机产生的语法)状态空间的组织直截了当地反映出了训练数据的结构(component parts,应该是零件,没有想好怎么翻译)(例如(Elman,
    1990; Cleeremans et al., 1989))。在大多数情况下,状态空间是实值的。这表示component parts的精细结构,例如统计回归,可能影响状态空间的组织(例如(Elman, 1993; Rohde and Plaut, 1999))。对于更困难的任务(例如需要更长记忆轨迹,而且有明显的上下文依赖性的情况),高度非线性的连续空间有很多新奇的动态(例如(Rodriguez et al., 1999; Bod´en and Wiles, 2000))。这些是很有趣的研究题目,但已经超出了这篇文章的范畴。观察学习到的内部表示和处理/动态对于我们理解网络怎样处理数据是很重要的。考察方法包括分层聚类、特征值、特征向量表征(主成分分析PCA是其中一种)等。

  • 相关阅读:
    记一次oracle新建用户及分配指定表权限的操作记录
    [转]word中不显示mathtype公式,只显示方框,双击后可以再mathtype里面看到公式
    C、C++成员变量对齐
    include头文件:C++标准库与C标准库
    [转]本专业部分国际会议及刊物影响因子排名
    使用Winbase.h
    [转]printf 字符串格式化
    1.6.2如何使用位逻辑运算(例如与、或、位移)来实现位向量?
    文章中图表自动编号
    取样问题 总数n事先不知道,等概率取样 (编程珠玑chapter12 课后题10)
  • 原文地址:https://www.cnblogs.com/jason-wyf/p/6144474.html
Copyright © 2020-2023  润新知