大数据面试题

47次阅读
没有评论

主要需求
做数据中台,用数据分析推动公司发展
做智能客服,用Tensorflow+自然语言处理+LSTM

  1. 数据预处理:包括数据收集、数据清洗、数据切分、词向量化等。
  2. 模型设计:我们将使用基于序列到序列(Seq2Seq)的神经网络模型作为我们的聊天机器人模型。
  3. 模型训练:我们将使用Pytorch框架训练我们的聊天机器人模型。
  4. 模型测试:我们将使用训练好的模型与用户进行交互,测试聊天机器人的性能。
  5. 优化和改进:我们将介绍一些优化和改进方法,以提高聊天机器人的性能和用户体验。

问题1:决策树有多少种,分别的损失函数是什么?
决策树有多少种,分别的损失函数是什么?决策树有三种:分别为ID3,C4.5,Cart树

ID3损失函数︰

C4.5损失函数∶

Cart树损失函数∶

问题2:决策树的两种剪枝策略分别是什么?
决策树的剪枝基本策略有预剪枝(Pre-Pruning)和后剪枝(Post-Pruning)。

预剪枝核心思想︰

在每一次实际对结点进行进一步划分之前,先采用验证集的数据来验证如果划分是否能提高划分的准确性。如果不能,就把结点标记为叶结点并退出进一步划分﹔如果可以就继续递归生成节点。

后剪枝核心思想︰

后剪枝则是先从训练集生成一颗完整的决策树,然后自底向上地对非叶结点进行考察,若将该结点对应的子树替换为叶结点能带来泛化性能提升,则将该子树替换为叶结点。

问题3:信息增益比跟信息增益相比,优势是什么?
以信息增益作为划分训练集的特征选取方案,存在偏向于选取值较多的特征的问题。信息增益比可以解决该问题。

问题4:介绍XdeepFM算法,XdeepFM跟DeepFM算法相比,优势是什么?

上图为xDeepFM的总体结构,有三个分支:Linear(稀疏的01向量作为输入)、DNN(经过embedding的稠密向量作为输入)、CIN(压缩感知层)。

xDeepFM如果去掉CIN分支,就等同于Wide & Deep。

xDeepFM将基于Field的vector-wise思想引入Cross,并且保留了Cross的优势,模型结构也很elegant,实验效果也提升明显。如果说DeepFM只是“Deep & FM”,那么xDeepFm就真正做到了”Deep”Factorization Machine。xDeepFM的时间复杂度会是其工业落地的一个主要性能瓶颈,需要重点优化。

问题5:对于长度较长的语料,如何使用Bert进行训练?
对于长文本,有两种处理方式,截断和切分。

-截断∶一般来说文本中最重要的信息是开始和结尾,因此文中对于长文本做了截断处理。

head-only:保留前510个字符

tail-only:保留后510个字符

head+tail:保留前128个和后382个字符

-切分:将文本分成k段,每段的输入和Bert常规输入相同,第一个字符是[CLS]表示这段的加权信息。文中使用了Max-pooling,Average pooling和self-attention结合这些片段的表示。

问题6:请介绍k-mean算法的原理。
1、选取K个点做为初始聚集的簇心

2、分别计算每个样本点到K个簇核心的距离(这里的距离一般取欧氏距离或余弦距离),找到离该点最近的簇核心,将它归属到对应的簇

3、所有点都归属到簇之后,M个点就分为了K个簇。之后重新计算每个簇的重心(平均距离中心),将其定为新的“簇核心”;

4、反复迭代2-3步骤,直到达到某个中止条件。

问题7:逻辑回归怎么分类非线性数据?
问题8:逻辑回归引入核方法后损失函数如何求导?
用核函数的方法来解决一个L2正则化的逻辑回归如下图:

我们直接将W*表示成β的形式带到我们最佳化的问题中,然后就得到一个关于β的无条件的最佳化问题。这时我们可以用梯度下降法或随机梯度下降法来得到问题的最优解。

再仔细观察核函数逻辑回归之后会发现它可以是一个关于β的线性模型:

其中kernel函数既充当了转换的角色有充当了正则化的角色,这种角度同样适用于SVM演算法。需要注意的是:SVM的解α大多都是O,核函数逻辑回归的解β大多都不是0这样我们会付出计算上的代价。

