阅读本文之前,大家可以稍微看一下这篇文章,有助于理解:浅谈RNN,LSTM和GRU
目录
循环神经网络 (RNN)
• RNN 允许表示任意大小的输入
• 核心思想:通过应用递推公式一次处理一个输入序列
• 使用状态向量来表示先前已处理过的上下文
Si:新的状态
Si-1:前一个状态
xi:当前输入
f:带参数的函数
RNN 展开
所有时间步长共享相同的参数
RNN 训练
• 展开的 RNN 只是一个非常深的深度神经网络
• 但在多个时间步长中共享相同的参数
• 要训练 RNN,我们只需要在给定输入序列的情况下创建展开的计算图
• 并像往常一样使用反向传播算法计算梯度
• 此过程称为时间反向传播
语言模型……解决了吗?
• RNN 能够模拟无限上下文
• 但它实际上能否在实践中捕获长期依赖关系?
• 没有……因为“梯度消失”
• 在反向传播过程中,后面步骤中的梯度会迅速减小
• 较早的输入没有得到太多更新
长短期记忆 (LSTM)
• 引入 LSTM 来解决梯度消失问题
• 核心理念:拥有“记忆单元”,可以随时间保持梯度
• 对存储单元的访问由“门”控制
• 对于每个输入,门决定:
‣ 新输入应写入内存单元的量
‣ 以及当前记忆单元的多少内容应该被遗忘
• 门 g 是一个向量
‣ 每个元素的值在 0 到 1 之间
• g 与向量 v 逐分量相乘,以确定要为 v 保留多少信息
• 使用 sigmoid 函数使 g 的值接近 0 或 1
LSTM vs. Simple RNN
基本RNN,就是一个tanh函数
LSTM,里面引入门控机制和cell状态
接下来挨个门分析
LSTM:遗忘门
• 控制在存储单元 (Ct-1) 中“忘记”多少信息
• The cats that the boy likes
• 记忆细胞储存代词信息(cats)
• 单元格现在应该忘记cats 并存储boy 以正确预测单数动词likes
LSTM:输入门
• 输入门控制将多少新信息放入内存单元
• = 要添加的新提炼信息
‣ 例如 关于上面的boy的信息
LSTM:更新记忆单元
• 使用前面两部分的遗忘门和输入门更新记忆单元
LSTM:输出门
• 输出门控制提取存储单元的内容以创建下一个状态 (ht) 的程度
LSTM:总结
把之前涉及到的公式也综合起来,如下:
变体
• PeepHole窥孔连接
‣ 允许门查看细胞状态
• 门控循环单元 (GRU)
‣ 仅有 2 个门的简化变体
多层 LSTM
双向 LSTM
应用
莎士比亚生成器
• 训练数据 = 莎士比亚的所有作品
• 模型:3 层字符 RNN,隐藏维度 = 512
文本分类
• 循环网络可用于各种 NLP 任务
• 特别适用于单词顺序很重要的任务,例如 情感分类
序列标记
• RNN 特别适用于序列标记问题,例如 词性标注
总结
• 优点
‣ 能够捕获远程上下文
‣ 优秀的泛化能力
‣ 就像前馈网络一样:灵活,可以用于各种任务
‣ 多个 NLP 任务中的通用组件
• 缺点
‣ 由于顺序处理,比前馈网络慢
‣ 在实践中仍然不能很好地捕获长距离依赖(生成长文本时很明显)
OK,辛苦大家观看,今天关于RNN循环神经的网络就讲到这里,有问题欢迎随时评论交流,本章RNN部分可能描述不是很多,如有需要,可以看我之前的一篇文章:浅谈RNN,LSTM和GRU