深度学习算法整理面试宝典(偏NLP)

cd本篇所涉及的深度学习模型主要偏向自然语言处理方向,用于面试回答问题。模型包括word2vec,RNN,LSTM,GRU,Attention模型,Transformer模型,BERT模型。除此之外,还包括一些额外在面试中常被问到的深度学习相关的问题。
word2vec
RNN
LSTM
GRU
Attention模型
Self Attention模型
Transformer模型
ELMO模型
BERT模型

其他面试常见问题
softmax反向推导
常用的优化方法及其优缺点
激活函数及适用场景
batch normalization的原理和作用
梯度损失和梯度爆炸的产生原因和解决方案

word2vec

  • 基本原理

一种预训练模型,将高维词向量嵌入到一个低维空间,在低维空间里词的向量包含一定的语义信息。(词嵌入)

  • 两种类型

word2vec按照训练的方式可以分为cbow和skip gram两种,cbow通过上下文预测当前词,skip gram通过当前词预测上下文。两种模型的网络结构如图所示。

深度学习算法整理面试宝典(偏NLP)_第1张图片

其中,CBOW的训练时间短。skipgram需要通过当前词预测上下文,训练时间相对较长,对于文本语料库较小时,多采用skipgram进行词向量的训练,效果更好。

  • 加速方式

最原始的基于DNN的word2vec在输出层计算和概率归一化时计算量较大,导致训练效率较低。
word2vec加速训练有两种方法:
一种是基于huffuman树(最优二叉树)来代替隐藏层和输出层的神经元,哈夫曼树叶子节点的个数即为词汇表的大小,内部节点起到了隐藏神经元的作用。将原先的softmax线性搜索求极大的多分类问题,转化为求树的搜索路径(即多个二分类)问题。
第二种是基于负采样。在输出端使用一个二分类器来区分目标词和词库中的其他K个词(将目标词作为一类,其他作为另一类),目标函数是尽可能将目标分配高概率,非目标词分配低概率。

RNN

  • 网络结构

RNN即循环神经网络,是时序数据处理中常用的模型。当前的状态取决于之前所有时刻的状态。
将过去的输出和当前的输入concatenate到一起,通过tanh来控制两者的输出,它只考虑最近时刻的状态。在RNN中有两个输入和一个输出。

  • 缺点

1.对于长序列,训练时间长,收敛困难;
2.长期记忆退化,仅保留了短期记忆,且由于误差反向传播的链式机制,易出现梯度消失的现象。

LSTM

  • 网络结构
    深度学习算法整理面试宝典(偏NLP)_第2张图片
  • 对RNN的改进

添加了三个门控机制:遗忘门、输入门、输出门。LSTM就是在RNN的基础上,增加了对过去状态的过滤,从而可以选择哪些状态对当前更有影响,而不是简单的选择最近的状态。

  • LSTM怎样解决梯度消失

RNN中,每个记忆单元h_t-1都会乘上一个W和激活函数的导数,这种连乘使得记忆衰减的很快,而LSTM是通过记忆和当前输入"相加",使得之前的记忆会继续存在而不是受到乘法的影响而部分“消失”,因此不会衰减,可以解决梯度消失。

GRU

  • 对LSTM的改进

1.将遗忘门和输入门合并成重置门(即多大程度上擦除之前的知识)
2.将细胞更新操作变为更新们,作用是多大程度的candidate更新当前的hidden layer。
3.性能和LSTM差不多,但参数少了1/3。

Attention模型

  • 基本原理

Attention起到的作用和RNN以及LSTM是相似的,都是给定一个序列,输出一个序列,所有能用RNN的地方都可以换做Attention。 相对于RNN,RNN对于每一个输出只看前面的,不能并行,attention的每一个输出都是基于全部的输入,可以并行化处理。
Attention机制通俗的讲就是把注意力集中放在重要的点上,而忽略其他不重要的因素。Attention的原理就是计算当前输入序列与输出向量的匹配程度,匹配度高也就是注意力集中点其相对的得分越高。
NLP领域中的Seq2Seq模型,编码器将完整的输入句子压缩到一个维度固定的向量中,然后解码器根据这个向量生成输出句子。当输入句子较长时,这个中间向量难以存储足够的信息,就成为这个模型的一个瓶颈。
Attention的作用:1.可以减小处理高维输入数据的计算负担,通过结构化的选取输入的子集,降低数据维度。2.让任务处理系统更专注于找到输入数据中显著的与当前输出相关的有用信息,从而提高输出的质量。

Self Attention模型

  • 基本原理

自注意力机制是注意力机制的改进,其减少了对外部信息的依赖,更擅长捕捉数据或特征的内部相关性。
功能可以被描述为将查询和一组键值对映射到输出,其中查询,键,值和输出都是向量。输出可以通过对查询的值加权来计算。

  • 网络结构
    深度学习算法整理面试宝典(偏NLP)_第3张图片
  • 多头注意力机制

单头注意力机制的扩展,有多个query, key和value组,不同组发现不同的特征。

Transformer模型

  • 基本原理

传统的神经机器翻译大都是利用RNN或者CNN来作为encoder-decoder的模型基础,而谷歌最新的只基于attention的结构来处理序列模型即Transformer模型摒弃了固有的定式,并没有用任何CNN或者RNN的结构。

  • 网络结构
    深度学习算法整理面试宝典(偏NLP)_第4张图片

ELMO模型

是利用BiLM(双向语言模型)来预训练词的向量表示。是一种新型深度语境化词表征,可对词进行复杂特征(如句法和语义)和词在语言语境中的变化进行建模(即对多义词进行建模)。

  • 网络结构
    深度学习算法整理面试宝典(偏NLP)_第5张图片

