【NLP面试】简述RNN、LSTM、NLP

1.RNN:处理序列数据

循环神经网络是一类以序列数据为输入,在序列的演进方向进行递归,且所有节点(循环单元)按链式连接形成闭合回路递归神经网络

RNN的独特价值: 它能有效的处理序列数据。因为序列中,前面的输入也会影响到后面的输出。RNN相当于有了记忆功能

缺点: 严重的短期记忆问题,长期的数据影响很小(哪怕是重要的信息)。越晚的输入影响越大,越早的输入影响越小。

变种算法LSTM和GRU等的特点:

  • 长期信息可以有效的保留
  • 挑选重要信息保留,不重要的信息会选择“遗忘”

1.1.为什么需要RNN?

 CNN和普通的算法大都是输入和输出的一一对应,也就是一个输入得到一个输出不同的输入之间是没有联系的

序列数据:一串相互依赖的数据流。(考虑词序)

 对于序列数据,因为要考虑词之间的依赖性、顺序,则一个输入就不够了。因此,需要RNN。

1.2.基本原理

RNN跟传统神经网络最大的区别:将前一次的输出结果,带到下一次的隐藏层中,一起训练
在这里插入图片描述
 下图中,输入 “time” 的时候,前面 “what” 的输出也产生了影响(隐藏层中有一半是黑色的)。以此类推,前面所有的输入都对未来的输出产生了影响,大家可以看到圆形隐藏层中包含了前面所有的颜色。当我们判断意图的时候,只需要最后一层的输出。

1.3.缺点

1.3.1.短期记忆、训练成本大

 根据上图的最后一个hidden layer(下图):短期的记忆影响较大(如橙色区域),但是长期的记忆影响就很小(如黑色和绿色区域),这就是RNN存在的短期记忆问题。
 RNN有短期记忆问题,无法处理很长的输入序列。而且训练RNN需要投入极大的成本。
越晚的输入影响越大,越早的输入影响越小。
在这里插入图片描述

1.3.2.梯度消失/爆炸

BPTT:Back propogation through time

求导过程的链太长
 太长的求导链在以tanh为激活函数(其导数值在0~1之间)的BPTT中,连乘就会使得最终的求导为0,导致梯度消失。因此,t时刻已经学习不到t-N时刻的参数了
解决方法: LSTM、设计更好的初始参数、更换激活函数ReLU等。

1.4.LSTM:RNN的优化算法

长短期记忆(LSTM) 单位是递归神经网络的单位。由LSTM单元组成的RNN常简称为LSTM。
 公共LSTM单元由单元、输入门、输出门和忘记门组成。该单元记住任意时间间隔内的值,并且三个门控制进出单元的信息流

1.4.1.与RNN相比

  • 保留较长序列数据中的重要信息,忽略不重要的信息,解决了RNN短期记忆的问题
  • 处理了在训练传统RNN时,可能遇到的梯度爆炸和消失的问题。
    在这里插入图片描述
  • 所有递归神经网络都具有神经网络的链式重复模块
    在标准的RNN中,这个重复模块具有非常简单的结构,例如只有单个tanh层。
    LSTM的链式结构重复模块:不是一个单独的神经网络层,而是4个非常特殊的方式进行交互的层。而且多了一个控制长时记忆的Cell state(细胞状态)
    在这里插入图片描述
    在这里插入图片描述

1.4.2.核心步骤(前向计算过程)

该小节的图中:

  • 最上面CtC_t线的状态代表了长时记忆
  • 最下面的hth_t线代表了工作记忆或短时记忆

