RNN的输入和输出代表什么意思

如下是堆叠多层rnn在时间维度上的一个截面

e1189b2e5bcaa81f840670e263ed01c1.png

将上图中的每一个方块铺开,得到如下的多层RNN,总共有三层(输入,隐藏层,输出), 如下的时间窗口为4,这4个网络的参数是共享的。单独来看每个时刻的切面,就是一个MLP的增强版:原始的MLP的基础上,上一个时刻的hidden cell的值,需要传给本次time_step对应MLP的hidden cell作为输入。

9fa736d2e6a9cfb4d2097bf3a4375e5d.png
图1

上面讲了rnn的运行机制,至于更复杂的rnn比如LSTM、RGU,那就是在MLP的每个hidden cell(黄色circle)与下一个time_step 的hidden cell的传值机制的more sophisticated tactics。

几个容易混淆的概念

  1. lstm cell 和 mlp cell 完全不同的两个概念。lstm cell 是图2的A. 不同时刻的A的参数是共享的。图2中A的4个黄色框就代表4个MLP, 1个黄色框是包含多个mlp cell的。

3c46f3636164777199aa321e4aac592b.png
图2

15a25afaf28f8ed427c43b3c83e0342a.png
使用tensor表示时间序列数据

使用keras实现lstm的参数详解

首先看keras实现lstm的一段代码

from 

使用kera的lstm函数时,三个参数hidden_feature,timestamp,feature_size的含义分别为:

  • hidden_feature:图1中每一个切片中黄色节点的个数。图2的A中每个黄色框中(就是一个两层的MLP)隐层节点个数。
  • timestamp :时间长度,图1中切面的个数,图2中A的个数。
  • input_feature: 表示X的维度, 图1中切片中绿色圈的个数,图2中xt的维度。

那上面代码构建的lstm有多少个参数呢?

((input_feature + hidden_featrue) * hidden_featrue + hidden_featrue ) * 4

解释一下

(t时刻输入X的维度+ t-1时刻的hidden layer输出的维度 ) * t时刻的隐层的节点个数 + t时刻数据层的节点个数 ) * MLP个数

((10 + 5 ) * 5 + 5 ) * 4

RNN的常用结果举例

  • 1对1:时间步长为1,退化为MLP, 比如图像分类。
  • 1对多:图片取标题。
  • 多对1:情感分析/时序分类/时序异常检测。
  • 多对多1:机器翻译/多步骤时序预测。
  • 多对多2:视频分类,实时的对每一帧画面标记。

注意rnn模型对输入序列的长度没有限制,只要是单步时间窗的整数倍就行了,因为隐藏层是可以使用任意多次(下图中的绿色方块,对应的是上图中的黄色方块)。如下是在时间轴上的切片,每个格子代表的是多个cell。

46e3d8ee927046d43586cb3e23d612ec.png

参考资料

  1. https://www.zhihu.com/question/41949741?sort=created
  2. https://blog.csdn.net/jiangpeng59/article/details/77646186

4. https://blog.csdn.net/wyl1987527/article/details/56682347

Standford CS231n 循环神经网络 简要笔记

5. https://blog.csdn.net/wyl1987527/article/details/56682347

Keras关于LSTM的units参数,还是不理解?

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