之前遇到的面试题
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等损失函数
- word2vec的损失函数
答案: CBOW是根据context预测中间词,因此是:
Skip-gram是根据context预测中间词,因此是:- ELMo的损失函数
答案:两个双向的语言模型的log损失函数之和
- TF实现多GPU并行?
答案:
同步模式:
tf中的并行主要分为两种:
- 模型并行: 将模型中不同计算节点放在不同硬件资源上运算
- 数据并行: 同时使用多个硬件资源来计算不同batch的数据的梯度,几乎适用于所有深度学习模型
数据并行
- 同步数据并行: 等待所有GPU都计算完一个batch数据的梯度后,再统一将多个梯度合在一起,并共享更新后的模型参数,这类似于用了一个较大的batch
- 异步数据并行: 不等待所有GPU都完成计算,而是哪个GPU完成了运算就立即将梯度更新到共享的模型参数中