天天看点

深度学习

1. 为什么要进行预训练?

   为模型提供了一个好的初始化参数,在目标任务上具备更好的泛化性能、并加速收敛;

   是一种有效的正则化手段,避免在小数据集上过拟合。

2. 什么是词嵌入和分布式表示?ptms与分布式表示的关系?

   把一个维数为所有词的数量的高维空间嵌入到一个维数低得多的连续向量空间中,每个单词或词组被映射为实数域上的向量,

   这也是分布式表示:向量的每一维度都没有实际意义,而整体代表一个具体概念。

3. 什么是tf-idf(词频-逆文档频率)

   tf(term frequency): 某个词在整个文档中出现的频率,即词频统计逆文本频率,文本频率指含有某个词的文本在整个语料

   库中所占的比例。逆文本频率是文本频率的倒数。

深度学习
深度学习
深度学习

     不能反映词的位置信息,对关键词进行提取的时候,词的位置信息(如:标题、句首、句尾的词应该赋予更高的权重)。tf-idf

   严重依赖语料库,尤其是在训练同类语料库时,往往会掩盖一些同类型的关键词。

4. 什么是交叉熵损失函数

   交叉熵和 kl 散度差了一个常数项,可用于度量两个概率分布间的差异性信息,熵越小则分布越接近真实分布,不确定性越低。

5. bert 如何训练的?

   bert输入向量的组成部分是词向量(token embeddings)、段向量(segment embeddings)、位置向量(position embeddings)。

   bert输入的最大长度限制为512。bert的输出是每个token的表示向量,也可以获取每一层的表示向量。

   bert是一种自编码语言模型,可以看到一个单词两个方向的上下文信息,结构采用原始transformer的编码器部分。bert的输入

   序列可以是一个句子或两个句子的组合,每个序列都在起始位置添加一个特殊的分类标记[cls]。输入是两个句子时,句子之间需

   要用一个特殊的分隔符[sep]分隔,并且为每个词添加一个可学习的段嵌入向量来指示该词属于哪一个句子,每个词的输入表示是

   对应的词向量,段嵌入向量和位置向量的和。

   采用两个无监督的任务对bert进行预训练,分别为mlm(masked lm)和nsp(next sentence prediction),两个任务一起训练,输入是句子对构成的序列。

   在mlm任务中,从输入序列随机选择出15%的词,输出端不重建整个输入,只对这15%的词做预测。在选出的词中,80%替换为[mask]标记,10%替换为随机的单

   词,剩下10%的词不做更改。之所以没有将这15%的词全部替换为[mask]标记,是为了缓解在训练时存在[mask]标记而在fine-tune时没有[mask]标记而带来的

   不一致,但差异仍然存在,另外mlm通过没有掩盖的词来重建被掩盖的词,忽略了被掩盖单词之间的依赖关系。

   nsp任务的目的是训练模型理解句子之间的关系。在构造句子对的时候,50%的可能性后面的句子是前面句子真实的下一句,50%的可能性后面的句子是从语料

   库中随机选择的。

6. 过拟合的处理方法,有哪些正则化方法?

   正则化是机器学习中最常见的过拟合解决方法,在损失函数中加入正则项来惩罚模型的参数,以此来降低模型的复杂度,常见的添加正则项的正则化技术有

   l1,l2 正则化,在神经网络中则有dropout等。选取合适的停止训练标准,使对机器的训练在合适的程度,即early stopping。数据增强。

   正则化工作的时候,它使网络的权值更小。权值变小意味着,如果我们在这里或那里改变一些随机输入,网络的行为不会有太大的变化,这反过来使正则化

   的网络很难学习数据中的局部噪声。这迫使网络只学习那些在训练集中经常看到的特征。对bias进行正则化可能引入大量的欠拟合。

7. layernorm 和 batchnorm 的区别

   batch normalization 的处理对象是对一批样本, layer normalization 的处理对象是单个样本。batch normalization 是对这批样本的同一维度特征做标准

   化,layer normalization 是对这单个样本的所有维度特征做标准化。

8. 请问人工神经网络中为什么 relu 要好过于 tanh 和 sigmoid function?

   第一,采用 sigmoid 等函数,算激活函数时(指数运算)涉及除法和指数运算,计算量大,而采用 relu 激活函数,整个过程的计算量节省很多。

   第二,对于深层网络,sigmoid 函数反向传播时,很容易就会出现梯度消失的情况(在 sigmoid 接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失),

   这种现象称为饱和,从而无法完成深层网络的训练。而 relu 就不会有饱和倾向,不会有特别小的梯度出现。

   第三,relu 会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。

9. 为什么引入非线性激励函数?

   只有线性激励函数的条件下,多层网络与一层网络相当。

   非线性变换是深度学习有效的原因之一。原因在于非线性相当于对空间进行变换,变换完成后相当于对问题空间进行简化,原来线性不可解的问题现在变得可以解了。

深度学习

10. 为什么 lstm 模型中既存在 sigmoid 又存在 tanh 两种激活函数,而不是选择统一一种 sigmoid 或者 tanh?这样做的目的是什么?

    sigmoid 用在了各种 gate 上,产生0-1之间的值。

    tanh 用在了状态和输出上,是对数据的处理,这个用其他激活函数或许也可以。二者目的不一样。

11. 如何解决 rnn 梯度爆炸和弥散的问题?

    为了解决梯度爆炸问题,thomas mikolov首先提出了一个简单的启发性的解决方案,就是当梯度大于一定阈值的的时候,将它截断为一个较小的数。

    为了解决梯度弥散的问题,使用 relu 代替 sigmoid 函数。relu 的导数不是 0 就是 1.因此,神经元的梯度将始终为 1,而不会当梯度传播了一定时间之后变小。