问题9:请介绍几种常用的参数更新方法。
梯度下降︰在一个方向上更新和调整模型的参数,来最小化损失函数。

随机梯度下降(Stochastic gradient descent,SGD)对每个训练样本进行参数更新,每次执行都进行一次更新,且执行速度更快。

为了避免SGD和标准梯度下降中存在的问题,一个改进方法为小批量梯度下降(Mini BatchGradient Descent),因为对每个批次中的n个训练样本,这种方法只执行一次更新。

使用小批量梯度下降的优点是︰

1)可以减少参数更新的波动,最终得到效果更好和更稳定的收敛。

2)还可以使用最新的深层学习库中通用的矩阵优化方法,使计算小批量数据的梯度更加高效。

3)通常来说,小批量样本的大小范围是从50到256,可以根据实际问题而有所不同。

4)在训练神经网络时,通常都会选择小批量梯度下降算法。

SGD方法中的高方差振荡使得网络很难稳定收敛,所以有研究者提出了一种称为动量(Momentum)的技术,通过优化相关方向的训练和弱化无关方向的振荡,来加速SGD训练。

Nesterov梯度加速法,通过使网络更新与误差函数的斜率相适应,并依次加速SGD,也可根据每个参数的重要性来调整和更新对应参数,以执行更大或更小的更新幅度。

AdaDelta方法是AdaGrad的延伸方法,它倾向于解决其学习率衰减的问题。Adadelta不是累积所有之前的平方梯度,而是将累积之前梯度的窗口限制到某个固定大小w。

Adam算法即自适应时刻估计方法(Adaptive Moment Estimation),能计算每个参数的自适应学习率。这个方法不仅存储了AdaDelta先前平方梯度的指数衰减平均值,而且保持了先前梯度M(t)的指数衰减平均值,这一点与动量类似Adagrad方法是通过参数来调整合适的学习率n,对稀疏参数进行大幅更新和对频繁参数进行小幅更新。

因此, Adagrad方法非常适合处理稀疏数据。

问题10:请介绍Wide&Deep模型。
1.1 Memorization和Generalization

Wide&Deep Mode 就是希望计算机可以像人脑一样,可以同时发挥 memorization和generalization 的作用。–Heng-Tze Cheng(Wide&Deep 作者)

1.2 Wide 和 Deep

同样,这两个词也是通篇出现,究竟什么意思你明白了没?其实,,Wide也是一种特殊的神经网络,他的输入直接和输出相连。属于广义线性模型的范畴。Deep 就是指Deep Neural Network,这个很好理解。Wide Linear Model用于memorization;Deep Neural Network用于 generalization。左侧是 Wide-only,右侧是Deep-only,中间是 wide & Deep:

1.3 Cross-product transformation

Wide 中不断提到这样一种变换用来生成组合特征,也必须搞懂才行哦。它的定义如下:

k表示第k个组合特征。i表示输入×的第i维特征。C_ki表示这个第i维度特征是否要参与第k个组合特征的构造。d表示输入×的维度。那么到底有哪些维度特征要参与构造组合特征那?这个是你之前自己定好的,在公式中没有体现。

饶了一大圈,整这么一个复杂的公式,其实就是我们之前一直在说的one-hot之后的组合特征︰仅仅在输入样本×中的特征gender=female和特征language=en同时为1,新的组合特征AND(gender=female, language=en)才为1。所以只要把两个特征的值相乘就可以了。

Cross-product transformation可以在二值特征中学习到组合特征,并且为模型增加非线性。

问题11:Xgboost、lightGBM和Catboost之间的异同?
树的特征

三种算法基学习器都是决策树,但是树的特征以及生成的过程仍然有很多不同

CatBoost使用对称树,其节点可以是镜像的。CatBoost基于的树模型其实都是完全二叉树。XGBoost的决策树是Level-wise增长。Level-wise可以同时分裂同一层的叶子,容易进行多线程优化,过拟合风险较小,但是这种分裂方式也有缺陷,Level-wise对待同一层的叶子不加以区分,带来了很多没必要的开销。实际上很多叶子的分裂增益较低,没有搜索和分裂的必要。

