龙空技术网

循环神经网络

猪口朋也Owen 54

前言:

目前朋友们对“循环神经网络算法有哪几种”大致比较着重,看官们都需要知道一些“循环神经网络算法有哪几种”的相关文章。那么小编也在网摘上汇集了一些对于“循环神经网络算法有哪几种””的相关知识,希望兄弟们能喜欢,各位老铁们快快来了解一下吧!

基于图展开和参数共享的思想,我们可以设计各种循环神经网络。循环神经网络中一些重要的设计模式包括以下几种:

1.每个时间步都有输出,并且隐藏单元之间有循环连接的循环网络,如图1所示。

2. 每个时间步都产生一个输出,只有当前时刻的输出到下个时刻的隐藏单元之间有循环连接的循环网络,如图2所示。

3. 隐藏单元之间存在循环连接,但读取整个序列后产生单个输出的循环网络,如图3所示。图1是非常具有代表性的例子,我们大部分涉及这个例子。

图1

说明: 计算循环网络(将 x 值的输入序列映射到输出值 o 的对应序列) 训练损失的计算图。损失L 衡量每个 o 与相应的训练目标 y 的距离。当使用 softmax 输出时,我们假设 o 是未归一化的对数概率。损失 L 内部计算 ˆy = softmax(o),并将其与目标 y 比较。RNN输入到隐藏的连接由权重矩阵 U 参数化,隐藏到隐藏的循环连接由权重矩阵 W 参数化以及隐藏到输出的连接由权重矩阵 V 参数化。 (左) 使用循环连接绘制的 RNN 和它的损失。(右) 同一网络被视为展开的计算图,其中每个节点现在与一个特定的时间实例相关联。

图2

说明:此类 RNN 的唯一循环是从输出到隐藏层的反馈连接。在每个时间步 t,输入为 xt,隐藏层激活为 h(t),输出为 o(t),目标为 y(t),损失为 L(t)。(左) 回路原理图。(右) 展开的计算图。这样的 RNN 没有图1表示的 RNN 那样强大(只能表示更小的函数集合)。图1中的 RNN 可以选择将其想要的关于过去的任何信息放入隐藏表示 h 中并且将 h 传播到未来。该图中的 RNN 被训练为将特定输出值放入 o 中,并且 o 是允许传播到未来的唯一信息。此处没有从 h 前向传播的直接连接。之前的 h 仅通过产生的预测间接地连接到当前。o 通常缺乏过去的重要信息,除非它非常高维且内容丰富。这使得该图中的 RNN 不那么强大,但是它更容易训练,因为每个时间步可以与其他时间步分离训练,允许训练期间更多的并行化。

图3

说明:关于时间展开的循环神经网络,在序列结束时具有单个输出。这样的网络可以用于概括序列并产生用于进一步处理的固定大小的表示。在结束处可能存在目标(如此处所示),或者通过更下游模块的反向传播来获得输出 o(t)上的梯度。

任何图灵可计算的函数都可以通过这样一个有限维的循环网络计算,在这个意义上图1的循环神经网络是万能的。RNN 经过若干时间步后读取输出,这与由图灵机所用的时间步是渐近线性的,与输入长度也是渐近线性的 (Siegelmann and Sontag, 1991; Siegelmann, 1995; Siegelmann and Sontag, 1995; Hyotyniemi, 1996)。由图灵机计算的函数是离散的,所以这些结果都是函数的具体实现,而不是近似。RNN 作为图灵机使用时,需要一个二进制序列作为输入,其输出必须离散化以提供二进制输出。利用单个有限大小的特定 RNN 计算在此设置下的所有函数是可能的( Siegelmann and Sontag (1995) 用了 886 个单元)。图灵机的‘‘输入’’ 是要计算函数的详细说明 (specification),所以模拟此图灵机的相同网络足以应付所有问题。用于证明的理论 RNN 可以通过激活和权重(由无限精度的有理数表示)来模拟无限堆栈。现在我们研究图1中 RNN 的前向传播公式。这个图没有指定隐藏单元的激活函数。我们假设使用双曲正切激活函数。此外,图中没有明确指定何种形式的输出和损失函数。我们假定输出是离散的,如用于预测词或字符的 RNN。表示离散变量的常规方式是把输出 o 作为每个离散变量可能值的非标准化对数概率。然后,我们可以应用 softmax 函数 后续处理后,获得标准化后概率的输出向量 ˆy。RNN 从特定的初始状态 h(0)开始前向传播。从 t = 1 到 t = τ 的每个时间步,我们应用以下更新方程:

(8 9 10 11)

其中的参数的偏置向量 b 和 c 连同权重矩阵 U、V 和 W,分别对应于输入到隐藏、隐藏到输出和隐藏到隐藏的连接。这个循环网络将一个输入序列映射到相同长度的输出序列。与 x 序列配对的 y 的总损失就是所有时间步的损失之和。例如,L(t)为给定的 x(1), . . . , x(t)后 y(t)的负对数似然,则

(12 13 14)

其中 pmodel(y(t)| {x(1), . . . , x(t)})需要读取模型输出向量 ˆy(t)中对应于 y(t)的项。关于各个参数计算这个损失函数的梯度是计算成本很高的操作。梯度计算涉及执行一次前向传播(如在图1展开图中从左到右的传播),接着是由右到左的反向传播。运行时间是 O(τ),并且不能通过并行化来降低,因为前向传播图是固有循序的;每个时间步只能一前一后地计算。前向传播中的各个状态必须保存,直到它们反向传播中被再次使用,因此内存代价也是 O(τ)。应用于展开图且代价为 O(τ) 的反向传播算法称为 通过时间反向传播(back-propagation through time, BPTT)。因此隐藏单元之间存在循环的网络非常强大但训练代价也很大。我们是否有其他选择呢?

标签: #循环神经网络算法有哪几种