GAN-overview reading note(4)LSTMs解读

前情回顾

没想到自己已经坚持写到第四篇了,附上之前三篇的链接:

GAN-overview reading note(1)基础概念
GAN-overview reading note(2)Least Squares-GAN
GAN-overview reading note(3)Wasserstein GAN

引言

为了了解GAN下的PixelRNN的具体工作原理,我想先了解下RNN和CNN,毕竟都是经典算法了,随着对RNN的了解,又找到了这篇LSTM的详细解读,今天就花了比较长的时间把这个读了,那今天就整理下LSTM的理解吧。先附上原文链接:Understanding LSTM Networks

RNN原理简介

人在思考的时候总是会联系前因后果,而神经网络却没有这种能力,直至人们提出了RNN(Recurrent Neural Networks)循环神经网络,在其模型中存在一个循环块,由于这个循环块的存在,使得RNN在计算时可以利用历史数据对现在的结果产生影响。
在这里插入图片描述这个循环结构可以理解为是一个展开了的多层结构,如下图所示。

在这里插入图片描述
可见 h t h_t ht的输出结果是由 X 0 X_0 X0 X t X_t Xt共同左右得到的,也就是说 h t h_t ht的得出可以参考之前的输入 X 0 X_0 X0的信息,这一点在很多场合是很重要的。就想作者所举的例子:在语言识别、自然语言理解、翻译等对顺序敏感的场合,RNN模型得到了很广泛的应用。
但是,传统RNN存在一个问题,就是对长期先验知识总结的能力不足,或者用作者的话说,已经在理论层面证明了,RNN不能实现对长期数据信息的参考。
这就引出了今天的主角:LSTMs(Long Short Term Memory networks)

老婆叫我陪她看电视,明天继续写。

好,回到实验室继续写!

LSTMs介绍

LSTMs是专门为了长期记忆而设计的,所以,这就是它的专长领域。下面来看它基于RNN的具体改进点。

LSTMs循环改进

在传统RNN网络中,循环块的结构很简单,通常为一个 t a n h tanh tanh函数。具体如下图所示。

在这里插入图片描述

同样的,在LSTMs中,也有类似的循环块。但是,循环块内的神经网络变得复杂了许多,由单层变为4层神经网络,网络层之间也有复杂的运算关系。具体结构图如下图所示。
在这里插入图片描述
首先,先介绍一下图中的符号:
在这里插入图片描述
图中,黄色方框表示神经网络层,粉色圆圈表示向量计算节点,其他的就是向量传输路径,容易理解,不再赘述。
注: 从这个图我们可以注意到,每个迭代循环块都有三个输入和三个输出口。
总结一下输入:(左侧从上到下依次)

  1. 上一次迭代得到的 C t − 1 C_{t-1} Ct1
  2. 上一次迭代的结果输出 h t − 1 h_{t-1} ht1
  3. 本次输入数据 X t X_t Xt

输出:(右侧从上到下依次)

  1. 本次迭代结果输出 h t h_{t} ht
  2. 本次迭代得到的 C t C_{t} Ct
  3. 本次迭代结果输出 h t h_{t} ht

咱们下边只需要弄明白这些输入是哪里来的,这些输出是怎么得到的,问题就解决了。当然,还要考虑,系统构建时,设计者是怎么考虑的。

LSTMs核心思想

首先,如下图所示在循环块顶端的这个直线,直接穿越了整个循环,将上次循环得到的参数 C t − 1 C_{t-1} Ct1只做了简单的线性变换就传送到下一个环节 C t C_t Ct,我们在这里姑且管这条线叫“贯通线”。这是LSTMs中很重要的一个环节,可以很好的保留下所有的参数信息,并向后传递。
在这里插入图片描述同时,在LSTM中还具备删除或增加信息到 C t C_t Ct中,这依赖于其内部的门结构。
在这里插入图片描述哈哈哈,突然就不想翻译了,这段就是说,这个就是门结构。由一个 s i g m o i d sigmoid sigmoid函数构成,来决定参数的通过率,0则不通过,1就全通过,01之间的部分通过,但是$sigmoid$函数特点导致01之间数很少,主要还是0或1的筛选功能。LSTMs中有三个这样的结构。