LightGBM的决策树是Leaf-wise增长。每次从当前所有叶子中找到分裂增益最大的一个叶子(通常来说是数据最多的一个),其缺陷是容易生长出比较深的决策树,产生过拟合,为了解决这个问题,LightGBM在Leaf-wise之上增加了一个最大深度的限制。

对于类别型变量

调用boost模型时,当遇到类别型变量, xgboost需要先处理好,再输入到模型,而lightgbm可以指定类别型变量的名称,训练过程中自动处理。

具体来讲,CatBoost可赋予分类变量指标,进而通过独热最大量得到独热编码形式的结果(独热最大量︰在所有特征上,对小于等于某个给定参数值的不同的数使用独热编码;同时,在CatBoost语句中设置“跳过”,CatBoost就会将所有列当作数值变量处理)。

LighGBM也可以通过使用特征名称的输入来处理属性数据﹔它没有对数据进行独热编码,因此速度比独热编码快得多。LGBM使用了一个特殊的算法来确定属性特征的分割值。(注︰需要将分类变量转化为整型变量;此算法不允许将字符串数据传给分类变量参数)和CatBoost以及LGBM算法不同,XGBoost本身无法处理分类变量,只接受数值数据,这点和RF很相似。实际使用中,在将分类数据传入XGBoost 之前,必须通过标记编码、均值编码或独热编码等各种编码方式对数据进行处理。

问题12:情景题:有一个大小为1G的文件,文件中每行有一个词,每个词最大为16kb;现有内存为1M的计算机,找出词频前100的词。
1.分而治之/hash映射

顺序读取文件,对于每个词x,取hash(x)%5000,然后把该值存到5000个小文件(记为xO,x1,…4999)中。这样每个文件大概是200k左右。当然,如果其中有的小文件超过了1M大小,还可以按照类似的方法继续往下分,直到分解得到的小文件的大小都不超过1M。

2.hash_map

统计对每个小文件,采用trie树/hash_map等统计每个文件中出现的词以及相应的频率。

3.堆/归并排序

取出出现频率最大的100个词(可以用含100个结点的最小堆)后,再把100个词及相应的频率存入文件,这样又得到了5000个文件。最后就是把这5000个文件进行归并(类似于归并排序)的过程了。

1: 词向量是什么, 有哪些方式生成词向量, 句子的词向量是什么?
答:

词向量

将词汇为表示成向量,称作词向量

生成词向量的方式

生成词向量的方法有很多,这些方法都依照一个思想:任一词的含义可以用它的周边词来表示。生成词向量的方式可分为:基于统计的方法和基于语言模型(language model)的方法。

基于统计的方法:
共现矩阵
SVD(奇异值分解)
基于语言模型的方法:
而如果是拿一个词语的上下文作为输入,来预测这个词语本身,则是 『CBOW 模型』
如果是用一个词语作为输入,来预测它周围的上下文,那这个模型叫做『Skip-gram 模型』
句向量

将不定长的句子用定长的向量表示,可以将句子整体输入BERT, 得到统一编码的矩阵作为句子向量; 也可以对每一个词单独生成词向量, 在做加权平均, 甚至直接求和。句向量为NLP下游任务提供服务。可以有如下应用:

语义搜索,通过句向量相似性,检索语料库中与query最匹配的文本
文本聚类,文本转为定长向量,通过聚类模型可无监督聚集相似文本
文本分类,表示成句向量,直接用简单分类器即训练文本分类器
2: Bert为啥能解决一词多意?怎么做到的?

答:同一个字在转换为bert的输入,虽然embedding的向量是一样,但是通过bert中的多层transformer encoder之后,attention关注不同的上下文,就会导致不同句子输入到bert之后,相同字输出的字向量是不同的,这样就解决了一词多义的问题。

3: 请说明Bert的注意力和seq2seq的注意力不同之处?

答:bert 的根基源于Transformer,所以其注意力机制是多头注意力机制,相比传统的RNN等模型更加高效,可以并行化处理同时能捕捉长距离的语义和结构依赖.提取的特征也更加丰富,而seq2seq的注意力Encoder端的所有信息压缩成一个固定长度的语义向量中, 用这个固定的向量来代表编码器端的全部信息. 这样既会造成信息的损耗, 也无法让Decoder端在解码的时候去用注意力聚焦哪些是更重要的信息,也无法并行处理问题

