精华内容
参与话题
问答
  • 深度学习:长短期记忆模型LSTM

    万次阅读 多人点赞 2017-10-27 10:14:05
    lstm可以减少梯度消失:[RNN vs LSTM: Vanishing Gradients] ... 长短期记忆模型(long-short term memory)是一种特殊的RNN模型,是为了解决RNN模型梯度弥散的问题而提出的;在传统的RNN中,训练算法...

    http://blog.csdn.net/pipisorry/article/details/78361778

    LSTM模型

            长短期记忆模型(long-short term memory)是一种特殊的RNN模型,是为了解决RNN模型梯度弥散的问题而提出的;在传统的RNN中,训练算法使用的是BPTT,当时间比较长时,需要回传的残差会指数下降,导致网络权重更新缓慢,无法体现出RNN的长期记忆的效果,因此需要一个存储单元来存储记忆,因此LSTM模型被提出。

            Note: 需要注意的一点是,LSTM作为有记忆的网络,它的有记忆指的是在一个sequence中(而不是seq间[可参考变体statefun lstm深度学习:长短期记忆模型LSTM的变体和拓展]),记忆在不同的timesteps中传播。举个例子,就是你有一篇文章X,分解,然后把每个句子作为一个sample训练对象(sequence),X[i]就代表一句话,而一句话里的每个word各自代表一个timestep时间步,LSTM的有记忆即指的是在一句话里,X[i][0]第一个单词(时间步)的信息可以被记忆,传递到第5个单词(时间步)X[i][5]中。

    LSTM的分步解析

    (1)RNN

    (2)LSTM

    PS:

    (1)部分图形含义如下:

    (2)在于LSTM中最顶层多了一条名为“cell state”的信息传送带,其实;

    3.LSTM的核心思想:

    (1)理解LSTM的核心是细胞状态“cell state”(与RNN最大区别),也就是上述图中最顶的传送线,也就是信息记忆的地方,随着时间而变化的(当然,传送带本身是无法控制哪些信息是否被记忆,起控制作用的是下面将讲述的控制门(gate))。如下:

    (2)控制门的结构如下:主要由一个sigmoid函数跟点乘操作组成;sigmoid函数的值为0-1之间,点乘操作决定多少信息可以传送过去,当为0时,不传送,当为1时,全部传送;LSTM中有3个控制门:输入门,输出门,记忆门;

    4.LSTM工作原理:

    (1)forget gate:选择忘记过去某些信息(通过sigmoid(x,h)控制门忘记一部分cell state):

    (2)input gate:记忆现在的某些信息(现在的信息通过tanh(x,h)激活,再通过sigmoid(x,h)控制门忘记一部分):

    (3)将过去与现在的记忆进行合并:

    (4)output gate:输出

    5.

    某小皮

     

     

    LSTM模型推导

    RNN网络

    这里写图片描述

    LSTM模型的思想是将RNN中的每个隐藏单元换成了具有记忆功能的cell,即把rnn的网络中的hidden layer小圆圈换成LSTM的block,就是所谓的LSTM了。

    [深度学习:循环神经网络RNN ]

    LSTM的表示(block详解)

    lstm的block相当于rnn的隐层,不过这个隐层叫block或者cell之类的。

    输入是x,c^t-1, h^t-1, 输出是cell_output = h, state = (c^t,h^t)。注意cell_output包含所有步的h,而state中的h^t只包含最近一步的h。另外c和h的维度应该都是hidden_size(unit_size)。

    看到有多种不同等价的图表示:

     

    图1:LSTM memory cell with forget gate as described by Felix Gers et al. 

    图2:[Vinyals, et al. Show and tell: Lessons learned from the 2015 mscoco image captioning challenge.     TPAMI2017]图中蓝色表示上一个时间步
    图3:A. Graves. Supervised Sequence Labelling with Recurrent Neural Networks. Textbook, Studies in Computational Intelligence, Springer, 2012.(图中的虚线为 Peephole Connection)

    图4

    或者

    图5

    不同时间步展开

              

    图6

    同一个 hidden layer 不同的 LSTMmemory block 之间的递归关系示意图。 这个图同一层的递归调用关系,实际上是不同timestep 之间的连接。展开为 RNN 的 unfold的示意图比较好理解。

    图1解析 - 每个cell的组成如下:

    (1)输入节点(gc):与RNN中的一样,接受上一个时刻点的隐藏节点的输出以及当前的输入作为输入,然后通过一个tanh的激活函数;lz:相当于原始RNN中的隐层。

    (2)输入门(ic):起控制输入信息的作用,门的输入为上一个时刻点的隐藏节点的输出以及当前的输入,激活函数为sigmoid(原因为sigmoid的输出为0-1之间,将输入门的输出与输入节点的输出相乘可以起控制信息量的作用);control if it should read its input (input gate i).

    (3)内部状态节点(sc):输入为被输入门过滤后的当前输入以及前一时间点的内部状态节点输出,如图中公式;Cell,就是我们的小本子(有个叫做state的参数东西来记事儿的)把事记上,所以LSTM引入一个核心元素就是Cell。

    (4)忘记门(fc):起控制内部状态信息的作用,门的输入为上一个时刻点的隐藏节点的输出以及当前的输入,激活函数为sigmoid(原因为sigmoid的输出为0-1之间,将内部状态节点的输出与忘记门的输出相乘可以起控制信息量的作用);control whether to forget the current cell value (forget gate f).原始的LSTM在这个位置就是一个值1。

    (5)输出门(oc):起控制输出信息的作用,门的输入为上一个时刻点的隐藏节点的输出以及当前的输入,激活函数为sigmoid(原因为sigmoid的输出为0-1之间,将输出门的输出与内部状态节点的输出相乘可以起控制信息量的作用);control whether to output the new cell value (output gate o).

    Note: 3个控制门都是都是元素对应相乘,控制信息量。

    LSTM层的计算

    pytorch中lstm的实现[https://pytorch.org/docs/stable/generated/torch.nn.LSTM.html#torch.nn.LSTM]

    左图(图1)-矩阵表示

    Note:

    1 公式1 中的Wih应改为Wgh;圆圈⊙表示矩阵元素对应相乘;一般σ is the sigmoid operator, φ is the tanh operator. 最后一步有时写成h = φ(s) ⊙ o,即在s外面加一层tanh。

    2 实际计算中,g i f o计算的8个矩阵合并成一个提高计算效率。In practice, all eight weight matrices are concatenated into one large matrix for computational efficiency.

    LSTM​参数数量

    元素维度分析:结合公式,上一次的状态 h(t-1)和下一次的输入 x(t) 通过直接拼接结合(concat)起来,比如 x是28位的向量,h(t-1)是128位的,那么拼起来就是156位的向量。如f^t中,WX即维度[hidden_units, embed_dim]*[embed_dim, 1],得到的是[hidden_units,1]维度的结果;同样WH是[hidden_units,hidden_units]*[hidden_units,1],得到[hidden_units,1]维度的结果,b也是[hidden_units,1]维度;f^t就是[hidden_units,1]维度,这样才可以在后面和[hidden_units,1]的元素s^t-1对应相乘。

    参数个数分析:LSTM的参数个数为4*((embed_dim+hidden_units)*hidden_units+hidden_units)(不算输出线性层)。细胞状态st公式中的四个值,均是前面计算得到的结果,因此该过程没有参数需要学习。[LSTM的神经元个数]

    Note: 双向 rnn/lstm/gru参数数量再乘 2 (当 cell_fw == cell_bw 时)。

    [深度学习模型中的参数数量(备忘)]

    图4公式简写

    图1分解表示

    这里写图片描述

    带H的是一个泛指,因为LSTM的一个重要特点是其灵活性,cell之间可以互联,hidden units之间可以互联,至于连不连都看你(所以你可能在不同地方看到的LSTM公式结构都不一样)所以这个H就是泛指这些连进来的东西,可以看成是从外面连进了的三条边的一部分。

    这里写图片描述

    这里写图片描述

    连到了Cell(这里的cell不是指中间那个Cell,而是最下面那个小圆圈,中间的Cell表示的其实是那个状态值S[c][t]):输入层的输入,泛指的输入。(这体现在4.6式中) 再看看中间的那个Cell状态值都有谁连过去了:这次好像不大一样,连过去的都是经过一个小黑点汇合的,从公式也能体现出来,分别是:ForgetGate*上一时间的状态 + InputGate*Cell激活后的值。

    这里写图片描述
    可以理解为在计算OG的时候,S[c][t]已经被计算出来了,所以就不用使用上一时间的状态值了。

    这里写图片描述
    小黑点,用到了激活后的状态值和Output Gate的结果。

    [RNN以及LSTM的介绍和公式梳理 ]

    LSTM的后向传导:学习

    最初 LSTM 被提出时,其训练的方式为“Truncated BPTT”。大致的意思为,只有 Cell 的状态会 BP 多次,而其他部分的梯度会被截断,不 BP 到上一个时刻的 Memory Block。当然,这种方法现在也不使用了。

    在"Framewise phoneme classification with bidirectional LSTM and other neural network architectures, 2005"中,作者提出了 Full Gradient BPTT 来训练 LSTM,也就是标准的 BPTT。这也是如今具有自动求导功能的开源框架们使用的方法。

    LSTM代码实现

    Lstm的pytorch实现

    pytorch进入lstm函数说明有示例

    # LSTM
    rnn = nn.LSTM(10, 20, 2)  # (each_input_size, hidden_state, num_layers)
    input = torch.randn(50, 32, 10)  # (seq_len, batch, input_size)
    h0 = torch.randn(2, 32, 20)  # (num_layers * num_directions, batch, hidden_size)
    c0 = torch.randn(2, 32, 20)  # (num_layers * num_directions, batch, hidden_size)
    output, (hn, cn) = rnn(input, (h0, c0))  # seq_len x batch x hidden*bi_directional
    print(output.size(), hn.size(), cn.size())

    tf.nn.dynamic_rnn

    tf.nn.dynamic_rnn 函数是tensorflow封装的用来实现递归神经网络(RNN)的函数

    tf.nn.dynamic_rnn(
        cell,
        inputs,
        sequence_length=None,
        initial_state=None
    )

    返回值:元组(outputs, states)
    outputs:outputs很容易理解,就是每个cell会有一个输出,即h(所有步)。
    states:states表示最终的状态,也就是序列中最后一个cell输出的状态。一般情况下gru的states的形状为 [batch_size, cell.output_size],因为gru中无c^t,只有h^t;但当输入的cell为BasicLSTMCell时,state的形状为[2,batch_size, cell.output_size ],因为此时state = [c^t, h^t]。也就是说,如果cell为LSTM,那 states是个tuple,分别代表c^t 和h^t,其中h^t与outputs中对应的最后一个时刻(即最后一个cell)的输出相等;如果cell为GRU,那么同理,states其实就是h^t。

    [tf.nn.dynamic_rnn 详解]

    Lstm​直接实现示例

    [搭积木之LSTM的实现]

    [深度学习第41讲:LSTM的numpy和keras实现]

    某小皮

     

    LSTM模型的评价

    为什么 LSTM 能有效避免 Gradient Vanish?

    对于 LSTM,有如下公式

    模仿 RNN,我们对 LSTM 计算

     

    公式里其余的项不重要,这里就用省略号代替了。可以看出当f^t = 1时,就算其余项很小,梯度仍然可以很好地传导到上一个时刻,此时即使层数较深也不会发生 Gradient Vanish 的问题;当f^t = 0时,即上一时刻的信号不影响到当前时刻,则此项也会为0;f^t 在这里控制着梯度传导到上一时刻的衰减程度,与它 Forget Gate 的功能一致。

    lstm可以减少梯度消失:[https://www.zhihu.com/question/44895610][RNN vs LSTM: Vanishing Gradients]

    from: http://blog.csdn.net/pipisorry/article/details/78361778

    ref: [Zachary C. Lipton:A Critical Review of Recurrent Neural Networks for Sequence Learning]*

    [A. Graves. Supervised Sequence Labelling with Recurrent Neural Networks. Textbook, Studies in Computational Intelligence, Springer, 2012.]

    [当我们在谈论 Deep Learning:RNN 其常见架构]

     

    展开全文
  • LSTM长短期记忆模型

    2019-11-11 15:51:55
    前言 传统卷积神经网络更加针对的是空间相关性的...但是序列数据通常长度很,它相当于卷积神经网络一层层卷积层,当长度过,会引发梯度消失或梯度爆炸。卷积神经网络我们可以控制,但是序列数据长度就在这儿,如...

    前言

    传统卷积神经网络更加针对的是空间相关性的数据,比如各种各样的图片
    而生活中,并不是所有数据都是具有较强的空间相关性的。比如我们的文字,语音,它是一种随时间变化的数据,我们常称这种数据为序列数据

    于是出现了RNN循环神经网络来解决这种序列数据。但是序列数据通常长度很长,它相当于卷积神经网络一层层卷积层,当长度过长,会引发梯度消失或梯度爆炸。卷积神经网络我们可以控制,但是序列数据长度就在这儿,如果缩短了话会降低准确性,因此科学家们在研究如何更好的传递序列中的隐藏状态从而避免梯度消失。而LSTM长短期记忆模型正好解决了这个问题

    总体结构

    整个网络用了类似逻辑电路的门结构
    PS:图片引用自MXNET论坛,链接:http://zh.d2l.ai/chapter_recurrent-neural-networks/lstm.html
    在这里插入图片描述

    遗忘门,输入门,输出门

    在这里插入图片描述
    遗忘门主要是控制是否遗忘上一层的隐藏细胞状态
    输入有当前时间步的序列数据,上一时间步的隐藏状态
    这两个输入进去后经过sigmoid激活函数得到一个值域为[0,1]的输出F1
    这相当于一个遗忘概率

    输入门和输出门与遗忘门计算方法很类似,也是根据当前时间步的序列数据,上一时间步的隐藏状态进行计算,最后通过sigmoid激活

    候选记忆细胞

    在这里插入图片描述
    候选记忆细胞与前面的区别则是将激活函数更改为值域在[-1, 1]的tanh

    记忆细胞

    在这里插入图片描述
    记忆细胞的计算则比较复杂,它涉及到了上一时间步的记忆细胞,当前时间步的候选记忆细胞
    前面我们也提到过
    遗忘门的输出是一个遗忘概率
    它与前一时间步的记忆细胞按元素相乘
    表示的是对之前时间步信息的保留

    另外它还计算输入门的输出与候选记忆细胞输出,并按元素相乘,得到当前信息
    之前时间步信息相加,传递到下一时间步的记忆细胞中

    所以每一次数据的流入计算,信息都包含了过去时间步的,从而形成一种“记忆”

    隐藏状态

    在这里插入图片描述
    隐藏状态的计算则利用了 经tanh激活的记忆细胞输出,与输出门的输出进行按元素相乘,并流入到下一时间步

    总结

    LSTM相较于RNN具有较大改进。让整个信息流动更类似人类的思维。

    通过加入遗忘门,记忆细胞这些结构更好的控制信息流动。

    在保留过去信息的同时也不会过度增加模型复杂度。

    现在LSTM是较为常用的一种处理序列的结构,最大贡献是改进了传统RNN结构,并且解决了梯度消失的问题。

    展开全文
  • 理解长短期记忆模型LSTM

    千次阅读 2016-03-24 13:27:26
    最近自己在试着用LSTM做自然语言处理中的分词任务,迭代几次之后的效果还不错,由于还不是很明白这个模型,先把学习时看到的非常好的教程贴在下面,以后再慢慢补充学习内容。

    最近自己在试着用LSTM做自然语言处理中的分词任务,迭代几次之后的效果还不错,由于还不是很明白这个模型,先把学习时看到的非常好的教程贴在下面,以后再慢慢补充学习内容。

    参考资料

    1. Understanding LSTM Networks
    2. 理解长短期记忆网络(LSTM NetWorks)
    3. LSTM Networks for Sentiment Analysis
    展开全文
  • 原始的LSTM [深度学习:长短期记忆模型LSTM] LSTM模型的拓展 [Greff, Klaus, et al. "LSTM: A search space odyssey." TNNLS2016] 探讨了基于Vanilla LSTM (Graves & Schm...

    http://blog.csdn.net/pipisorry/article/details/78362537

    原始的LSTM

    [深度学习:长短期记忆模型LSTM]

    LSTM模型的拓展

    [Greff, Klaus, et al. "LSTM: A search space odyssey." TNNLS2016] 探讨了基于Vanilla LSTM (Graves & Schmidhube (2005))之上的8个变体,并比较了它们之间的性能差异,包括:

    1. 没有输入门 (No Input Gate, NIG)
    2. 没有遗忘门 (No Forget Gate, NFG)
    3. 没有输出门 (No Output Gate, NOG)
    4. 没有输入激活函数 (No Input Activation Function, NIAF) (也就是没有输入门对应的tanh层)
    5. 没有输出激活函数 (No Output Activation Function, NOAF) (也就是没有输出门对应的tanh层)
    6. 没有"peephole connection" (No Peepholes, NP)
    7. 遗忘门与输入门结合 (Coupled Input and Forget Gate, CIFG)
    8. Full Gate Recurrence (FGR)。The FGR variant adds recurrent connections between all the gates (nine additional recurrent weight matrices).

    关于不同变体的对比

    [Greff, Klaus, et al. "LSTM: A search space odyssey." TNNLS2016]将8种LSTM变体与基本的Vanilla LSTM在TIMIT语音识别、手写字符识别、复调音乐建模三个应用中的表现情况进行了比较,得出了几个有趣的结论:

    1. Vanilla LSTM在所有的应用中都有良好的表现,其他8个变体并没有什么性能提升;
    2. 将遗忘门与输出门结合 (Coupled Input and Forget Gate, CIFG)以及没有"peephole connection" (No Peepholes, NP)简化了LSTM的结构,而且并不会对结果产生太大影响;
    3. 遗忘门和输出门是LSTM结构最重要的两个部分,其中遗忘门对LSTM的性能影响十分关键,输出门 is necessary whenever the cell state is unbounded (用来限制输出结果的边界);
    4. 学习率和隐含层个数是LSTM最主要的调节参数,而动量因子被发现影响不大,高斯噪音的引入对TIMIT实验性能提升显著,而对于另外两个实验则会带来反效果;
    5. 超参分析表明学习率与隐含层个数之间并没有什么关系,因此可以独立调参,另外,学习率可以先使用一个小的网络结构进行校准,这样可以节省很多时间。

    [[NL系列] RNN & LSTM 网络结构及应用]

    原始LSTM:不带忘记门的lstm block

             

    [Hochreiter, S., & Schmidhuber, J. Long short-term memory. Neural computation1997] 

                                          

    [LSTM memory cell as initially described in Hochreiter [Hochreiter and Schmidhuber, 1997]

    现在常说的 LSTM 有 Forget Gate,是由 Gers 在"Learning to Forget: Continual Prediction with LSTM, 2000"中提出的改进版本。

    后来,在"LSTM Recurrent Networks Learn Simple Context Free and Context Sensitive Languages, 2001"中 Gers 又加入了 Peephole Connection 的概念。

    耦合的输入和遗忘门/遗忘门与输入门结合 (Coupled Input and Forget Gate, CIFG)

    合并忘记门与输入门

     

    变成

    CIFG可以达到a 20% reduction in computation time (Greff et al., 2016).

    peephole connections

    为每个门的输入增加一个cell state的信号

    [Understanding LSTM Networks]

    某小皮

     

     

    其它变型

    门控循环单元GRU模型

            GRU即门控循环单元/Gated Recurrent Unit。GRU保持了LSTM的效果同时又使结构更加简单计算量更小。GRU把LSTM中的forget gateinput gateupdate gate来替代。 把cell state和隐状态ht进行合并,在计算当前时刻新信息的方法和LSTM有所不同。 

            GRU模型只有两个门了,分别为更新门zt和重置门rt。更新门用于控制前一时刻的状态信息被带入到当前状态中的程度,更新门的值越大说明前一时刻的状态信息带入越多;重置门用于控制忽略前一时刻的状态信息的程度,重置门的值越小说明忽略得越多。重置门有助于捕捉时间序列里短期的依赖关系;更新门有助于捕捉时间序列里长期的依赖关系。

    GRU模型图

    门控循环单元中隐藏状态的计算。⊙是按元素乘,也即下面的*表示矩阵元素相乘。

    GRU前向传播公式

    pytorch中gru的实现公式[https://pytorch.org/docs/stable/generated/torch.nn.GRU.html#gru]。

    Note: 有些地方zt和(1 - zt)是相反的,这个顺序需要注意一下,比如下面这个等同的图示(其中[]表示两个向量相连接)。

    具体更新过程如下:

            如果reset gate接近0,那么之前的隐藏层信息就会丢弃,允许模型丢弃一些和未来无关 的信息;update gate控制当前时刻的隐藏层输出ht需要保留多少之前的隐藏层信息, 若zt接近1相当于我们之前把之前的隐藏层信息拷贝到当前时刻,可以学习长距离依赖。 一般来说那些具有短距离依赖的单元reset gate比较活跃(如果rt为1,而zt为0 那么相当于变成了一个标准的RNN,能处理短距离依赖),具有长距离依赖的单元update gate比较活跃。

    Note: 如果reset门为1,而update门为0(不同图示中可能为1)的话,则GRU完全退化为一个RNN。其实第2个公式r=1时就是一个rnn!

    LSTM与GRU对比

    1 门数不同。GRU只有两个门reset门r和update门z。
    2 在GRU中,r和z共同控制了如何从之前的隐藏状态(st−1st−1)计算获得新的隐藏状态(stst),而取消了LSTM中的output门。
    3 经过实验,一般认为,LSTM和GRU之间并没有明显的优胜者。因为GRU具有较少的参数,所以训练速度快,而且所需要的样本也比较少。而LSTM具有较多的参数,比较适合具有大量样本的情况,可能会获得较优的模型。

    [经典必读:门控循环单元(GRU)的基本概念与原理]

    [RNN LSTM与GRU深度学习模型学习笔记]

    [GRU 原论文:https://arxiv.org/pdf/1406.1078v3.pdf]

    Recurrent Dropout without Memory Loss

    the cell and hidden state update equations for LSTM will incorporate a single dropout (Hinton et al., 2012) gate, as developed in Recurrent Dropout without Memory Loss (Semeniuta et al., 2016), to help regularize the entire model during training.

     DropOut()

    [Stanislaw Semeniuta, Aliases Severyn, and Erhardt Barth. Recurrent dropout without memory loss. arXiv 2016]

    Layer Normalization

    add the option to use a Layer Normalization layer in the LSTM

    i^t = σ(LN())

    i g f o s^t都需要LN。

    Layer Normalization (Ba et al., 2016[Jimmy L. Ba, Jamie R. Kiros, and Geoffrey E. Hinton. Layer normalization. NIPS2016]). The central idea for the normalization techniques is to calculate the first two statistical moments of the inputs to the activation function, and to linearly scale the inputs to have zero mean and unit variance.

    增加网络层数 Going Deep

    既然LSTM(RNN)是神经网络,我们自然可以把一个个LSTM叠加起来进行深度学习。

    比如,我们可以用两个独立的LSTM来构造两层的循环神经网络:一个LSTM接收输入向量,另一个将前一个LSTM的输出作为输入。这两个LSTM没有本质区别——这不外乎就是向量的输入输出而已,而且在反向传播过程中每个模块都伴随着梯度操作。

    [Gated Feedback Recurrent Neural Networks]

    左边是传统的stack RNN(三个RNN叠加),右边是升级版——RNN的hidden state除了会对下一时刻自己产生影响外,还会对其他的RNN产生影响,由reset gates控制。

    深层LSTM模型

    类似于深层RNN,使用多层的LSTM模型。著名的seq2seq模型使用的就是2层的LSTM来进行encode和decode的。multilayered Long Short-Term Memory (LSTM) to map the input sequence to a vector of a fixed dimensionality。

    [Ilya Sutskever, Oriol Vinyals, and Quoc VV Le. Sequence to sequence learning with neural networks. In NIPS, 2014.]

    具有2个cell的LSTM模型

    一般时间序列只需要一个block,而空间序列可能需要多个block?如下图。

    2个cell的lstm模型就类似于rnn模型中的”动态跨时间步的rnn网络“。

    Figure 2: Example of a net with 8 input units, 4 output units, and 2 memory cell blocks of size 2.
    in 1 marks the input gate, out 1 marks the output gate, and cell 1 =block 1 marks the rst memory cell of block 1. cell 1 =block 1 's architecture is identical to the one in Figure 1, with gate units in 1 and out 1

    The example assumes dense connectivity: each gate unit and each memory cell see all non-output units.

    [Hochreiter, S., & Schmidhuber, J. Long short-term memory. Neural computation1997] 

    [LSTM模型]

    ​带状态 (stateful) 的 LSTM 模型

            stateful LSTM:能让模型学习到你输入的samples之间的时序特征,适合一些长序列的预测,哪个sample在前,那个sample在后对模型是有影响的。

            stateless LSTM:输入samples后,默认就会shuffle,可以说是每个sample独立,之间无前后关系,适合输入一些没有关系的样本。

            在stateless时,长期记忆网络并不意味着你的LSTM将记住之前batch的内容,它只是记住句子内部的内容。Keras stateless lstm在训练时会默认地shuffle samples,所以导致sequence之间的依赖性消失,samplesample之间就没有时序关系,顺序被打乱,这时记忆参数在batch、小序列之间进行传递就没意义了,所以Keras要把记忆参数初始化。

            使 RNN 具有状态意味着每批样品的状态将被重新用作下一批样品的初始状态。注意,此处的状态表示的是原论文公式里的c,h,即LSTM特有的一些记忆参数,并非w权重。

            在keras中使用带状态的lstm时,即在stateful = True 时,我们要在fit中手动使得shuffle = False。随后,在X[i](表示输入矩阵中第isample)这个小序列训练完之后,Keras会将将训练完的记忆参数传递给X[i+bs](表示第i+bs个sample),作为其初始的记忆参数。bs = batch_size。这样一来,我们的记忆参数就能顺利地在samplesample之间传递,X[i+n*bs]也能知道X[i]的信息。

    [Keras之stateful LSTM全面解析+实例测试]

    加入了peephole的 LSTM

    换一个图:

     

            这里三条黑线就是所谓的 peephole,传统的 LSTM 中遗忘门、输入门和输出门只用了 h(t-1) 和 xt 来控制门缝的大小,peephole 的意思是说不但要考虑 h(t-1) 和 xt,也要考虑 Ct-1 和 Ct,其中遗忘门和输入门考虑了 Ct-1,而输出门考虑了 Ct。

    [Gers, Felix A., Schraudolph, Nicol N., and Schmidhuber, J¨urgen. Learning precise timing with lstm recurrent networks. J. Mach. Learn. Res., 3:115–143, March 2003.]

     

     

    GRU几个问题

    GRU参数数量

    3*((embed_dim+hidden_units)*hidden_units+hidden_units)

    GRU 比 LSTM 少了一个门(将遗忘门和输入门合成了一个单一的更新门),与结果一致

    [参考lstm中参数数量计算https://youzipi.blog.csdn.net/article/details/78361778]

    from: http://blog.csdn.net/pipisorry/article/details/78362537

    ref:

     

    展开全文
  • 长短记忆模型是建立在RNN基础之上的,理解RNN有助于理解LSTM模型,建议读者阅读《循环神经网络(RNN)原理及BPTT算法》。 LSTM模型 在介绍LSTM模型之前,我们先回顾一下RNN,网络结构如图: 将网络结构中每一...
  • 写给自己的备忘内容:RNN的基础1概述Recurrentneural network,循环神经网络,在普通多层BP神经网络基础上,增加了隐藏层各单元间的横向联系,通过一... 2、特点、优点优点:模型具备记忆性。缺点:不能记忆太前或...
  • 目录递归神经网络基础概念时依赖问题LSTM神经网络RNN具体结构LSTM结构LSTM解析利用LSTM进行时间序列分析预测时间序列实战 递归神经网络 基础概念 不只是关注当前数据,还会根据过去的数据做推测,具有记忆功能...
  • 普通RNN的信息更不能长久传播(存在与理论上),LSTM引入选择性机制: 选择性输出 选择性输入 选择性遗忘 选择性通过-门-实现,门限机制: 向量A是经过Sigmoid激活后的向量,包含的是概率值: ...
  • 问题描述:在使用fluid.layers.dynamic_lstm建立一个长短期记忆网络时,出现数据维度或者权重不一致的错误。 报错信息: <ipython-input-3-3c2a355f1576> in stacked_lstm_net(data, input_dim, ...
  • LSTM 是 long-short term memory 的简称, 中文叫做 长短期记忆. 是当下最流行的 RNN 形式之一 RNN 的弊端 RNN没有长久的记忆,比如一个句子太长时开头部分可能会忘记,从而给出错误的答案。 时间远的记忆要进过长途...
  • 此示例中,神经网络用于使用2011年4月至2013年2月期间的...LSTM(或长期短期存储器网络)允许分析具有长期依赖性的顺序或有序数据。当涉及到这项任务时,传统的神经网络不足,在这方面,LSTM将用于预测这种情况下...
  • 文章目录一、简介1.与HMM比较2.RNN的优化3.LSTM的应用二、LSTM源码实例1.入门--天气预测2.结果3.评价标准 一、简介 LSTM(Long short-Term Memory)是一种 RNN 特殊的类型,可以学习长期依赖信息。...
  • 长短期记忆模型(Long-Short Term Memory,LSTM) 参考学习博客 学习其他模型链接 [神经网络学习笔记]卷积神经网络CNN(Convolutional Neural Networks, CNN) 综述 [神经网络学习笔记]递归神经网络,即循环神经...
  • 文章目录前言一、LSTM模型结构二、使用LSTM识别MNIST手写数字 前言      计算机视觉系列之学习笔记主要是本人进行学习人工智能(计算机视觉方向)的代码整理。本系列所有代码是...
  • 判断长短期记忆模型在序列预测问题上是否表现良好可能是一件困难的事。也许你会得到一个不错的模型技术得分,但了解模型是较好的拟合,还是欠拟合/过拟合,以及模型在不同的配置条件下能否实现更好的性能是非常重要...
  • RNN模型在训练时会遇到梯度消失或者爆炸的问题,训练时计算和反向传播,梯度倾向于在每一时刻递增或递减,梯度发散到无穷大或者0.....没看懂吧... LSTM有输入向量,输出向量,状态,闸门等。 有了闸门机制,LSTM有...
  • LSTM是RNN的特殊类型 本人对RNN的一点拙解:https://blog.csdn.net/wjl__ai__/article/details/106431514 注意:和RNN不同的是,遗忘门、输入门、候选记忆细胞、输出门是独立的全连接神经网路块。
  • 时序数据建模分析已经有很多相关的应用了,在这个领域里面LSTM网络绝对是占据着非常重要的作用,自从LSTM网络提出以来,陆陆续续又出现了很多相关的变种网络,今天从网上找到了一份环境气象领域相关的数据集,可以...

空空如也

1 2 3 4 5 ... 16
收藏数 313
精华内容 125
关键字:

长短期记忆模型