RNN与LSTM

推荐资料

  1. wiki:Long short-term memory
  2. 简书:[译] 理解 LSTM 网络
  3. Essentials of Deep Learning : Introduction to Long Short Term Memory
  4. deeplearning4j: A Beginner’s Guide to Recurrent Networks and LSTMs
  5. paper:Learning to Forget: Continual Prediction with LSTM

个人的一些理解

LSTM结构一

我们先从下面这张图开始:

这里写图片描述

[图片来自:http://colah.github.io/posts/2015-08-Understanding-LSTMs/]

理解上图,可以先看推荐资料2( 简书:[译] 理解 LSTM 网络),但是我在看完推荐资料2之后,还是有一些疑惑:
1. 网络的输出是什么?是 ht 吗?看起来是,但是了解马尔科夫链的都知道, h 表示的是隐状态,隐状态是不输出的,输出状态通常表示为 yt 。而且图中横向有两个流,其中一个应该是隐状态(或者记忆单元),另一个是输出。
2. 激活函数的输出是一个一维的标量还是一个维度不变的向量?(激活函数包括 σ tanh
3. LSTM,是一个层的结构?还是网络单个节点的结构?我们在MLP的示意图中往往用一个节点表示一维的数据,数据是N维的就有N个节点,那么这里的LSTM是一个层的结构还是针对一个节点的?

这里就针对以上问题一一解答:
1. 网络的输出是 ht ,图画的没有问题,但是这里变量命名很有迷惑性,也就是,图中横向有两个流,上面一个是隐状态(记忆单元)的流,下面一个是网络输出的流。
2. 我们先解答第三个问题,LSTM是一个层的结构,也就是, xt 是一个向量,同时里面的每一个操作都是对向量进行操作的,而且通常情况下,里面的向量的维数是相同的(也有不同的情况)。这个时候就有另外一个问题了,就是图中的乘法是怎么做的?两个维度相同的向量怎么做乘法?这里使用的是Hadamard product,也就是矩阵中对应元素相乘。
3. 这里解答第二个问题,激活函数的输出和输出的维数是相同的,通常和xt,ht的维数是相同的(如果前面xt和ht的矩阵变换没有改变他们的维数的话)。

LSTM结构二

还有一张图也很经典:
这里写图片描述
[图片来自paper:Learning to Forget: Continual Prediction with LSTM]
推荐先看推荐资料4(deeplearning4j: A Beginner’s Guide to Recurrent Networks and LSTMs)
这幅图很容易分清楚网络的输入和输出,但是,具体的运算就不是很清楚了(paper中解释的很清楚,但是公式太多了),我在看到这张图时候,有以下几个问题:
1. 四个net都表示什么?
2. 为什么不见网络的输入 xt
3. gate处的激活函数和信息流中的激活函数有什么区别(一个是圆形的,一个是方形的)?
4. 图中的黑点代表什么运算?

解答:
1. 四个net表示什么呢?论文中说是

netin(t)=mωinmym(t1)

Index m ranges over all source units as specified by the network topology

琢磨半天表示没懂。最后看了 wiki:Long short-term memory里面的公式,觉得应该是
net=W1xt+W2yt+b

对于三个 net 是一样的。
2. 为什么不见网络的输入 xt ?上一个解答基本上解释了这个问题,因为 xt 是包含在net里面的。
3. 通常 σ 表示sigmoid函数, tanh 表示双曲正切函数。
4. 图中的黑点表示 Hadamard product,也就是矩阵中对应元素分别相乘。

猜你喜欢

转载自blog.csdn.net/smallflyingpig/article/details/78835698