循环神经网络RNN

1. NLP基本概念

词向量

NLP需要把一个词,映射到向量空间中去,相似词在形似的空间上 ,形成词库、词林、词网。

根据大量文本形成知识库,根据知识库去检索新的句子。

如情感词汇库:

image-20220808214031106

根据词汇库可以计算相似度

One-Hot

image-20220808214642608

将所有词映进词向量空间,有多少个词就有多少个维度;

维度太高,如果套用深度模型,其复杂度几乎是难以接受的,这就需要将高维的词向量变成低维的词向量(Word Embedding)。

word2vec

image-20220808214934360

语言模型,计算一个句子概率的模型,利用神经网络计算概率

如N阶马尔科夫模型,假设词的出现概率仅与前面n-1个词相关

image-20220808215325557

image-20220808215403894

条件概率是softmax

Skipgram

两种方式:

  1. 由周边词(前几个词)去预测求中心词(当前词)。CBOW
  2. 由中心词去预测周边词。Skip-gram

image-20220809164940590

skipgram示例如下:

image-20220808215647613

从10000维变到100维,再从100维变换到10000维,变化之后再进行softmax归一化,然后变换之后的结果与原词差别最小(交叉熵来计算)。

=> Word2Vec、GolVe两个包可以做

2. 模型

基本单元

RNN是结合神经网络与HMM的一种神经网路,主要应用于时间序列数据的处理。

基本的结构如下:

xt是当前的输入,ht-1是前一隐状态,fw是以w为参数的函数,ht是新的隐状态。

隐状态由 前一状态ht-1,与输入xt两个分量求和,经过激活函数(tanh)后求得。

隐状态ht再经过变化输出yt。有的资料中,输出的经过softmax的。

OneToMany

一个输入x,得到多个输出y的模型。

fw是相同的

适用于:

  • 从图像生成文字,输入是图像的特征,输出是一段句子

ManyToOne

多个输入x,单输出y

最经常用的模型,

适用于:

  • 预测未来某一天的车流量值

ManyToMany

多个输入x,多个输出y

Sequence to Sequence

先将输入数据编码成一个上下文向量ht;

再用另一个RNN网络对其解码,生成输出序列,输入输出并不等场。

适用于:

  • 机器翻译,也是在这一领域提出的;
  • 文本摘要,输入一段文本,输出文本的摘要;
  • 阅读理解,将输入的文章和问题分别编码,在对其进行解码,得到问题的答案;

示例

利用词来做预测

3. LSTM

参考,LSTM (Long Shot-Term memory)长短期记忆网络

简介

RNN是如何处理有效数据的吗,是不是每个时刻都会把隐藏层的值存下来,到下一时刻的时候再拿出来用,这样就保证了,每一时刻含有上一时刻的信息,把每一时刻存储信息的地方叫作Memory Cell(记忆细胞)。

与RNN相比,LSTM对于记忆的信息有了选择的能力,这种能力通过门来完成,命名有点像数电,起到过滤器的作用。

这三个门包括:

  1. Input Gate,在每一时刻从输入层输入的信息会首先经过输入门,输入门的开关会决定这一时刻是否会有信息输入到Memory Cell。
  2. Output Gate,每一时刻是否有信息从Memory Cell输出取决于这一道门。
  3. Forget Gate,每一时刻Memory Cell里的值都会经历一个是否被遗忘的过程,就是由该门控制的,如果打开,那么将会把Memory Cell里的值清除,也就是遗忘掉。

整个过程:

先经过输入门,看是否有信息输入,再判断遗忘门是否选择遗忘Memory Cell里的信息,最后再经过输出门,判断是否将这一时刻的信息进行输出。

结构

在隐状态h之外,增加了一个细胞状态C

  1. 遗忘门

    LSTM的第一步是决定我们需要从cell状态中扔掉什么样的信息。这个决策由一个称为“遗忘门”的sigmoid层决定,输入ht-1、xt,输出一个0~1之间的值,1代表完全保留,0代表完全扔掉。

  2. 输入门

    第二步是决定我们需要在cell state里存储什么样的信息。这个问题有两个部分。一个sigmoid层决定哪些数据需要更新,一个tanh层为新的后选值创建一个向量 。

    在决定需要遗忘和需要加入的记忆之后,就可以更新旧的cell state, 遗忘我们先前决定遗忘的东西,然后记忆新的信息。it可以看成一个权重。

  3. 输出门

    最后,我们需要决定要输出的东西。这个输出基于新的cell state**,**并且也会经过一个过滤。首先,我们运行一个sigmoid层,这个也就是输出门(output gate),以决定cell state中的那个部分是我们将要输出的。然后我们把cell state放进tanh,最后将它与sigmoid门的输出相乘,这样我们就只输出了我们想要的部分了。

核心思想

https://zhuanlan.zhihu.com/p/34203833

lstm的关键之处在于cell的状态,也就是图中贯穿顶部的那条水平线。cell的状态像是一条传送带,它贯穿整条链,其中只发生一些小的线性作用。信息流过这条线而不改变是非常容易的。如下图所示。

LSTM也有能力移除或增加信息到cell状态中,由"门"精细控制。

RNN是用覆盖的的方式计算状态,这有点类似于复合函数,那么根据链式求导的法则,他们是乘积的方式,如果导数是小数,就会使梯度消失;

LSTM中,状态S(Cell)是通过累加方式计算,,那样就不是一直复合函数的形式,它的导数也不是乘积形式,故梯度不容易消失。

以上只是便于理解

4. GRU

GRU(Gate Recurrent Unit)循环门单元是LSTM的一种变种,2014年提出。它组合遗忘门与输入门到一个单独的更新门中,也合并了cell state与hidden state,模型比LSTM更简单

首先,GRU有两个门重置门r,更新门z;

然后,用重置门r 对前一时刻状态ht-1进行遗忘,然后与输入xt结合,计算候选隐藏层,它对应着LSTM中

最后,用更新门z控制,需要遗忘多少信息,又需要记录多少新信息,得到最后的ht。

具有短距离依赖的单元reset gate比较活跃,具有长距离依赖的单元update gate比较活跃

视频1:24:12代码

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×