【动手学深度学习笔记】长短期记忆网络(LSTM)

399 阅读2分钟

视频链接

注解

一、LSTM跟GRU的区别

01:06 LSTM的效果与GRU的效果类似,但它的结构更加的复杂,它有三个门,分别为:

  • 遗忘门(Forget gate):将值朝0减少
  • 输入门(Input gate):决定是否忽略输入数据
  • 输出门(Output gate):决定是否使用隐藏状态

给出公式:

It=σ(XtWxi+Ht1Whi+bi)Ft=σ(XtWxf+Ht1Whf+bf)Ot=σ(XtWxo+Ht1Who+bo) \begin{aligned} I_t=\sigma(X_tW_{xi}+H_{t-1}W_{hi}+b_i) \\ \\ F_t=\sigma(X_tW_{xf}+H_{t-1}W_{hf}+b_f) \\ \\ O_t=\sigma(X_tW_{xo}+H_{t-1}W_{ho}+b_o) \end{aligned}

这三个门的计算方式与GRU相同,不同的是,LSTM引入了一个候选记忆单元(Candidate Memory Cell)C~t\widetilde C_t

C~t=tanh(XtWxc+Ht1Whc+bc) \widetilde C_t=\tanh(X_tW_{xc}+H_{t-1}W_{hc}+b_c)

观察这个公式,发现它与RNN的该层的隐藏状态相同,是没有经过任何门处理的,LSTM就是在RNN原来隐状态的基础上,加入门处理得到新的隐藏状态;而GRU是直接将上一层的隐状态与输入经过门处理得到新的隐藏状态

二、遗忘门与输入门的作用

04:36 通过上文计算出的C~t\widetilde C_t,我们加入遗忘门和输入门操作,可以得到记忆单元CtC_t

Ct=FtCt1+IcC~t C_t=F_t\odot C_{t-1}+I_c\odot \widetilde C_t

FtF_t是控制是否遗忘或者遗忘“多少”上一层的隐藏状态的信息(0是遗忘,1是记住),IcI_c是控制是否使用或者使用“多少”候选记忆单元中的信息。这个式子也和GRU中更新门求得隐藏状态时的式子很相似,但是GRU中只是用了一个门进行控制,那是一种”非黑即白“的控制,LSTM与之不同的是,我们是可以”既要Ct1C_{t-1}又要C~t\widetilde C_t“的,而GRU却做不到

三、为什么要反复做tanh()\tanh()

05:59 那么将记忆单元CtC_t再通过输出门,即可得到隐状态HtH_t

Ht=Ottanh(Ct) H_t=O_t\odot \tanh(C_t)

这里有一个小疑问,在计算C~t\widetilde C_t时已经做了一次tanh()\tanh(),为什么还要对CtC_t再做一次tanh()\tanh()? 这是由于计算C~t\widetilde C_t之后计算CtC_t时,我们不能保证运算之后CtC_t的值还是处于[0,1][0,1]之间,因此还要做一次tanh()\tanh()

四、输出门的作用

07:12 控制门OtO_t是用于控制是否输出,当OtO_t趋于0时,代表不输出,说人话就是过去的所有XX我们都丢掉,也就相当于”重置“了