4: 我们一直在说ReLU比sigmoid好, 但是你能说说ReLU有什么问题呢? 你说的问题请深入到数学本质来阐述你的解释.

答: 虽说ReLU比sigmoid好,但是ReLU也有不可避免的缺陷,它有一个被称为 “ReLU 死区” 的问题:在训练过程中,一些神经元会“死亡”,即它们停止输出 0 以外的任何东西。在某些情况下,你可能会发现你网络的一半神经元已经死亡,特别是使用大学习率时。 在训练期间,如果神经元的权重得到更新,使得神经元输入的加权和为负,则它将开始输出 0 。当这种情况发生时,由于当输入为负时,ReLU函数的梯度为0,神经元就只能输出0了。

5: batch_size参数是如何影响模型的训练效果? 收敛速度? 过拟合的? 出现对应的问题你是如何解决的? 你用过哪些方法?

答:模型每次更新时,计算梯度是计算整个Batch的平均梯度,大的batch_size减少训练时间,提高稳定性。但是过大的batch_size泛化能力下降,在一定范围内,增加batchsize有助于收敛的稳定性,但是随着batchsize的增加,模型的性能会下降,收敛速度变慢。通过对训练步数的影响,小的batch_size使模型迭代次数增多,提前到达拟合点,但是epoch没结束,继续学习训练数据,容易导致过拟合于原始数据。
解决方法:增加了BN 层,dropout,更换了梯度下降的优化方法

6: CRF和HMM的区别.

1.HMM模型存在隐马假设, 而CRF不存在, 因此HMM的计算速度要比CRF模型快很多, 适用于对预测性能要求较高的场合.
2.同样因为隐马假设, 当预测问题中隐含序列单元并不是只与上一个单元有关时, HMM的准确率会大大降低, 而CRF不受这样限制, 准确率明显高于HMM.

7:CRF是如何训练的? 损失函数是什么?

(1)CRF层能从训练数据中获得约束性的规则.

(2)CRF层可以为最后预测的标签添加一些约束来保证预测的标签的合法性.
在训练数据训练的过程中, 这些约束可以通过CRF层自动学习到.从而大大降低标签序列在预测中非法序列出现的概率。

损失函数:
CRF损失函数由实际路径分数和所有可能路径的总分数组成。
(1)对于输入序列X对应的输出tag序列y, 定义分数如下(本质上就是发射概率和转移概率的累加和)
(2)利用softmax函数, 为每一个正确的tag序列y定义一个概率值, 在真实的训练中, 只需要最大化似然概率p(y|X)即可, 具体使用对数似然如下
(3)真实路径在所有可能的路径中有最高的分数。在训练过程中,模型的参数值将会一次又一次的更新,以继续增加真实路径的分数百分比。

8: 位置编码的作用, 从数学公式角度详细说下如何实现位置编码的?

答:作用:因为在Transformer的编码器结构中, 并没有针对词汇位置信息的处理,因此需要在Embedding层后加入位置编码器,将词汇位置不同可能会产生不同语义的信息加入到词嵌入张量中, 以弥补位置信息的缺失.
实现:最简单思路就是先将max_len x 1的绝对位置矩阵, 变换成max_len x d_model形状,然后覆盖原来的初始位置编码矩阵即可,要做这种矩阵变换,就需要一个1xd_model形状的变换矩阵div_term,我们对这个变换矩阵的要求除了形状外,还希望它能够将自然数的绝对位置编码缩放成足够小的数字,有助于在之后的梯度下降过程中更快的收敛. 这样我们就可以开始初始化这个变换矩阵了.首先使用arange获得一个自然数矩阵, 但是细心的同学们会发现, 我们这里并没有按照预计的一样初始化一个1xd_model的矩阵, 而是有了一个跳跃,只初始化了一半即1xd_model/2 的矩阵。 为什么是一半呢,其实这里并不是真正意义上的初始化了一半的矩阵, 我们可以把它看作是初始化了两次,而每次初始化的变换矩阵会做不同的处理,第一次初始化的变换矩阵分布在正弦波上, 第二次初始化的变换矩阵分布在余弦波上, 并把这两个矩阵分别填充在位置编码矩阵的偶数和奇数位置上,组成最终的位置编码矩阵.

