当前位置:   article > 正文

从MLP,DNN到LSTM_mlp+lstm

mlp+lstm

从MLP,DNN到LSTM


这篇博客从简单的多层感知机(MLP)讲起,讲述了RNN网络如何发展到现在的LSTM结构,以便充分了解LSTM中各个门控单元的作用以及LSTM为何能学习到序列信息



一、感知机(Perceptron)

在这里插入图片描述

1.矩阵向量乘法运算(MVMs)

感知机是1957年由Rosenblatt提出的一种模型,他的原理如下:
假如我们需要建立一个模型,输入 x 1 x_{1} x1 表示一只猪的腿的长度, x 2 x_{2} x2 表示一只猪的尾巴的长度, x 3 x_{3} x3 表示一只猪的耳朵的长度, y 1 y_{1} y1 表示这只猪的价格, y 2 y_{2} y2表示这只猪的颜值,我们假定猪价格颜值都和尾巴,耳朵,腿的长度有关,那么我们就可以设定如下表达式:
[ y 1 y 2 ] \left[

y1y2
\right] [y1y2] = [ w 11 w 12 w 21 w 22 ] \left[
w11w12w21w22
\right]
[w11w21w12w22]
* [ x 1 x 2 ] \left[
x1x2
\right]
[x1x2]

2.添加偏置(bias)

如果我们设置一只猪的最低价为 b 1 b_{1} b1,颜值最低为 b 2 b_{2} b2,则
[ y 1 y 2 ] \left[

y1y2
\right] [y1y2] = [ w 11 w 12 w 21 w 22 ] \left[
w11w12w21w22
\right]
[w11w21w12w22]
* [ x 1 x 2 ] \left[
x1x2
\right]
[x1x2]
+ [ b 1 b 2 ] \left[
b1b2
\right]
[b1b2]

因此,权值 w i j w_{ij} wij分别代表猪的各部分长度对颜值价格的影响,w越大,说明这部分的长度( x x x)越重要。

3. 激活函数

根据上述分析,我们可以得到感知机的表达式 y = w x + b y = wx + b y=wx+b,然而这种模型只能处理线性问题,而生活中遇到的模型很多都是非线性的。因此我们在保证模型功能的情况下,需要引入一个非线性的单调函数,将线性模型变为非线性模型,以处理非线性问题 。

常用的激活函数为
s i g m o i d ( x ) sigmoid (x) sigmoid(x) = 1 1 + e − x \frac{1}{1+e^{-x}} 1+ex1

在这里插入图片描述

t a n h ( x ) tanh (x) tanh(x) = e x − e − x e x + e − x \frac{e^{x} - e^{-x}}{e^{x}+e^{-x}} ex+exexex

在这里插入图片描述

由函数表达式和图像可知,这两个函数也存在饱和区梯度较小,求导涉及除法,运算量较大的问题,但目前仍是常用的两种激活函数。在FPGA加速神经网络运算时,也常用分段线性函数来拟合这两个非线性函数,以降低运算量。


二、多层感知机(MLP,Multilayer Perceptron)

多层感知机,就是由很多层的感知机模型串联起来的模型;生活中遇到的很多问题,并不能找到感知机那样的对应关系,比如我们要根据一张很大的电路图分析电路功能,直接分析就显得很困难(Perception),我们如果先分析每一个小模块的功能,再分析每个小模块组成的大模块的功能,再根据那些大模块,分析电路整体功能,就会好很多(MLP)。MLP就是这个原理。MLP如图所示:

在这里插入图片描述

总之,多层感知机可以处理单层感知机无法处理的复杂问题。当然了,随着层数的增加,模型训练的时间也会增加。


三、RNN(Recurrence Neural Network)

感知机无法处理语言问题:

  • 语言问题的输入,常常是变长的,有的句子长,有的句子短,而且同一个词,不同的语境下,意思也是不一样的。这些问题感知机都无法解决

我们希望 “我讨厌你”和“你讨厌我”,这两句话能表达出不同的意思,因此就需要逐次向模型中输入“我”“讨”“厌”“你”,通过输入顺序的不同,将两句话区分开来。再比如,”真没意思“和”你这是什么意思“这两句话,里面的”意思“显然不是一个意思,因此需要根据前面的话,来判断这里的意思。为了解决这个问题,科研人员提出了循环神经网络,输出不仅与输入有关,还与之前的输出有关;

h t = t a n h ( W x t + U h t − 1 ) h_{t} = tanh(Wx_{t} + Uh_{t-1}) ht=tanh(Wxt+Uht1)

在这里插入图片描述

我的理解是,RNN结构中,含有一个存储状态信息的单元 h h h,每输入一次 x x x,就更新一次 h h h的值

虽然RNN网络可以处理序列问题,可当输入序列过长时,也会出现一些问题,比如”我选择的字母是A,。。。。。。。。。。。。。“,由于输入过程,模型处理完所有输入时,很难再记得选择的字母是A。因此,RNN存在梯度消失和梯度爆炸的问题。梯度爆炸可以通过限制梯度的大小来解决,然而梯度消失就不容易解决了。


