循环神经网络

  • 2020 年 12 月 16 日
  • AI

循环神经网络RNN常用于处理序列数据, 但缺点是不适合长序列, 易梯度消失

  • 因为MLP和CNN都是单独处理每个输入数据的, 无法捕捉输入与输入之间的关系, 尤其是输入之间具有时间关系的数据. 若用MLP或CNN 处于序列数据, 需要将序列视为整体.
  • 循环神经网络的归纳偏置在与捕捉时序过程中的长期依赖性.

h^t = f(h^{t-1}, x^t; \theta )

y^t = g(h^t; \theta) # 这个是对根据当前状态做出预测, 不是必须的

LSTM 被提出来处理梯度消失问题. 尤其适合长序列, 但缺点是计算量大

类似于RNN, LSTM 经过四个非线性函数, 其中作为原始输入的映射和 三个门, 输出多来一个细胞状态:

z = tanth(h^{t-1}, x^t; \theta ) # 映射到[-1, 1]

z^i = \sigma(h^{t-1}, x^t; \theta_i )  # 选择记忆

z^f = \sigma(h^{t-1}, x^t; \theta_f )  #遗忘门

z^o = \sigma(h^{t-1}, x^t; \theta_o)  # 输出门

c^t = z^f * c^{t-1} + z^i * z # 通过选择和遗忘门更新细胞状态, 细胞状态类似与传送带, 保存长期的信息.

h^t = z^o * tanth(c^t) # 更新当前状态. 作为短期记忆.

GRU 被提出来简化LSTM的计算, 显然 GRU 丢去了LSTM中的一个门, 显然参数少了 自然计算就快了, 训练集大的时候, 性能自然也不如LSTM.

r = \sigma(h^{t-1}, x^t; \theta_r )  # 重置门

z= \sigma(h^{t-1}, x^t; \theta_z )  # 更新门

h^{t'}= tanth(h^{t-1}* r, x^t; \theta)  # 重置状态

h^t = (1-z) * h^{t-1} + h^{t'} * z # 更新状态

# LSTM 和 GRU 都属于门控RNN, 其思路是基于生成通过时间的路径, 其导数既不消失, 也不爆炸. 即 我们希望RNN在当前时刻能记住很久以前的有用的事情, 但也希望他忘掉一些没用的事情. 然后把提取的信息/状态/细胞 保留到下一个时刻.

# LSTM 中的门控机制和CV中的soft attention 机制是等价的, 不过背景起源不同. Transformer 也有类似的架构:

重要结论

  • 虽然假设空间覆盖面很广, 但是由于深度学习模型非常复杂, 如果学习算法没有限制去学习简单模型, 那么他很可能找不到简单解
  • 深度学习是工程, 而且每个问题都具有特殊的性质, 没有哪个理论能提前告诉你这个方法一定能最优的解决问题, 你必须不停迭代, 深入研究问题和数据性质, 改进方法.
  • 一维卷积 有时候要比RNN 处理数据更方便, 这取决于你研究的问题.

启发:

  • 网络设计 要考虑学习参数的梯度和数据之间的融合.网络的结构最好也让优化算法决定. 易于优化的网络 和 符合数据task的归纳偏置网络 才是 正确的设计方式.
  • 因为运算的实际效果是由权重决定的, 而权重是以端到端的方式学习的, 不可能有特定目的. 所以把网络设计过程理解使网络更容易优化比较合适. 运算的具体意义, 取决于你的数据, 以及训练后模型 运算在数据上的计算结果.
  • 模式识别, or 模式学习, 即要让模型在具有这中模式的数据上优化. 不同模式的融合, 也可以提升模型的能力. 所以要做数据增强和多模态数据融合 模式也可以理解为数据分布. 使网络能学习到符合task的数据模式.

参考文献:

花书, keras深度学习

题外话:

词嵌入 指 用向量表示单词, 一般的说, 用向量表示对象. .

循环神经网络对数据的顺序有一定的归纳偏置作用. 图神经网络被提出来解决数据顺序问题, 即提取数据组合/排列 无关的模式.

因为不同的神经网络设计出来都是为了捕捉满足task 数据的的特定模式的, 所以介绍几种常见的 特殊的task.和数据模式

  1. 双向RNN. 不同于RNN 捕捉当前时间和过去数据数据之间的关系, 双向RNN 可以捕捉未来对当前时刻的关系.
  2. Seq2Seq. 不同于RNN讲序列映射到向量, Seq2Seq可以蒋序列映射到序列. 即编码-解码架构. Transformer 首先在S2S任务上提出来, 主要优势是可以并行训练.
  3. 门控RNN. 不同于RNN 只适合短序列数据, 门控RNN(LSTM, GRU) 更适合长序列数据. 但不能并行训练.
  4. 递归神经网络. 占坑
  5. 回声状态网络. 不是很明白, 有点像网络架构搜索, 先占坑.
  6. GNN. 不同于RNN 要求数据具有特征排列组合模式. GNN 可以学习数据之间任意的排列组合 非常适合关系的学习任务.
  7. 1D卷积网络. 不同于RNN可以捕捉序列任意时刻之间关系. 一维卷积可以捕捉局部时间段节点之间关系, 好处是计算量小.