长短期记忆网络(LSTM)

http://zh.d2l.ai/chapter_recurrent-modern/lstm.html

为什么可以缓解梯度爆炸呢,这里不是非常懂

这里的vocab_size指的是词向量的维度吧?

1 Like

对第4问没懂。“ 那么为什么隐状态需要再次使用tanhtanh函数来确保输出值范围在(−1,1)(−1,1)之间呢?”,这里隐状态有用tanh函数吗?隐状态H的计算公式里不是只用了一次tanh作用在C_t上吗?

1 Like

候选记忆元用tildeC表示,记忆元用C表示。

  1. 首先来回答您关于隐状态是否使用了 tanh()函数的疑问。
    Ht = Hadamard(Ot,tanh(Ct)),(Hadamard就是逐元素的乘积)
    在这里,隐状态表示为了Ot和tanh(Ct)的Hadamard积,这里所说的“隐状态再次使用了 tanh() 函数”其实指的就是这里的记忆元使用了tanh()函数,因为记忆元Ct使用了 tanh()函数,且其和Ot的Hadamard积的最终表示结果就是Ht,故可以理解为Ht使用了 tanh() 函数。
  2. 关于这一个问题的具体解答,是这样的:
    虽然候选记忆元 tildeC 使用了tanh()函数,但是求Ct的方式是这样的
    Ct = Hadamard(Ft, Ct-1) + Hadamard(It, tildeCt)
    可以很容易看出,例如当FtIt均取1,且Ct-1tildeCt也均取1时,结果为2,超出了(-1, 1)范围。故最后还需使用tanh()函数在求Ht的过程中使其回到(-1, 1)。
2 Likes

想知道如何从lstm 进化到gru的?从目前来看使用reset, update gates基本上已经达到类似效果

为什么要限制在(-1,1)?有什么好处呢?。。。。

练习第2题生成合适单词该怎么处理呢?predict_ch8返回的是vocab.idx_to_token[i], 如何优化以返回合适单词呢?

我猜测是因为两者效果上类似,但是gru比lstm简单(删减掉了记忆元部分)?

这应该是防止爆炸吧,绝对值小于1的数相乘,得到的绝对值肯定小于自身呀 :grin:

我觉得可能是加入遗忘门的缘故,遗忘门保留了过去的记忆元,使之不会产生梯度爆炸

我更改了一下预测函数还有读取文件的函数,使他多一个参数token_model选择字符还是word,这一章我都是使用的word版本不是char,可以参考,有错误可以指正



9.2.1.1里面 什么叫做输入为d, 是d维的意思吗
image

我在想num_stepsvocab_size值是不是相等的,还有输入数d是啥意思,不懂。

因为在代码里面在训练的时候还是调用了Ch8的训练函数train_epoch_ch8,里面就有做梯度裁剪的操作,所以就可以缓解梯度爆炸。

按词来预测的话,只需要增加一系列参数token_type,直到tokenize函数,并且在predict_ch8中判断如果token_type==‘word’,那么output就不用空字符来join,而是换成空格来join(因为单词之间要用空格分隔)就可以了,但效果不好,输出出来基本是无意义的。