使用的是一个双向的LSTM语言模型,由一个前向和一个后向语言模型构成,目标函数就是取这两个方向语言模型的最大似然。

BERT模型

  • 模型简介

BERT全称Bidirectional Encoder Representation of Transformers,2018年由谷歌提出,论文题目《Pre-training deep bidirectional transformers for language understanding》,是一种预训练模型,通过联合调节所有层中的双向Transformer来训练预训练深度双向表示,可以得到每个字或词的embedding。

  • 模型结构
    整体结构
    深度学习算法整理面试宝典(偏NLP)_第6张图片
    内部结构是Transformer的Encoder部分
    深度学习算法整理面试宝典(偏NLP)_第7张图片
  • 模型输入

模型输入包括三部分:
token embedding
position embedding
segment embedding

  • 训练方式

两种训练方式:
1.masked language model
将输入的句子随机(15%的概率)替换成词汇[MASK],用BERT猜测MASK位置上对应的是什么词(使语义类似的词对应的embedding也类似)
2.Next sentence prediction
给两个句子,用BERT预测两个句子是不是连接在一起,转化成二值分类问题。

其他常见面试问题

  • softmax反向推导
  • 常用的优化方法及其优缺点

1.批量梯度下降
优点: 由于每一步都利用了训练集中的所有数据,因此当损失函数达到最小值以后,能够保证此时计算出的梯度为0,换句话说,就是能够收敛.因此,使用BGD时不需要逐渐减小学习速率
缺点: 由于每一步都要使用所有数据,因此随着数据集的增大,运行速度会越来越慢.
2. 随机梯度下降
优点: 训练速度快,对于很大的数据集,也能够以较快的速度收敛。
缺点: 由于是抽样,因此不可避免的得到的梯度肯定有误差,因此每一次迭代的梯度受抽样的影响比较大,也就是说梯度含有比较大的噪声,不能很好的反映真实梯度.
3. Momentum
优点:前后梯度方向一致时,能够加速学习,前后梯度方向不一致时,能够抑制震荡。
缺点:比较难学习一个较好的学习率。
4. Adagrad
优点: 能够实现学习率的自动更改。如果这次梯度大,那么学习速率衰减的就快一些;如果这次梯度小,那么学习速率衰减的就满一些。
缺点: 仍然要设置一个变量,经验表明,在普通算法中也许效果不错,但在深度学习中,深度过深时会造成训练提前结束。
5. RMSProp
优点: 相比于AdaGrad,这种方法很好的解决了深度学习中过早结束的问题 适合处理非平稳目标,对于RNN效果很好。
缺点: 又引入了新的超参,衰减系数ρ 依然依赖于全局学习速率。
6. Adam
利用梯度的一阶矩估计和二阶矩估计动态调整每个参数的学习率,在经过偏置的校正后,每一次迭代后的学习率都有个确定的范围,使得参数较为平稳。

  • 激活函数及适用场景

1.sigmoid激活函数([0,1]之间,涉及到概率时常会用到)
激活函数计算量大,反向传播求误差梯度时,求导涉及除法反向传播时,很容易就会出现梯度消失的情况,从而无法完成深层网络的训练)
2.tannh激活函数([-0.5,0.5]之间,是RNN默认的激活函数,易出现梯度消失)
在特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果。
3.relu激活函数
使用 ReLU 得到的 SGD 的收敛速度会比 sigmoid/tanh 快很多;
训练的时候很”脆弱”,很容易就”die”了,易出现神经元坏死;
如果使用 ReLU,要小心设置 learning rate,注意不要让网络出现很多 “dead” 神经元,如果不好解决,可以试试 Leaky ReLU、PReLU 或者 Maxout。
4.leakey relu激活函数
对relu的改进。

  • batch normalization的原理和作用

原理
传统的神经网络,只是在将样本x输入输入层之前对x进行标准化处理,以降低样本间的差异性。BN是在此基础上,不仅仅只对输入层的输入数据x进行标准化,还对每个隐藏层的输入进行标准化。
解决的问题
Covariate Shift问题,即:具有不同分布的输入值对深度网络学习的影响。当神经网络的输入值的分布不同是,我们可以理解为输入特征值的scale差异较大,与权重进行矩阵相乘后,会产生一些偏离较大地差异值;而深度学习网络需要通过训练不断更新完善,那么差异值产生的些许变化都会深深影响后层,偏离越大表现越为明显;因此,对于反向传播来说,这些现象都会导致梯度发散,从而需要更多的训练步骤来抵消scale不同带来的影响,也就是说,这种分布不一致将减缓训练速度。
作用:
BN的作用就是将这些输入值进行标准化,降低scale的差异至同一个范围内。这样做的好处在于一方面提高梯度的收敛程度,加快模型的训练速度;另一方面使得每一层可以尽量面对同一特征分布的输入值,减少了变化带来的不确定性,也降低了对后层网路的影响,各层网路变得相对独立,缓解了训练中的梯度消失问题。

  • 梯度损失和梯度爆炸的产生原因和解决方案

原因:
一是在深层网络中,二是采用了不合适的损失函数,比如sigmoid。梯度爆炸一般出现在深层网络和权值初始化值太大的情况下。
解决方案:
预训练加微调
梯度剪切、权重正则(针对梯度爆炸)
使用不同的激活函数
使用batchnorm
使用残差结构
LSTM网络替代RNN

你可能感兴趣的:(机器学习)