四、Long Short Term Memory (LSTM)

为了解决RNN模型的梯度消失问题, Hochreiter 和 Schmidhuber 在1997年提出了LSTM结构,通过引入门控单元和记忆细胞的方式,来解决梯度消失的问题。比如之前提到的 ”我选择的字母是A,。。。。。。。。。。。。。“这句话,我们可以用记忆细胞的一个维度来存储选择的字母A,这样不管这句话再长,只要我们不更新记忆细胞这一维度的信息,模型始终能从记忆细胞中获得A这个信息。

1. LSTM without a Forget Gate(最早)

Hochreiter & Schmidhuber 最早提出的表达式如图所示:

i t = σ ( W i x t + U i h t − 1 + b i ) i_{t}=\sigma(W^{i}x_{t}+U^{i}h_{t-1}+b^{i}) it=σ(Wixt+Uiht1+bi)
o t = σ ( W o x t + U o h t − 1 + b o ) o_{t}=\sigma(W^{o}x_{t}+U^{o}h_{t-1}+b^{o}) ot=σ(Woxt+Uoht1+bo)
c ~ t = tanh ⁡ ( W c x t + U c h t − 1 + b c ) \widetilde{c}_{t}=\tanh(W^{c}x_{t}+U^{c}h_{t-1}+b^{c}) c t=tanh(Wcxt+Ucht1+bc)
c t = i t ∗ c ~ t + c t − 1 c_{t} = i_{t} * \widetilde{c}_{t} + c_{t-1} ct=itc t+ct1
h t = o t ∗ tanh ⁡ ( c t ) h_{t} = o_{t}*\tanh(c_{t}) ht=ottanh(ct)

通过输入门 i t i_{t} it来决定更新多少记忆细胞的信息, c ~ t \widetilde{c}_{t} c t是待输入记忆细胞的新的值,输出门 o t o_{t} ot来决定记忆细胞和输出的关系。这种结构的记忆细胞 c t c_{t} ct只能接受输入, c t c_{t} ct的值难以重置,比如说,一个自动翻译模型里,句子的be动词由主语决定,当我们输入主语时, c t c_{t} ct记住了该用is, 但是输出is后, c t c_{t} ct这一维度的信息就不需要再存储了,但是由于 c t c_{t} ct只进行累加操作,因此难以清除。后来科研人员引入遗忘门 f t f_{t} ft来解决这个问题

2. LSTM with a Forget Gate(常用)

LSTM with a Forget Gate的表达式如图所示:

i t = σ ( W i x t + U i h t − 1 + b i ) i_{t}=\sigma(W^{i}x_{t}+U^{i}h_{t-1}+b^{i}) it=σ(Wixt+Uiht1+bi)
f t = σ ( W f x t + U f h t − 1 + b f ) f_{t}=\sigma(W^{f}x_{t}+U^{f}h_{t-1}+b^{f}) ft=σ(Wfxt+Ufht1+bf)
o t = σ ( W o x t + U o h t − 1 + b o ) o_{t}=\sigma(W^{o}x_{t}+U^{o}h_{t-1}+b^{o}) ot=σ(Woxt+Uoht1+bo)
c ~ t = tanh ⁡ ( W c x t + U c h t − 1 + b c ) \widetilde{c}_{t}=\tanh(W^{c}x_{t}+U^{c}h_{t-1}+b^{c}) c t=tanh(Wcxt+Ucht1+bc)
c t = i t ∗ c ~ t + f t ∗ c t − 1 c_{t} = i_{t} * \widetilde{c}_{t} + f_{t} * c_{t-1} ct=itc t+ftct1
h t = o t ∗ tanh ⁡ ( c t ) h_{t} = o_{t}*\tanh(c_{t}) ht=ottanh(ct)

在之前的基础上,添加了遗忘门 f t f_{t} ft, 以解决无法重置记忆细胞的问题。

3. Vinalla LSTM

LSTM with a Peephole Connection的表达式如下所示:

i t = σ ( W i x t + U i h t − 1 + P i ∗ c t − 1 + b i ) i_{t}=\sigma(W^{i}x_{t}+U^{i}h_{t-1}+ P_{i}*c_{t-1} +b^{i}) it=σ(Wixt+Uiht1+Pict1+bi)
f t = σ ( W f x t + U f h t − 1 + P f ∗ c t − 1 + b f ) f_{t}=\sigma(W^{f}x_{t}+U^{f}h_{t-1}+P_{f}*c_{t-1} +b^{f}) ft=σ(Wfxt+Ufht1+Pfct1+bf)
o t = σ ( W o x t + U o h t − 1 + P o ∗ c t − 1 + b o ) o_{t}=\sigma(W^{o}x_{t}+U^{o}h_{t-1}+P_{o}*c_{t-1} + b^{o}) ot=σ(Woxt+Uoht1+Poct1+bo)
c ~ t = tanh ⁡ ( W c x t + U c h t − 1 + b c ) \widetilde{c}_{t}=\tanh(W^{c}x_{t}+U^{c}h_{t-1}+b^{c}) c t=tanh(Wcxt+Ucht1+bc)
c t = i t ∗ c ~ t + f t ∗ c t − 1 c_{t} = i_{t} * \widetilde{c}_{t} + f_{t} * c_{t-1} ct=itc t+ftct1
h t = o t ∗ tanh ⁡ ( c t ) h_{t} = o_{t}*\tanh(c_{t}) ht=ottanh(ct)