9: bert为什么是双向的, 双向是如何体现的? 和BiLSTM的双向有何不同?

答:bert 是基于transformer的,预训练任务是一个mask LM ,通过随机的把句子中的单词替换成mask标签, 然后对单词进行预测。对于模型,输入的是一个被挖了空的句子, 而由于Transformer的特性, 它是会注意到所有的单词的,这就导致模型会根据挖空的上下文来进行预测, 这就实现了双向表示, 说明BERT是一个双向的语言模型。而BiLSTM模型,网络结构上, 每个单词都从正向和反向都得到一个表示, 然后将此表示进行连接, 则此时认为这就是单词的双向表示

10: Transformer的encoder与decoder中的mask, attention分别有什么区别? 如何理解?

答:encoder端:首先确定mask的形状是 batch_size*seq_length,对于小于最大长度的句子进行补0操作,对于大于最大长度的句子进行截断操作。虽然对少于最大长度的句子进行了补零操作但是这些0仍然会参与注意力分数的计算。这里需要将mask中的0变成负无穷,1变成0,与计算的注意力矩阵相加,原来有单词的注意力不变,没有单词的位置变换成负无穷,之后在进行softmax运算

attention多头自注意力层采用的是一种Scaled Dot-Product Attention的计算方式, 实验结果表明, Mul ti-head可以在更细致的层面上提取不同head的特征, 比单一head提取特征的效果更佳.

decoder端的mask形状是一个下三角矩阵,解码器在翻译单词时只能看到前面已经翻译的单词,不能看到后面的答案,所以使用一个下三角矩阵进行遮盖,每一次解码只给解码器看前面的单词。

多头自注意力层采用和Encoder模块一样的Scaled Dot-Product Attention的计算方式, 最大的 区别在于需要添加look-ahead-mask, 即遮掩”未来的信息”.

Encoder-Decoder Attention层和上一层多头自注意力层最主要的区别在于Q != K = V, 矩阵Q来源于上一层Decoder Block的输出, 同时K, V来源于Encoder端的输出.

11: 详细说说FastText的工作原理和Word2Vec的相似处, 不同处?

答:原理:fastText 模型输入一个词的序列(一段文本或者一句话),输出这个词序列属于不同类别的概率。
序列中的词和词组组成特征向量,特征向量通过线性变换映射到中间层,中间层再映射到标签。
fastText 在预测标签时使用了非线性激活函数,但在中间层不使用非线性激活函数。

相似处:
图模型结构很像,都是采用embedding向量的形式,得到word的隐向量表达。
都采用很多相似的优化方法,比如使用Hierarchical softmax优化训练和预测中的打分速度。

不同处:
模型的输出层:word2vec的输出层,对应的是每一个term,计算某term的概率最大;而fasttext的输出层对应的是分类的label。不过不管输出层对应的是什么内容,起对应的vector都不会被保留和使用。
模型的输入层:word2vec的输出层,是 context window(上下文) 内的term;而fasttext 对应的整个sentence(句子)的内容,包括term,也包括 n-gram的内容。

两者本质的不同,体现在 h-softmax的使用:
Word2vec的目的是得到词向量,该词向量 最终是在输入层得到,输出层对应的 h-softmax
也会生成一系列的向量,但最终都被抛弃,不会使用。
fastText则充分利用了h-softmax的分类功能,遍历分类树的所有叶节点,找到概率最大的label(一个或者N个)

12: 深入到Fasttext的架构级别, 几层网络? 字符级别n-gram的sub_word如何构造的?

答:3层网络,输入层,隐含层,输出层,所谓subword,就是取一个介于字符和单词之间成分为基本单元建立的模型。而所谓Byte Pair Encoding(一下简称BPE),就是寻找经常出现在一起的Byte对,合并成一个新的Byte加入词汇库中。即若给定了文本库,若我们的初始词汇库包含所有的单个字符,则我们会不断的将出现频率最高的n-gram的pair作为新的n-gram加入词汇库中,直到达到我们的要求。

