循环神经网络是如何工作的
扫描二维码
随时随地手机看文章
基于图展开和参数共享的思想,我们可以设计各种循环神经网络。
计算循环网络(将 x值的输入序列映射到输出值 o 的对应序列) 训练损失的计算图。损失L 衡量每个 o与相应的训练目标 v 的距离。当使用 softmax 输出时,我们假设 o 是未归一化的对数概率。损失 L 内部计算,并将其与目标 y 比较。RNN输入到隐藏的连接由权重矩阵 U参数化,隐藏到隐藏的循环连接由权重矩阵 W参数化以及隐藏到输出的连接由权矩阵 V 参数化。(左) 使用循环连接绘制的RNN和它的损失。(右) 同一网络被视为展开的计算图,其中每个节点现在与一个特定的时间实例相关联。
循环神经网络中一些重要的设计模式包括以下几种:
1. 每个时间步都有输出,并且隐藏单元之间有循环连接的循环网络,如上图所示。
2. 每个时间步都产生一个输出,只有当前时刻的输出到下个时刻的隐藏单元之间
有循环连接的循环网络。
3. 隐藏单元之间存在循环连接,但读取整个序列后产生单个输出的循环网络。
任何图灵可计算的函数都可以通过这样一个有限维的循环网络计算,在这个意义上上图的循环神经网络是万能的。RNN经过若干时间步后读取输出,这与由图灵机所用的时间步是渐近线性的,与输入长度也是渐近线性的 (Siegelmann and Sontag, 1991; Siegelmann, 1995; Siegelmann and Sontag, 1995;Hyotyniemi, 1996)。由图灵机计算的函数是离散的,所以这些结果都是函数的具体实现,而不是近似。RNN作为图灵机使用时,需要一个二进制序列作为输入,其输出必须离散化后提供二进制输出。利用单个有限大小的特定RNN计算在此设置下的所有函数是可能的(Siegelmann and Sontag (1995) 用了 886 个单元)。图灵机的 ‘‘输入’’ 是要计算函数的详细说明 (specification),所以模拟此图灵机的相同网络足以应付所有问题。用于证明的理论RNN可以通过激活和权重(由无限精度的有理数表示)来模拟无限堆栈。
现在我们研究上图中RNN的前向传播公式。这个图没有指定隐藏单元的激活函数。我们假设使用双曲正切激活函数。此外,图中没有明确指定何种形式的输出和损失函数。我们假定输出是离散的,如用于预测词或字符的RNN。一种代表离散变量的自然方式是把输出 o作为每个离散变量可能值的非标准化对数概率。然后,我们可以应用softmax 函数后续处理后,获得标准化后概率的输出向量 。RNN从特定的初始状态 h(0) 开始前向传播。从 t = 1 到 t = τ 的每个时间步,我们应用以下更新方程:
其中的参数的偏置向量 b和 c 连同权重矩阵 U、V 和 W,分别对应于输入到隐藏、隐藏到输出和隐藏到隐藏的连接。这个循环网络将一个输入序列映射到相同长度的输出序列。与 x序列配对的 y 的总损失就是所有时间步的损失之和。例如,L(t) 为给定的的负对数似然,则
其中, 需要读取模型输出向量的项。
关于各个参数计算这个损失函数的梯度是昂贵的操作。梯度计算涉及执行一次前向传播(如在上图展开图中从左到右的传播),接着是由右到左的反向传播。运行时间是 O(τ ),并且不能通过并行化来降低,因为前向传播图是固有循序的; 每个时间步只能一前一后地计算。前向传播中的各个状态必须保存,直到它们反向传播中被再次使用,因此内存代价也是 O(τ )。应用于展开图且代价为 O(τ ) 的反向传播算法称为通过时间反向传播 (back-propagaTIon through TIme, BPTT)。
此类RNN的唯一循环是从输出到隐藏层的反馈连接。在每个时间步 t,输入为,隐藏层激活为。(左) 回路原理图。(右) 展开的计算图。这样的RNN没有前面介绍的 RNN 那样强大(只能表示更小的函数集合)。上图中的RNN可以选择将其想要的关于过去的任何信息放入隐藏表示 ? 中并且将 ? 传播到未来。该图中RNN被训练为将特定输出值放入 o中,并且 o是允许传播到未来的唯一信息。此处没有从 h 前向传播的直接连接。之前的 h仅通过产生的预测间接地连接到当前。o通常缺乏过去的重要息,除非它非常高维且内容丰富。这使得该图中的RNN不那么强大,但是它更容易训练,因为每个时间步可以与其他时间步分离训练,允许训练期间更多的并行化。
关于时间展开的循环神经网络,在序列结束时具有单个输出。这样的网络可以用于概括序列并产生用于进一步处理的固定大小的表示。在结束处可能存在目标(如此处所示),或者通过更下游模块的反向传播来获得输出上的梯度。