模型架构与原理面试题4922 字

循环神经网络面试题

·全库 179 / 611

《循环神经网络面试题》共 0.5 万字,通篇围绕 向量、GPU、架构、场景 展开,归在「模型架构与原理」这一层。

覆盖向量GPU架构场景面试Transformer

适合要跟模型团队对话、得听懂他们在说什么的人

目录骨架(8 节)
  1. 常见面试题
  2. 1 Native RNN模型
  3. 2 LSTM模型
  4. 3 双向RNN:同时考虑左、右的信息
  5. 4 多层RNN Deep RNNs:堆叠下去,增加深度
  6. 5 RNN总结
  7. 1.1 为什么需要循环神经网络
  8. 1.2 循环神经网络的结构

常见面试题

  1. Native RNN模型
  2. 为什么需要循环神经网络
  3. 循环神经网络的结构
  4. 数学语言描述RNN结构的前向传播与反向传播
  5. 传统RNN的问题
  6. LSTM中的门结构
  7. LSTM中门控机制的具体实现
  8. LSTM为什么可以缓解梯度问题
  9. 怎么对LSTM进一步优化?
  10. 双向RNN:同时考虑左、右的信息
  11. 双向RNN由两个独立的RNN构成
  12. 多层RNN Deep RNNs:堆叠下去,增加深度
  13. 多层RNN的结构
  14. Deep RNNs通常也不会很深
  15. 什么是串行和并行,训练深层的RNN为什么格外花时间?
  16. RNN总结

​

1 Native RNN模型

1.1 为什么需要循环神经网络

很多时候,我们会希望一个模型拥有处理时间序列数据的能力。

例如,如果要翻译“这个知名作家的书都非常精彩”:

The books of the famous writer [are] all wonderful.

我们知道,当生成到writer时,这里下一个生成的词应该是are,而不是is。这涉及到对前文文本books的依赖。传统的MLP或者CNN是无法做到这种连接的,因为他们会先输出the,而后输出books,而后输出of。每次输出,都不会留下记忆,所以输出【are】这个位置的单词的时候,自然不知道前面的books这个信息。

1.2 循环神经网络的结构

知道了我们要解决的问题后,就变得非常简单了:我们需要让模型有记忆力。一个办法是,每次模型输出的不只是目标单词,还有一个包含了之前的全部信息的中间特征H;而后,这个中间特征作为下一次训练的输入。

具体参考下表:

<学习的时候在笔记里手绘了张RNN结构,参考右图>image.png
Time Step输入输出
1Input1Output1 与中间特征H1
2Input2 和中间特征H1Output2和中间特征H2
3Input3 和中间特征H2Output2和中间特征H3
……

于是就有了如下的模型结构:

image.pngimage.png

1.3 数学语言描述RNN结构的前向传播与反向传播

后面的文章中我们会大量提到RNN的梯度消失、梯度爆炸和长文本依赖的问题。

1.3.1 Native RNN前向传播的数学表述

image.png

image.png

1.3.2 Native RNN的反向传播算法

RNN的反向传播在原理上和MLP的BP也是一样的,不过RNN和时间有关,导致RNN中的BP算法稍显复杂,名称也不一样,叫做backpropagation through time, BPTT。考虑到是入门文档,就不在这里手撕BPTT了! 感兴趣的话可以去参考论文:On the difficulty of training recurrent neural networks;参考右图,如果的的最大特征值小于1,则公式(18)和(19)的左边将以指数形式下降,造成梯度消失问题;类似的,如果的最大特征值大于1,则公式(18)和(19)的左边将以指数形式上升,造成梯度爆炸问题。 问题的来源总归还是在于RNN在不同时间步是共享了每一个权重矩阵的,所以反向传播的过程中难免要对同一个东西一直做连乘。image.png <截张图感受一下,哈哈!>

这个链接中比较详细的解释了RNN的反向传播算法BPTT:CS224N(1.24)Language Models and RNNs | bitJoy

1.4 传统RNN的问题

Native RNN存在很多问题:

1.4.1 记忆力过强

在传统的 RNN 中,每个时间步的隐藏状态都是通过当前的输入和上一时间步的隐藏状态计算得到的,每个时间步的隐藏状态都包含了全部历史时刻的信息,因此随着时间步的增加,隐藏状态中的信息会越来越多,其中有价值的信息含量的比率会越来越少。

为了解决这个问题,我们要想办法给Native RNN引入遗忘机制。

资料里没有你的场景?

把你手上的数据和想解决的那个环节发上来,我们按具体情况回,不复述方法论。

发布需求