13: Fasttext的输出层是如何加速的?

答:采用了一个softmax层级(利用了类别不均衡分布的优势)来加速运算过程。
fastText 也利用了类别(class)不均衡这个事实(一些类别出现次数比其他的更多),通过使用 Huffman 算法建立用于表征类别的树形结构。因此,频繁出现类别的树形结构的深度要比不频繁出现类别的树形结构的深度要小,这也使得进一步的计算效率更高。

14: 关于Glove词向量的理解和认识? 它和Word2Vec的区别是什么?
答:GloVe是一个基于全局词频统计(count-based & overall statistics)的词表征(word representation)工具,它可以把一个单词表达成一个由实数组成的向量,这些向量捕捉到了单词之间一些语义特性,比如相似性(similarity)、类比性(analogy)等。我们通过对向量的运算,比如欧几里得距离或者cosine相似度,可以计算出两个单词之间的语义相似性。

区别:
Word2Vec 是一种基于预测的模型,即 predictive model

GloVe 是一种基于统计的模型,即 count-based model

具体来说:

基于预测的模型,其目标是不断提高对其他词的预测能力,即减小预测损失,从而得到词向量。

而基于统计的模型,是通过对词的共现计数矩阵进行降维,来得到词向量;首先需要根据整个语料建立一个大型的体现词共现情况的矩阵,其目标是优化减小重建损失(reconstruction loss),即降维之后的向量能尽量表达原始向量的完整信息。

实际使用中,两种向量的对下游任务的效果并没有太大差别。

GloVe 相对于 Word2Vec 有一个优点是更容易并行化执行,可以更快,更容易地在大规模语料上训练。

15:BERT为什么做这两个预训练任务呢? 分别详细说明, 并详细解释MASK机制中80%, 10%, 10%的原因?

答:BERT加入两个预训练任务是为了强化BERT处理不同问题的能力
next sentence prediction:输入[CLS]a[SEP]b[SEP],预测b是否为a的下一句,即二分类问题;
mask prediction:输入[CLS]我 mask 中 mask 天 安 门[SEP],预测句子的mask,多分类问题

MASK机制中80%, 10%, 10%的原因:
首先, 如果所有参与训练的token被100%的[MASK], 那么在fine-tunning的时候所有单词都是已知的, 不存在[MASK], 那么模型就只能根据其他token的信息和语序结构来预测当前词, 而无法利用到这个词本身的信息, 因为它们从未出现在训练过程中, 等于模型从未接触到它们的信息, 等于整个语义空间损失了部分信息. 采用80%的概率下应用[MASK], 既可以让模型去学着预测这些单词, 又以20%的概率保留了语义信息展示给模型。保留下来的信息如果全部使用原始token, 那么模型在预训练的时候可能会偷懒, 直接照抄当前token信息. 采用10%概率下random token来随机替换当前token, 会让模型不能去死记硬背当前的token, 而去尽力学习单词周边的语义表达和远距离的信息依赖, 尝试建模完整的语言信息.最后再以10%的概率保留原始的token, 意义就是保留语言本来的面貌, 让信息不至于完全被遮掩, 使得模型可以”看清”真实的语言面貌。

16:BERT中为什么要除以根号下dk?

答:Q和K点积后的结果大小是跟维度成正比的,所以经过softmax以后,梯度就会变很小,除以根号dk后可以让attention的权重分布方差为1,而不是dk。

17:你的项目中使用降维的方法有哪些? 维度由多少降低到多少?

答:数据降维的方法降维方法分为线性核非线性降维,非线性降维又分为基于核函数和基于特征值的方法。线性降维方法:PCA ICA LDA LFA LPP(LE的线性表示)基于核函数的非线性降维方法:KPCA KICA KDA基于特征值的非线性降维方法(流型学习):ISOMAP LLE LE LPP LTSA MVU