12. 什么样的资料集不适合用深度学习?

   (1)数据集太小,数据样本不足时,深度学习相对其它机器学习算法,没有明显优势。

   (2)数据集没有局部相关特性,目前深度学习表现比较好的领域主要是图像/语音/自然语言处理等领域,这些领域的一个共性是局部相关性。图像中像素组成物体,

        语音信号中音位组合成单词,文本数据中单词组合成句子,这些特征元素的组合一旦被打乱,表示的含义同时也被改变。对于没有这样的局部相关性的数据集,

        不适于使用深度学习算法进行处理。举个例子:预测一个人的健康状况,相关的参数会有年龄、职业、收入、家庭状况等各种元素,将这些元素打乱,并不会影

        响相关的结果。

13. cnn的卷积核是单层的还是多层的?

    一般而言,深度卷积网络是一层又一层的。层的本质是特征图, 存贮输入数据或其中间表示值。一组卷积核则是联系前后两层的网络参数表达体, 训练的目标就是每

    个卷积核的权重参数组。

    描述网络模型中某层的厚度,通常用名词通道 channel 数或者特征图 feature map 数。不过人们更习惯把作为数据输入的前层的厚度称之为通道数(比如rgb三色图

    层称为输入通道数为3),把作为卷积输出的后层的厚度称之为特征图数。

    卷积的意思就是把一个区域,不管是一维线段,二维方阵,还是三维长方块,全部按照卷积核的维度形状,对应逐点相乘再求和,浓缩成一个标量值也就是降到零维度,

    作为下一层的一个feature map的一个点的值!

14. 什么是cnn的池化pool层?

    池化,简言之,即取区域平均或最大。

15. 神经网络参数初始化方法有哪些?

    神经网络的收敛结果实际上很大程度取决于网络参数的最开始的初始化。

    如果权值的初始值过大,则会导致梯度爆炸,使得网络不收敛;过小的权值初始值,则会导致梯度消失,使网络收敛缓慢或者收敛到局部极小值。

    随机正态/均匀分布初始化。

    xavier 初始化:基本思想是保持输入和输出的方差一致。

16. 训练技巧

    要做梯度归一化,即算出来的梯度除以 minibatch size。

    clip(梯度裁剪): 限制最大梯度,其实是value = sqrt(w1^2+w2^2….),如果 value 超过了阈值,就算一个衰减系系数,让value的值等于阈值。

    dropout 对小数据防止过拟合有很好的效果,值一般设为 0.1。

    rnn 的 dim 和 embdding size 一般从128上下开始调整. batch size 一般从 128 左右开始调整,batch size合适最重要,并不是越大越好。

    word2vec/glove 初始化,在小数据上,不仅可以有效提高收敛速度,也可以提高结果。

    除了 gate 之类的地方,需要把输出限制成 0-1 之外,尽量不要用 sigmoid,可以用 tanh 或者 relu 之类的激活函数.1. sigmoid函数在-4到4的区间里,

    才有较大的梯度。之外的区间,梯度接近0,很容易造成梯度消失问题。2. 输入0均值,sigmoid函数的输出不是0均值的。

17. cnn最成功的应用是在cv,那为什么nlp和speech的很多问题也可以用cnn解出来?为什么alphago里也用了cnn?这几个不相关的问题的相似性在哪里?

    cnn通过什么手段抓住了这个共性?

    以上几个不相关问题的相关性在于,都存在局部与整体的关系,由低层次的特征经过组合,组成高层次的特征,并且得到不同特征之间的空间相关性。

    cnn抓住此共性的手段主要有四个:局部连接/权值共享/池化操作/多层次结构。

    局部连接使网络可以提取数据的局部特征;权值共享大大降低了网络的训练难度,一个filter只提取一个特征,在整个图片(或者语音/文本) 中进行卷积;

    池化操作与多层次结构一起,实现了数据的降维,将低层次的局部特征组合成为较高层次的特征,从而对整个图片进行表示。

18. lstm结构推导,为什么比rnn好?

    lstm 通过门机制来缓解梯度消失问题。神经网络会通过学习改变门控的值来决定什么时候遗忘梯度,什么时候保留梯度。

    lstm的发明,主要是为了解决梯度消失。因为梯度消失了,参数就没有办法更新了。

    rnn 所谓梯度消失的真正含义是,梯度被近距离梯度主导,导致模型难以学到远距离的依赖关系。

    lstm 中梯度的传播有很多条路径,

深度学习

 这条路径上只有逐元素相乘和相加的操作,梯度流最稳定;

    但是其他路径(例如 

深度学习

 )上梯度流与普通 rnn 类似,照样会发生相同的权重矩阵反复连乘。

    但是在其他路径上,lstm 的梯度流和普通 rnn 没有太大区别,依然会爆炸或者消失。由于总的远距离梯度 = 各条路径的远距离梯度之和,即

    便其他远距离路径梯度消失了,只要保证有一条远距离路径(就是上面说的那条高速公路)梯度不消失,总的远距离梯度就不会消失(正常梯度

    + 消失梯度 = 正常梯度)。因此 lstm 通过改善一条路径上的梯度问题拯救了总体的远距离梯度。

19. 一个激活函数需要具有哪些必要的属性?

    非线性、几乎处处可微、计算简单、非饱和性、输出范围有限。

继续阅读