门结构:用来控制增加或删除信息的程度,一般由 sigmoid函数(值域 (0,1))和向量点乘来实现。
LSTM共包含3个门结构(遗忘门、输入门、隐藏门),来控制细胞状态和隐藏状态。
在这里插入图片描述

  1. 遗忘门:确定什么样的信息要被丢弃。
    决定上一时刻细胞状态Ct1C_{t−1}中的多少信息(由ft(0,1)f_t\in(0,1)控制)可以传递到当前时刻CtC_t中。
    在这里插入图片描述
  2. 输入门:确定什么样的新信息被存放在细胞状态中。
    控制当前输入新生成的信息C~t\widetilde{C}_t中有多少信息(由it(0,1)i_t\in(0,1)控制)可以加入到细胞状态CtC_t中。
  • tanh层:产生当前时刻新的信息
  • sigmoid层:控制有多少新信息可以传递给细胞状态
    在这里插入图片描述
  1. 更新细胞状态:丢弃需要丢弃的、保留需要保留的。
    基于遗忘门和输入门的输出,来更新细胞状态。更新后的细胞状态有两部分构成:
    (1) 来自上一时刻、旧的细胞状态信息Ct1C_{t−1},由遗忘门控制:ftCt1f_t*C_{t-1}
    (2) 当前输入新生成的信息C~t\widetilde C_t,由输入门控制:itC~ti_t*\widetilde C_t
    在这里插入图片描述
  2. 输出门:基于更新的细胞状态,输出隐藏状态hth_t
    sigmoid层:输出门,用oto_t来控制有多少细胞状态信息。
    tanh(Ct)tanh(C_t)将细胞状态缩放至 (−1,1),使之作为隐藏状态的输出hth_t
    在这里插入图片描述

1.4.3.反向传播算法BPTT

详见博客

1.4.4.python实现

  1. 某博主大神自己搭建的框架
  2. 某博主大神用keras搭建的框架

1.4.5.LSTM变体

1.4.5.1.在门上增加窥视孔

在这里插入图片描述

1.4.5.2.整合遗忘门和输入门

在这里插入图片描述

1.5.GRU:LSTM 的变体

  • 将忘记门和输入门合成为更新门
  • 混合了细胞状态和隐藏状态
  • 其他一些改动…

最终的模型比标准的LSTM模型要简单效果和LSTM差不多,但是参数少了1/3,不容易过拟合
在这里插入图片描述

1.6.应用

  • 文本生成:类似填空题,给出前后文,然后预测空格中的词是什么。
  • 机器翻译:翻译工作也是典型的序列问题,词的顺序直接影响了翻译的结果。
  • 语音识别:根据输入音频判断对应的文字是什么。
  • 生成图像描述:类似看图说话,给一张图,能够描述出图片中的内容。这个往往是 RNN和CNN的结合。
  • 视频标记:将视频分解为图片,然后用文字来描述图片内容。

3.【科普】NLP

详见博客
在这里插入图片描述

3.1.核心任务

3.1.1.自然语言理解 – NLU | NLI

希望机器像人一样,具备正常人的语言理解能力。
难点:

  • 语言的多样性
  • 语言的歧义性
  • 语言的鲁棒性
  • 语言的知识依赖
  • 语言的上下文

详见博文

3.1.2.自然语言生成 – NLG

将非语言格式的数据转换成人类可以理解的语言格式,如文章、报告等。
步骤:

  • 内容确定 – Content Determination
  • 文本结构 – Text Structuring
  • 句子聚合 – Sentence Aggregation
  • 语法化 – Lexicalisation
  • 参考表达式生成 – Referring Expression Generation|REG
  • 语言实现 – Linguistic Realisation

详见博文

3.2.难点

  • 语言是规律复杂的。
  • 语言是可以自由组合的,可以组合复杂的语言表达。
  • 语言是一个开放集合,我们可以任意的发明创造一些新的表达方式。
  • 语言需要联系到实践知识,有一定的知识依赖
  • 语言的使用要基于环境和上下文

3.3.流程步骤

3.3.1.语料预处理

在这里插入图片描述
在这里插入图片描述

3.3.2.特征工程

特征提取、特征选择

3.3.3.选择分类器/设计DL模型

3.4.典型应用

在这里插入图片描述

参考

https://easyai.tech/ai-definition/rnn/
https://easyai.tech/ai-definition/lstm/
https://easyai.tech/ai-definition/nlp/
https://blog.csdn.net/flyinglittlepig/article/details/72229041
http://colah.github.io/posts/2015-08-Understanding-LSTMs/
https://www.cnblogs.com/jins-note/p/9715610.html
https://www.jianshu.com/p/daedde46eae5
https://blog.csdn.net/u012735708/article/details/82769711

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章