缺失值比率 (Missing Values Ratio)低方差滤波 (Low Variance Filter)高相关滤波 (High Correlation Filter)随机森林/组合树 (Random Forests)主成分分析 (PCA)反向特征消除 (Backward Feature Elimination)前向特征构造 (Forward Feature Construction)其它:随机投影(Random Projections)、非负矩阵分解(No-negative MatrixFactorization)、自动编码(Auto-encoders)、卡方检测与信息增益(Chi-square andinformation gain)、多维标定(Multidimensional Scaling)、相关性分析(CoorespondenceAnalysis)、因子分析(Factor Analysis)、聚类(Clustering)以及贝叶斯模型(BayesianModels)。

18:随机森林和XGboost的原理和区别? 怎么用的呢? XGBoost怎么挑选的最优参数, 参数有哪些?

答:RandomForest使用Bagging和聚合,并使用完全生长的树木,而XGBoost使用Boosting,并使用弱者。 RandomForest更快,计算量更少,并且需要的参数也更少。

19:讲一下多头注意力机制? Dropout的优缺点和原理? 避免过拟合的方法?

答:多头注意力机制是将自注意力拓展到多个子空间中,多头的本质是多个独立的attention计算,作为一个集成的作用,增强语义信息的提取能力,防止过拟合;

Dropout的优缺点和原理:

优点:dropout具有平均作用,每轮训练时,将部分神经元死亡,也就是说每轮的模型的都不同,假设有n个神经元,那么一共有2的n次方种组合方案(粗略计算,实际不是)。这种“综合起来取平均”的策略通常可以有效防止过拟合问题。因为不同的网络可能产生不同的过拟合,取平均则有可能让一些“相反的”拟合互相抵消。缺点:dropout会导致训练时间增长,而测试时间几乎不变。主要原因是训练时需要通过伯努利分布生成每一个神经元drop掉的概率,此外多余的乘运算和rescale运算也会增加时间。而dropout目前在全连接层中使用较多,参数设置可选0.3或者0.5,原因在于卷积神经网络隐藏层中由于卷积本身的稀疏性,以及ReLU函数带来的稀疏性,使用dropout效果并不好。

避免过拟合的方法:

Early stopping:在每一个Epoch结束时计算validation data的accuracy,当accuracy不再提高时,就停止训练。
数据集扩增:从数据源采集更多数据复制原有数据并加上随机噪声重采样根据当前数据集估计数据分布参数,使用该分布产生更多数据等正则化方法
正则化方法:正则化方法是指在进行目标函数或代价函数优化时,在目标函数或代价函数后面加上一个正则项,一般有L1正则与L2正则等。
Dropout:修改ANN中隐藏层的神经元个数来防止ANN的过拟合。

20:你做过哪⼏个案例属于⽣成式任务? ⽤了什么模型架构? 有何优缺点?

答:莎士比亚文本生成任务:使用的是RNN模型,模型简单训练速度快,但是容易生成一模一样的内容,因此在里面添加了随机因子,使得每次预测的字根据rnn输出概率分布随机产生。

21:传统seq2seq架构在解决⽣成式任务时有什么优点? 有什么缺点? 如何改进, 请详细说明。

答:缺点:编码器阶段将输入内容压缩到一个文本向量中,容易出现开始内容信息丢失的情况,解码时只使用了编码器阶段的压缩向量,没有考虑输入与输出内容之间的对应关系。
改进:在解码阶段增加注意力机制。

22:linear nomolization和batch nomolization的差别?

答:BN的重点是在于针对整个batch中的样本在同一维度特征在做处理,而linear norm做的是针对每一个样本,做特征的缩放。
linear norm和BN的区别在于一句话中的每个单词都可以归到一个名字叫“语义信息”的一个特征中,也就是说,linear norm也是对同一个特征下的元素做归一化,只不过对应的 不再是batch size 而是对应的文本长度。

23:说一下层次softmax和负采样?

答:层级softmax涉及到一个叫做哈夫曼树的东西,哈夫曼树是带权路径和最短的最优二叉树,所以通过对词表中的词进行树构造,可以生成一个哈夫曼树,越接近根节点的词,其词频是越高的,我们需要优先更新,越向下,词频越低,更新频率也小一点,通过这样的方式就可以实现训练速度的加快。
正常情况下的预测结果是包括大量正样本和负样本的,但是若词表非常大,为了降低复杂度,所以我们每次只随机采样一定数量个负样本参与到损失函数的计算,这就是所谓的负采样。

正文完
 
评论(没有评论)