2019年8月19日

357 阅读3分钟

之前遇到的面试题

1. LSTM的网络结构,以及和GRU的区别

答案: LSTM的三个门:输入门、输出门、遗忘门。 GRU的两个门:更新门和重置门。

2. 如果训练集和测试集的正确率都很高,但是实际应用的使用模型正确率很低?

答案:发生了数据泄露。这种可能是在数据集划分的时候,也可能是模型的问题,比如transformer decoder没有做mask。(答过拟合是不对的,答训练集和测试集和实际分布有差异是可以的)

3. 为什么BERT需要mask,之前的模型不需要?

答案:BERT是双向的Encoder,所以需要mask。GPT是单向的transformer,ElMo是两个单向的LSTM编码的拼接。

4. Transformer的Muti Head的做法的原因?

答案:类似CNN的多个卷积核,目的是分成多个独立的子空间,可以学习到更丰富的语义特征,从而增大模型的容量。

Multi-head attention allows the model to jointly attend to information from different representation subspaces at different positions.

5. 最大后验估计和最大似然的区别

答案:最大后验估计 = 似然函数 × 先验概率

6. 逻辑回归和朴素贝叶斯的区别

答案

  • Logistic Regression属于判别式模型,Naive Bayes属于生成模型。
  • Naive Bayes是建立在条件独立假设基础之上的,Logistic Regression的限制则要宽松很多。
  • Naive Bayes不需要优化参数,Logistic Regression需要建立损失函数,然后利用梯度下降进行优化。(参数模型和非参模型)

7. HMM、MEMM、CRF的区别

答案

  • HMM是生成式模型,MEMM和CRF是判别式模型。
  • HMM模型中存在两个假设:一是输出观察值之间严格独立,二是状态的转移过程中当前状态只与前一状态有关(一阶马尔可夫模型)。
  • MEMM模型克服了观察值之间严格独立产生的问题,但是由于状态之间的假设理论,使得该模型存在标注偏置问题。
  • CRF模型解决了标注偏置问题,去除了HMM中两个不合理的假设,模型相应得也变复杂了。

8. BN的训练和测试

答案

  • 训练时每次会传入一批数据,计算每个batch的均值和方差,并计算移动平均作为训练集的均值和方差
  • 当测试或预测时,每次可能只会传入单个数据,这个时候直接使用训练集的均值和方差

9. 分类样本不平衡如何解决

答案

  • 数据层面:数据上采样或者下采样
  • 评价指标:选用F1或者AUC等对数据不平衡不敏感的指标
  • 损失函数:使用Focal Loss等损失函数
  1. word2vec的损失函数

答案: CBOW是根据context预测中间词,因此是:

Skip-gram是根据context预测中间词,因此是:

  1. ELMo的损失函数

答案:两个双向的语言模型的log损失函数之和

  1. TF实现多GPU并行?

答案

同步模式:

tf中的并行主要分为两种:

  • 模型并行: 将模型中不同计算节点放在不同硬件资源上运算
  • 数据并行: 同时使用多个硬件资源来计算不同batch的数据的梯度,几乎适用于所有深度学习模型

数据并行

  • 同步数据并行: 等待所有GPU都计算完一个batch数据的梯度后,再统一将多个梯度合在一起,并共享更新后的模型参数,这类似于用了一个较大的batch
  • 异步数据并行: 不等待所有GPU都完成计算,而是哪个GPU完成了运算就立即将梯度更新到共享的模型参数中