即使不是 NLPer,现实中依然会面对很多序列问题。
全文内容来自 Ian Goodfellow, Yoshua Bengio 和 Aaron Courville 3位大老爷的作品“Deep Learning”的其中1章“Sequence Modeling: Recurrent and Recursive Nets” 。
1986年 Rumelhart 等人提出循环神经网络。循环网络与多层网络相比,会共享每层的权重,从而能够扩展和应用网络于不同长度的序列案例,以及泛化这些案例。当1片特定的信息可以在序列中多处出现时,这样的共享尤为重要。比如,有两句话:“I went to Nepal in 2009”和“In 2009, I went to Nepal.”如果要求模型提取叙述者哪一年去的 Nepal,不管是输入句子的第2处还是第6处,2009 都是应识别的信息片。传统全连接前向网络对每处输入的特征都有单独的参数,所以要单独学习输入句子每一处的所有语法。相比之下,循环网络在不同时间步间共享权重。
现在很多“神经网络”的字眼已被“网络”替换。且后面不会涉及神经元的内容,所以一概用“网络”。
相关的想法是1维时间序列间用卷积。卷积方法是延时神经网络的基础 (1988~1990)。卷积操作允许网络在时间轴上共享参数,但为浅层网络 (输出序列的每个节点输出为很多相邻节点输入的函数)。每个时间步上用相同的卷积核。
循环网络以不同的方式共享参数。节点输出为前面节点输出的函数,节点的输出由前面节点输出用相同的更新规则产生。通过很深的计算图来共享权重,从而形成循环。
为简化描述,RNN 看作对1个包含时间步索引
循环代表某变量的过去值对未来值的影响。用循环的计算图定义循环网络。
计算图是形成一系列计算结构 (如涉及映射输入和参数到输出和损失) 的1种方式。把1个循环/递归计算展开为1个有重复结构 (对应1连串事件) 的图,从而实现深度网络结构间的参数共享。
例如,考虑动态系统的经典形式:
来源: http://lib.csdn.net/article/deeplearning/45379