本周主要讲的是RNN,LSTM。
  序列数据在很多场景下都有出现,下面是几个序列模型的例子。

几个例子

吴恩达Deeplearning.ai 知识点梳理(course 5,week 1)
  例如语音识别(序列-序列),音乐生成(1-序列),情感分类(序列-1)等等。
吴恩达Deeplearning.ai 知识点梳理(course 5,week 1)
  输入句子是向量x,每一个词汇是x<t>,第i个样本的第t个词汇是x(i)<t>,输出y也同理。

词语的表示

吴恩达Deeplearning.ai 知识点梳理(course 5,week 1)
  一般来说会做一个词汇表,然后对词汇进行编码1,2,3,4…,然后转换成独热码。然后作为输入即可。

基本的RNN模型

吴恩达Deeplearning.ai 知识点梳理(course 5,week 1)
几个要点:

每一级的输入,不仅取决于输入,也取决于网络内部状态。
有一种简介的模式

吴恩达Deeplearning.ai 知识点梳理(course 5,week 1)

Forward & Backward Propagation

吴恩达Deeplearning.ai 知识点梳理(course 5,week 1)
其实这里仅仅是简单的写了一下,附录里边做个详细推导吧。

RNN的类型

吴恩达Deeplearning.ai 知识点梳理(course 5,week 1)
第一种many to many的,是Tx=Ty的,例如名字检测。然后是many to one,例如Sentiment Classification。还有one to one的,这种就是一个很trival的模型了。
吴恩达Deeplearning.ai 知识点梳理(course 5,week 1)
还有这种one to many的,例如music generation,给了初始化的一个a<0>x,一般都是zero vector,然后通过随机采样输出一个序列。后边每一个的输入是前一集输出的随机采样。还有后边这种many to many的,比方说machine translation,这个是TxTy的,一般前边给出的是encoder-decoder的方式。
总结如下:
吴恩达Deeplearning.ai 知识点梳理(course 5,week 1)

Language Modeling

  Language Modeling其实就是给定一个sentence,然后给出这个sentence的出现概率是多少:
吴恩达Deeplearning.ai 知识点梳理(course 5,week 1)
  那应该如何用RNN来做呢?
吴恩达Deeplearning.ai 知识点梳理(course 5,week 1)
  如图所示,我们首先输入一个x<1>=0以及a<0>=0然后输出y^<1>,这个表达的是整体词表的分布。比方说P(a),P(aron)等等。然后把cat作为x<2>=y<1>输入给网络,这个时候让网络输出P(average|cat),以此类推。而Loss则是熟悉的交叉熵Loss。用来估计概率。当我们依次输入了0,y<1>,y<2>,...,y<n>,这样我们就得到了P(y<1>),P(y<2>|y<1>),...,等一系列的概率,把它们乘起来就得到了语言模型。也就是句子的概率。

序列采样

吴恩达Deeplearning.ai 知识点梳理(course 5,week 1)
  当我们训练好了一个模型之后,输入初始的0,然后我们可以得到一个词汇表的概率分布。从中按照概率分布随机采样一个词汇,然后输入给后级,以此类推。最后得到最终结果。直到采集到一个EOS,或者一个预先设定的句子长度。

RNN的梯度消失问题

吴恩达Deeplearning.ai 知识点梳理(course 5,week 1)
随着RNN一级一级的加深,会出现一个梯度爆炸或者梯度消失的问题。梯度爆炸就容易出现NaN,这种其实还比较容易解决,就是cliping一下过大的梯度就可以了。梯度消失就变得非常麻烦。尤其是有的时候作为文字(英语),后边的动词可能依赖之前很长的主语,但是后级其实很难将梯度传播到很靠前的一级。这就是普通RNN的问题。

GRU

  GRU是Gated Recurrent Unit,用来解决长链中的dependence问题。
吴恩达Deeplearning.ai 知识点梳理(course 5,week 1)

  在GRU中,首先有一个memory cell,c,这个c=a,也就是inner state。每次更新时,先计算一个c~作为一个c的candidate。然后在计算一个Γ作为门控参数,也就是更新多少。最后c<t>=Γuc~<t>+(1Γu)c<t1>,这样即使是在长链中,由于有记忆单元和更新门控参数的存在,也能学习到长链中的dependence信息。

LSTM

吴恩达Deeplearning.ai 知识点梳理(course 5,week 1)
  LSTM是一个比GRU早很多的结构。这个结构的提出带来了巨大的影响和进步。可以看到,在LSTM中,基本的memory 思路是不变的,但是增加了遗忘参数Γf,以及输出参数Γo。这样模型的表达能力更强。在GRU中,遗忘参数是(1Γu)

双向RNN

  之前说的都是单向的RNN:
吴恩达Deeplearning.ai 知识点梳理(course 5,week 1)
但是比方说有些时候,只看之前的序列做出预测会出现问题,比方说Teddy在这句Teddy bears里其实是毛绒玩具,然而在下一句中则是总统名。这两个Teddy的前边都是一样的,但是一个是人名,一个不是。所以不仅仅要看前边,也要看后边。因此,出现了双向RNN。
吴恩达Deeplearning.ai 知识点梳理(course 5,week 1)
也就是在顺时间输入的情况下,加上一个逆时间输入的网络。然后对这两个网络的输出进行一个合并,然后得到最终的输出。

Deep RNN

吴恩达Deeplearning.ai 知识点梳理(course 5,week 1)
  为了增强模型的表达能力,可以RNN变深。如图所示,最左侧是普通的DNN,然后我们按照时间维度展开即可。由于时间维度的存在,训练RNN是一个非常耗时的计算。所以通常来说一般也就3就够了。

相关文章:

  • 2021-05-29
  • 2021-08-04
  • 2021-10-04
  • 2021-11-16
  • 2021-05-14
  • 2021-06-22
  • 2022-01-09
  • 2021-09-12
猜你喜欢
  • 2021-12-14
  • 2021-11-25
  • 2021-10-22
  • 2021-08-21
  • 2021-05-22
  • 2021-11-19
  • 2021-09-06
相关资源
相似解决方案