关于nlp:架构级理解BERT逃不掉的RNN

6次阅读

共计 1680 个字符,预计需要花费 5 分钟才能阅读完成。

前言

写这一个系列的动因就是本人想深刻理解一下 BERT 的原理。BERT 是怎么被构想进去的?比拟适宜刚入门的小白浏览,读完之后会发现其实不过如此。那么既然是架构级的,本系列不会过多的波及代码级的或者说公式级的,更多的是设计形式以及设计的起因。本系列将分成以下几个模块,

  1. 逃不掉的 RNN
  2. 探究机翻的底细:Seq2Seq
  3. Attention is ALL you need
  4. Transformer 是谁?
  5. This is BERT

时序数据

回忆咱们晓得的全连贯层,他实际上做的就是将一 input 转换为一堆 output,这些 input 之间没有工夫上的关系,而是将所有 input 揉在一起输出到模型中。而对于时序数据,比方一段话,人在浏览的时候是单向的、随着工夫将 input 一一输出,并且很多时候 input 的长度是未知的。所以咱们就须要一个新的架构来解决这一类的时序数据。

Simple RNN

为什么须要 RNN?假如咱们须要解决一个文本分类工作。

要想对文本进行分类,那么咱们必须将这个文本数字化或者说向量化,并且须要保障这个向量可能表征这句话,蕴含了这句话中所有的特色。而通过 RNN 就可能将一个句子中的所有信息都交融起来,表征成一个向量。

下面就是 RNN 的架构图,咱们一步一步来讲。首先是咱们的输出,显然是一串文本:the cat sat … mat。那么对于某个单词而言,比方 the,想要参加后续的运算,首先须要将其向量化,这里能够用到 word2vec 等算法,通过语义的形式将单词转化为一个向量 x0。而后将 x0 输出矩阵 A,外部过程如下,

将 x0 与 ht-1(此处因为 x0 是第一个,ht- 1 实践上来说不存在,那么能够通过一些解决比方将其置零之类代替)连接起来,和矩阵 A 相乘,再进行 tanh 激活函数计算,失去 h0。而后将 h0 和 x1 输出到矩阵 A 又反复上述计算,周而复始(所以 RNN 叫循环神经网络,上一步的输入又作为下一步的输出)。显然,h0 中存储着 x0 的状态,h1 中存储着 x0 和 x1 的状态,以此类推,最初一个输入 ht 中应该存储着后面所有 x i(单词)的信息。这样,ht 相当于征集了所有村民的意见,就能够作为代表拿去评估,实现二分类的工作。

此处思考一个问题:为什么须要 tanh 激活?

假如没有 tanh,为不便探讨,咱们假如所有的 x 都是零向量,那么 ht ≈ A×ht-1。易得 h 100 = A100h0。易得 Ax = λx,A100x = λ100x,若 A 的特征值 λ 稍大于 1,那么 A 100就间接爆炸了;若 λ 稍小于 1,那么 A 100预计就间接变成零矩阵了。所以须要 tanh 进行一个相似于正则化的工作。

毛病使人提高,RNN 存在什么毛病呢?=>RNN 的记忆力特地短,什么是记忆力?之前咱们说“最初一个输入 ht 中应该存储着后面所有 x i(单词)的信息”,的确,然而当序列长度变大,对于最后面的 x 所遗留下来的特色可能曾经被笼罩掉了。能够通过计算 h~100~ 对于 x0 的导数来判断之间的相关性,计算可得,导数靠近于 0。

所以咱们能够发现,simpleRNN 在解决短距离的文本时成果较好,当序列长度变大之后,成果就不太好了。所以引出 LSTM。

革新 SimpleRNN => LSTM

可见 LSTM 其实也是一类 RNN 罢了,此处我不会具体解释其原理,因为 Attention is ALL you need,RNN 能够被 attention 取代了。

首先来看 LSTM 的架构,

仔细观察发现,其实和简略 RNN 没有很大区别,其实就是把之前单纯的乘矩阵 A 转化为一系列更为简单的操作。所以 SimpleRNN 能够被 LSTM 齐全替换掉,就像替换某个整机一样。外部的大抵过程如下。

为了补救 SimpleRNN 记忆力失落的问题,LSTM 将记忆放在一个传输带上,也就是下图中的 Conveyor Belt,也就是左下方的 C~t-1~,记忆的更新形式如图右下方所示,其中能够发现 f 向量,这是 LSTM 中的忘记门,他能够管制哪些信息疏忽,哪些信息保留。忘记门也保障了长距离记忆始终存在。

最初是 LSTM 的输入,在记忆信息 C 的根底上进行肯定的加工之后失去 ht。同样和 SimpleRNN 相似,将上一步的输入作为输出传入下一层。

正文完
 0