TensorFlow实现经典深度学习网络(6):TensorFlow实现基于LSTM的语言模型
循环神经网络(Recurrent Neural Networks,RNNs)出现于20世纪80年代,由于神经网络结构的进步和GPU上深度学习训练效率的突破,PNNs已经在众多自然语言处理(Natural Language Processing, NLP)中取得了巨大成功以及广泛应用。RNNs对时间序列数据非常有效,其每个神经元可通过内部组件保存之前输入的信息。RNNs已经被在实践中证明对NLP是非常成功的,如词向量表达、语句合法性检查、词性标注等。在RNNs中,目前使用最广泛最成功的模型便是LSTMs模型,该模型通常比Vanilla RNNs能够更好地对长短时依赖进行表达,该模型相对于一般的RNNs,只是在隐藏层做了手脚。对于LSTMs,后面会进行详细地介绍。下面对RNNs在NLP中的应用进行简单的介绍。
深度语言模型简介:
递归神经网络RNN
• 有2类
• 时间递归神经网络(Recurrent Neural Network)
• 针对时间序列
• 结构递归神经网络(Recursive Neural Network)
• 针对树状结构
• 优化方法
• 时序后向传播(Back propagation through time)
• 长时记忆/递归深度问题
• 梯度爆炸(Gradient exploding) ——梯度剪切
• 梯度消失(Gradient vanishing) ——特殊设计
递归网络类似于数据结构中的树形结构,且其每层之间会有共享参数。而最为常用的循环神经网络,它的每层的结构相同,且每层之间参数完全共享。RNN的缩略图和展开图如下:
时序后向传播(BPTT)
• 传统后向传播(BP)在时间序列上的扩展
• t时刻的梯度是前t-1时刻所有梯度的累积
• 时间越长,梯度消失越严重
朴素Vanilla-RNN存在的问题
• 单层神经网络在时间上的扩展
• t-1时刻的隐层状态(Hidden state)会参与t时刻输出的计算
• 严重的梯度消失问题
本文主要使用的为LSTM长短时记忆模型( Long Short-Term Memory )
• Hochreiter & Schmidhuber 于1997提出
• 有效捕捉长时记忆(Long dependency)
• 包含4个神经元组
• 1个记忆神经元(Memory cell)
• 3个控制门神经元