在之前的基础上,又引入了 c t − 1 c_{t-1} ct1,使得记忆细胞存储的信息也能决定记忆细胞的更新,遗忘。

4. LSTM原理分析

原始RNN模型的输出需要携带的信息太多,而LSTM通过引入记忆细胞,门控单元,来存储一部分信息,那么输出 h t h_{t} ht所携带的信息就少了很多。比如我要屠宰场,我一个人干的话,我既要负责杀猪,也要负责收钱,还要负责清洗等等,我什么都需要学会,对我的要求就很高,但是,我可以只负责收钱,找个人只负责清洗,以此类推,这样我的压力就小了很多。注意力机制和跳跃连接也是这个原理,通过添加其他单元,来减轻模型输出的压力,模型输出不用携带那么多的信息,从而达到更好的效果。简单,就是通过分工的方法,让不同的单元负责不同的事,以提高工作效率。

在这里插入图片描述
如图,LSTM在RNN的基础上引入了很多门控单元;

  • RNN中,内存单元的值就等于输出,LSTM引入输出门 o t o_{t} ot来决定输出 h t h_{t} ht和内存单元 c t c_{t} ct的关系;
  • 添加候选记忆细胞 c ~ t \widetilde{c}_{t} c t计算待更新的值
  • 待更新的值输入多少到记忆细胞,由输入门 i t i_{t} it决定
  • c t − 1 c_{t-1} ct1每次被重置多少比例,由遗忘门 f t f_{t} ft决定

五. Gated Recurrent Unit (GRU)

GRU表达式如下:

z t = σ ( W z x t + U z h t − 1 + b z ) z_{t}=\sigma(W^{z}x_{t}+U^{z}h_{t-1}+b^{z}) zt=σ(Wzxt+Uzht1+bz)
r t = σ ( W r x t + U r h t − 1 + b r ) r_{t}=\sigma(W^{r}x_{t}+U^{r}h_{t-1}+b^{r}) rt=σ(Wrxt+Urht1+br)
h ~ t = tanh ⁡ ( W h x t + U h ( r t ∗ h t − 1 ) + b z ) \widetilde{h}_{t}=\tanh(W^{h}x_{t}+U^{h}(r_{t}*h_{t-1})+b^{z}) h t=tanh(Whxt+Uh(rtht1)+bz)
h t = z t ∗ h ~ t + ( 1 − z t ) ∗ h t − 1 h_{t} = z_{t} * \widetilde{h}_{t} + (1 - z_{t}) * h_{t-1} ht=zth t+(1zt)ht1

GRU的核心思路和RNN一样,每输入一个 x t x_{t} xt更新一次 h t h_{t} ht的值,
h ~ t \widetilde{h}_{t} h t来决定更新的值, z t z_{t} zt来决定更新的比例,因此, h t = z t ∗ h ~ t + ( 1 − z t ) ∗ h t − 1 h_{t} = z_{t} * \widetilde{h}_{t} + (1-z_{t}) * h_{t-1} ht=zth t+(1zt)ht1 h ~ t \widetilde{h}_{t} h t就起到了记忆细胞的作用,为了使 h ~ t \widetilde{h}_{t} h t能起来重置的效果,引入了重置门 r t r_{t} rt,当 r t = 0 r_{t}=0 rt=0时, h ~ t \widetilde{h}_{t} h t就只由 x t x_{t} xt决定了,从而起到重置的目的。

在这里插入图片描述


六. 一些RNN结构优化的研究

为了寻找更好的RNN结构,科研人员做了很多研究。

  • 【1】LSTM with a Forget Gate的效果和Vinalla LSTM差不多, Peephole Connection没有太大效果
  • 【1】令 i t = 1 − f t i_{t} = 1-f_{t} it=1ft,可以减少参数数量,且不会有太多精度损失
  • 【1】LSTM模型的超参数几乎相互独立,且学习率的影响最大
  • 【2】LSTM的遗忘门偏置 b f = 1 b_{f} =1 bf=1时,效果更好些
  • 【2】替换激活函数,删除结点,或者改变计算方式(例如把某一处的乘法改成加法),等等,无论怎么修改,LSTM的性能始终无法被提高。
  • 【3】GRU中 h ~ t = tanh ⁡ ( W h x t + r t ∗ ( U h h t − 1 ) + b z ) \widetilde{h}_{t}=\tanh(W^{h}x_{t}+r_{t}*(U^{h}h_{t-1})+b^{z}) h t=tanh(Whxt+rt(Uhht1)+bz),像这样把 r t r_{t} rt提出来,对精度影响不大(在FPGA加速RNN运算中作用很大)

参考文献

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/花生_TL007/article/detail/116475
推荐阅读
相关标签
  

闽ICP备14008679号