LSTMs内部机制

在这里插入图片描述我们可以先总览一下LSTMs结构,主要为三个gates。遗忘门,输入门和输出门。

遗忘门

首先看遗忘门,用来计算哪些信息需要忘记,通过sigmoid处理后为0到1的值,1表示全部保留,0表示全部忘记,于是有
f t = σ ( W f ⋅ [ h t − 1 , x t ] + b f ) f_t=\sigma(W_f⋅[h_{t−1},x_t]+b_f) ft=σ(Wf[ht1,xt]+bf)
其中中括号表示两个向量相连合并, W f W_f Wf是遗忘门的权重矩阵,σ为sigmoid函数, b f b_f bf为遗忘门的偏置项。设输入层维度为 d x dx dx,隐藏层维度为 d h d_h dh,上面的状态维度为 d c d_c dc,则 W f W_f Wf的维度为 d c × ( d h + d x ) d_c×(d_h+d_x) dc×(dh+dx)
理解: 本段摘录自大神博客:LSTM神经网络。其中不太理解相连合并的概念,够来根据实际程序看,应该是将两个矩阵直接放在一起构成新矩阵,矩阵间没有进行新的变化,只是矩阵宽度改变了。

输入门(记忆门)

不同人有不同的称呼,总之就是对新来的数据 X t X_t Xt的处理过程。这里主要分为两个步骤:

  1. 一个遗忘门结构,功能是一样的,就是对新数据和上次迭代结果放在一起进行一次筛选;**注:**这里的筛选参数与遗忘门的筛选参数不共享,是相互独立的。 i t = σ ( W i ⋅ [ h t − 1 , x t ] + b i ) i_t=\sigma(W_i⋅[h_{t−1},x_t]+b_i) it=σ(Wi[ht1,xt]+bi)
  2. 一个 t a n h tanh tanh函数,用来将输入数据产生新的信息并添加到单元状态中。 c t ~ = tanh ⁡ ( W i ⋅ [ h t − 1 , x t ] + b i ) \tilde{c_t}=\tanh(W_i⋅[h_{t−1},x_t]+b_i) ct~=tanh(Wi[ht1,xt]+bi)
    这两部分计算结果经过乘积后加上遗忘门数据与上次迭代的 C t − 1 C_{t-1} Ct1乘积结果:
    C t = f t ∗ C t − 1 + i t ∗ c t ~ C_t = f_t*C_{t-1}+i_t*\tilde{c_t} Ct=ftCt1+itct~
    这样就已经解决了对数据的记忆和传递,也就得到了“贯通线”传输至下一个循环的数据参数 C t C_t Ct。下面就是解决另外两个输出 h t h_t ht的来源了。输出门登场!

输出门

本次迭代的输出 h t h_t ht,首先与前两个sigmoid函数一样,这里也有一个sigmoid函数: o t = σ ( W o ⋅ [ h t − 1 , x t ] + b i ) o_t=\sigma(W_o⋅[h_{t−1},x_t]+b_i) ot=σ(Wo[ht1,xt]+bi)
还有一个tanh函数:输入时经过计算遗忘门和输入门综合结果的本次记忆参数 C t C_t Ct
h t ~ = tanh ⁡ ( C t ) \tilde{h_t}=\tanh(C_t) ht~=tanh(Ct)
最后经过线性计算: h t = o t ∗ tanh ⁡ ( c t ) h_t=o_t*\tanh(c_t) ht=ottanh(ct)
这步之后,由本次得到的记忆参数结合本次数据在这个sigmoid参数下的遗忘系数,计算得到本次输出。
以上就是LSTMs的全过程。

Reference:

先附上原文链接:
PixelRNN的原文链接:https://arxiv.org/pdf/1601.06759.pdf
Google关于PixelRNN的总结文章
中文相关的bolg链接

LSTM

2019.4.17 ——子涣

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值