机器学习常问问题集锦(持续更新中)

基础篇

word2vec被问到的点

1、word2vec的词向量是怎么更新的?

          在训练语言模型时,得到了词向量这个副产品;梯度上升更新权重,词向量同理,目标函数对x求导,用x的梯度来更新词向量。

机器学习常问问题集锦(持续更新中)_第1张图片

2、word2vec的输入维度是什么样的?

|v|*d

3、word2vec的影藏层是什么样子的?

      word2vec没有影藏层

       窗口内词的相加求和;

     

4、为什么要采用负采样技术?

      提高训练速度并改善采样词的质量,

      保证了模型训练的效果,其一模型每次只需要更新采样的词的权重,不用更新所有的权重,那样会很慢,其二中心词其实只跟它周围的词有关系,位置离着很远的词没有关系,也没必要同时训练更新

5、负采样的具体实现

    机器学习常问问题集锦(持续更新中)_第2张图片

机器学习常问问题集锦(持续更新中)_第3张图片

6、负采样为什么要使用出现次数的(3/4)幂

在使用C语言实现的词转向量(word2vec)中,你可以看到这个概率公式。每个单词都被给予一个等于它频率的权重(单词出现的数目)的3/4次方。选择某个单词的概率就是它的权重除以所有单词权重之和。

使用频率的3/4次方显然是根据经验来的;在他们的文章中,他们说到这个公式比其他函数的表现更为优秀。你可以通过在谷歌中输入: plot y = x^(3/4) and y = x并且调整焦距为x = [0, 1]范围。当我们增加数值一点点的时候它的图像有一点小弯曲。

https://blog.csdn.net/qq_28444159/article/details/77514563(负采样相关)

7、词向量oov问题如何解决?

      fasttext subword; bert基于字构建词表; 

8、得到embedding词向量之后如何分类?

      会经历一个[embedding_size,label]全连接层,得到每个类别的logit 值,对logit值做softmax,得到每一个类别的概率

9、fasttext和word2vec有什么区别?

       1、fasttext引入了ngram 和subword,增强词的表达能力

       2、fasttext的目标是标签,word2vec的目标是词向量

 

基础篇LR和SVM

1、LR和SVM有什么区别?

  • 第一,本质上是其loss function不同。
  •       逻辑回归方法基于概率理论,假设样本为1的概率可以用sigmoid函数来表示,然后通过极大似然估计的方法估计出参数的值;支持向量机​基于几何间隔最大化原理,认为存在最大几何间隔的分类面为最优分类面
  • 第二,支持向量机只考虑局部的边界线附近的点,而逻辑回归考虑全局(远离的点对边界线的确定也起作用)。
  • 当​你读完上面两个网址的内容,深入了解了LR和SVM的原理过后,会发现影响SVM决策面的样本点只有少数的结构支持向量,当在支持向量外添加或减少任何样本点对分类决策面没有任何影响;而在LR中,每个样本点都会影响决策面的结果。
  • 因为上面的原因,得知:线性SVM不直接依赖于数据分布,分类平面不受一类点影响;LR则受所有数据点的影响,如果数据不同类别strongly unbalance,一般需要先对数据做balancing。​
  • 第三,在解决非线性问题时,支持向量机采用核函数的机制,而LR通常不采用核函数的方法。
  • ​这个问题理解起来非常简单。分类模型的结果就是计算决策面,模型训练的过程就是决策面的计算过程。通过上面的第二点不同点可以了解,在计算决策面时,SVM算法里只有少数几个代表支持向量的样本参与了计算,也就是只有少数几个样本需要参与核计算(即kernal machine解的系数是稀疏的)。然而,LR算法里,每个样本点都必须参与决策面的计算过程,也就是说,假设我们在LR里也运用核函数的原理,那么每个样本点都必须参与核计算,这带来的计算复杂度是相当高的。所以,在具体应用时,LR很少运用核函数机制。​
  • 第四,​线性SVM依赖数据表达的距离测度,所以需要对数据先做normalization,LR不受其影响。
  • 一个基于概率,一个基于距离!​
  • 第五,SVM的损失函数就自带正则!!!(损失函数中的1/2||w||^2项),这就是为什么SVM是结构风险最小化算法的原因!!!而LR必须另外在损失函数上添加正则项!!!

2、SVM为什么要提出对偶问题?

  •  将有约束优化问题转换为无约束的优化问题。
  • 对偶问题将原始问题中的约束转为了对偶问题中的等式约束
  • 方便核函数的引入
  • 改变了问题的复杂度。由求特征向量w转化为求比例系数a,在原始问题下,求解的复杂度与样本的维度有关,即w的维度。在对偶问题下,只与样本数量有关。
  • 求解更高效,因为只用求解比例系数a,而比例系数a只有支持向量才为非0,其他全为0.
  • 若约束条件比较复杂,则很难求解,因此我们希望把带约束的优化问题转化为无约束的优化问题。

3、SVM的支持向量是什么?

  决定决策边界的数据叫做支持向量,它决定了margin到底是多少,而max margin更远的点,其实有没有无所谓。 

 

GBDT

1、GBDT是如何决策的?

    GBDT算法可以看成是由K棵树组成的加法模型:

机器学习常问问题集锦(持续更新中)_第4张图片

每一步以最小化目标函数决定加入哪颗树,最后由这k颗树的加权预测结果决定最后的预测值

https://blog.csdn.net/yangxudong/article/details/53872141

2、GBDT如何决定特征的重要性?

全局重要度是有单颗树的重要度决定的,计算所有的非叶子节点在分裂时加权不纯度的减少,减少得越多说明特征越重要。

不纯度的减少实际上就是该节点此次分裂的收益,因此我们也可以这样理解,节点分裂时收益越大,该节点对应的特征的重要度越高。

机器学习常问问题集锦(持续更新中)_第5张图片

  https://blog.csdn.net/yangxudong/article/details/53899260

3、GBDT有什么优点?

  •      1、集成学习因具有预测精度高的优势而受到广泛关注,尤其是使用决策树作为基学习器的集成学习算法。
  •       2、基于树的集成算法还有一个很好的特性,就是模型训练结束后可以输出模型所使用的特征的相对重要度,便于我们选择特征,理解哪些因素是对预测有关键影响,这在某些领域(如生物信息学、神经系统科学等)特别重要。本文主要介绍基于树的集成算法如何计算各特征的相对重要度。
  •      3、模型可解释性好
  •      4、对数据字段缺失不敏感
  •      5、能够自动做多组特征间的interaction,具有很好的非性线性
  •       6、使用不同类型的数据时,不需要做特征标准化/归一化

4、GBDT是是如何分裂特征的?

利用(xi,rti)(xi,rti)来构建cart回归树的时候,GBDT分裂会选取使得误差下降最多(如果cart树采用的是均方差作为损失,那么就是最小均方差)的特征进行分裂,如果这棵树不能拟合好,那么就要通过负梯度计算出新的残差向量来拟合新的cart回归树。对初始cart树可以直接用0,也可以采用样本的均值。既然已经有了分裂规则,那么如何停止继续分裂呢?主要可以通过以下手段进行操作:1、节点分裂时的最小样本数;2、树的最大深度;3、树的最大叶子节点数;4、loss满足约束条件。

5、GDBT那么如何停止继续分裂呢?

主要可以通过以下手段进行操作:1、节点分裂时的最小样本数;2、树的最大深度;3、树的最大叶子节点数;4、loss满足约束条件。

15、boosting思想是什么样的?

Bagging的思想是每一次从原始数据中根据均匀概率分布有放回的抽取和原始数据大小相同的样本集合,样本点可能出现重复,然后对每一次产生的训练集构造一个分类器,再对分类器进行组合。

梯度提升的Boosting方式是使用代价函数对上一轮训练出的模型函数f的偏导来拟合残差。

16、boosting是在主要在降低什么?

  降低偏差,每次迭代降低损失

17、GBDT和xgboost有什么区别?

  • 传统GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开,同时用到了一阶和二阶导数。顺便提一下,xgboost工具支持自定义代价函数,只要函数可一阶和二阶求导。
  • xgboost在代价函数里加入了正则项,用于控制模型的复杂度。正则项里包含了树的叶子节点个数、每个叶子节点上输出的score的L2模的平方和。从Bias-variance tradeoff角度来讲,正则项降低了模型的variance,使学习出来的模型更加简单,防止过拟合,这也是xgboost优于传统GBDT的一个特性。
  • Shrinkage(缩减),相当于学习速率(xgboost中的eta)。每次迭代,增加新的模型,在前面成上一个小于1的系数,降低优化的速度,每次走一小步逐步逼近最优模型比每次走一大步逼近更加容易避免过拟合现象;
  • 列抽样(column subsampling)。xgboost借鉴了随机森林的做法,支持列抽样(即每次的输入特征不是全部特征),不仅能降低过拟合,还能减少计算,这也是xgboost异于传统gbdt的一个特性。
  • 忽略缺失值:在寻找splitpoint的时候,不会对该特征为missing的样本进行遍历统计,只对该列特征值为non-missing的样本上对应的特征值进行遍历,通过这个工程技巧来减少了为稀疏离散特征寻找splitpoint的时间开销
  • 指定缺失值的分隔方向:可以为缺失值或者指定的值指定分支的默认方向,为了保证完备性,会分别处理将missing该特征值的样本分配到左叶子结点和右叶子结点的两种情形,分到那个子节点带来的增益大,默认的方向就是哪个子节点,这能大大提升算法的效率。
  • 并行化处理:在训练之前,预先对每个特征内部进行了排序找出候选切割点,然后保存为block结构,后面的迭代中重复地使用这个结构,大大减小计算量。在进行节点的分裂时,需要计算每个特征的增益,最终选增益最大的那个特征去做分裂,那么各个特征的增益计算就可以开多线程进行,即在不同的特征属性上采用多线程并行方式寻找最佳分割点。

https://blog.csdn.net/u013069552/article/details/108089847     

18、句子的相似性如何表示?

        字面距离;simhash等编码距离;词向量之间的距离

       https://www.cnblogs.com/xlturing/p/6136690.html

19、有什么模型能用来识别句子的相似性?

      一般神经网络词向量表示后,通过consin来度量句子的相似性

       https://zhuanlan.zhihu.com/p/39920446

20、有1到2^32-1的数,随机从里面删除5个数,找出删除了的5个数?

      1-2^32-1 用一位bit表示,存在记为1,不存在记为0

21、bert为什么要用到attention机制?

       attention机制把注意力放在重要的点上

22、attention机制有什么用?

  • 1、Attention机制通俗的讲就是把注意力集中放在重要的点上,而忽略其他不重要的因素。
  • 2、Attention的原理就是计算当前输入序列与输出向量的匹配程度,匹配度高也就是注意力集中点其相对的得分越高,其中Attention计算得到的匹配度权重,只限于当前序列对,不是像网络模型权重这样的整体权重。
  • 3、我们知道在Seq2seq模型中,原始编解码模型的encode过程会生成一个中间向量C,用于保存原序列的语义信息。但是这个向量长度是固定的,当输入原序列的长度比较长时,向量C无法保存全部的语义信息,上下文语义信息受到了限制,这也限制了模型的理解能力。所以使用Attention机制来打破这种原始编解码模型对固定向量的限制。

 

23、word2vec得到的词向量能消除歧义吗?比如 S1:“苹果 手机 很好 用”    S2:“小明 爱 吃 苹果” 这两句话中的苹果得到的词向量一样吗?

不能

24、如何解决两句话歧义的问题?

预训练词向量;考虑上下文向量化表示词

n-gram 来判断当前位置可能出现的“词同时出现的概率。

25、与word2vec相比,预训练有哪些优势

由于word2vec、glove等静态词向量未考虑一词多义、无法理解复杂语境,可通过预训练语言模型产生上下文相关的特征表示(动态词向量)。

预训练思想的本质是模型参数不再是随机初始化,而是通过一些任务(如语言模型)进行预训练;

https://zhuanlan.zhihu.com/p/76912493

===========================================================================================

项目相关

大部分是结合项目来问的。

知识点的问的比较少

1、albert与bert的区别?

1)对Embedding因式分解(Factorized embedding parameterization)

在BERT中,词embedding与encoder输出的embedding维度是一样的都是768。但是ALBERT认为,词级别的embedding是没有上下文依赖的表述,而隐藏层的输出值不仅包括了词本生的意思还包括一些上下文信息,理论上来说隐藏层的表述包含的信息应该更多一些,因此应该让H\gg E,所以ALBERT的词向量的维度是小于encoder输出值维度的。

2)权值共享;所有encoder层共享权重参数

3)  nsp任务 -->sop任务

2、为什么用albert不用bert?

开源了Albert tiny版,方便领域预训练;bert base 太大,推理时间长

3、预训练模型较传统的循环网络模型有哪些优点?

预训练思想的本质是模型参数不再是随机初始化,而是通过一些任务(如语言模型)进行预训练;

  • 引入Masked Language Model(MLM)预训练目标,能够获取上下文相关的双向特征表示;
  • 引入Next Sentence Prediction(NSP)预训练目标,擅长处理句子或段落的匹配任务;
  • 引入强大的特征抽取机制Transformer(多种机制并存):
    • Multi-Head self attention:多头机制类似于“多通道”特征抽取,self attention通过attention mask动态编码变长序列,解决长距离依赖(无位置偏差)、可并行计算;
    • Feed-forward :在位置维度计算非线性层级特征;
    • Layer Norm & Residuals:加速训练,使“深度”网络更加健壮;
  • 引入大规模、高质量的文本数据;

 

4、梯度消失和梯度爆炸是什么原因导致的?

反向传播链式求导导致,激活函数不当,sigmoid导数激活有效区为[-6,6]

5、如何从一个海量数据中查找某一关键词?

分区,再遍历每个区

6、hash散列冲突解决的方法有哪些?

       链地址法和载散列法   https://mp.csdn.net/console/editor/html/108270023

================================================================================================

3、fasttext如何生成句向量?

     平均词向量,tfidf加权词向量,bert句向量表示

     https://www.jianshu.com/p/c229ba01a312

    https://blog.csdn.net/asialee_bird/article/details/100124565

4、聚类时,聚成了多少类?k是怎么选择的?

     400左右,k值通过轮廓系数选择

5、置信度学习介绍下?

     置信度学习使用预测的概率和嘈杂的标签对未归一化的置信关节中的样本进行计数,然后归一化以估计联合分配,修剪噪音数据,生成干净的数据作为输出。

       https://blog.csdn.net/u013069552/article/details/108187981

6、albert的计算量和bert哪个大?

       albert参数量远小于bert;但两者计算量相差不大

7、bert和albert的区别?

       1)embedding因式分解

        2)  encoder权值共享

        3)  nsp-->sop  

8、simhash是什么原理?

      分词->hash->加权->求和->降维

10、递归有什么弊端?

满足使用递归的条件:

  • 子问题为同类事物,且更简单
  • 必须有个出口

优点:

  • 代码简洁
  • 符合思维习惯,容易理解

缺点:

  • 效率较低
  • 递归层次太深,耗内存且容易栈溢出一定要使用的话,最好使用缓存避免相同的计算,限制递归调用的次数

9、记录树的一些属性包括树高,其中记录的树高有些离群点,如何找出树高记录错了的样本?

     特征选择,回归模型

10、给定5枚硬币,有1枚有正反两面,2枚两面均为正面,2枚两面均为反面,现在观测到一枚硬币的为正面,求另一面也是正面的概率?

 

==============================================================================================

1、word2vec负采样

      根据词出现的频率进行采样,频率高的被采样的几率大;为了加速训练和选择好的词

2、tfidf计算方式

        tf=词出现的频率|文章的总词频

        idf=log((总文档数+1)|(出现该词的文档数+1))

        tfidf=tf*idf

3、word2vec为啥不能消除句子之间的歧义?预训练模型可以?     

       word2vec为静态词向量,预训练为动态词向量

4、gbdt和RF的实质性差异在哪?

     gdbt:boosting集成思想,梯度提升树,降低偏差; RF:bagging 策略,降低方差

==================================================================================

基于项目问的

1、为什么要用这个方法?去重业内都有哪些方法?

https://zhuanlan.zhihu.com/p/43640234

KShingle算法 : (k元组词表示,Jaccard度量相似性)

Minhash算法 :K-shingle算法得到的特征向量是超高维的,导致该算法非常巨大的时间复杂度和空间复杂度。Minhash算法设计了一种最小哈希函数,将原始超高维的稀疏向量转化为低维的稠密向量,降低了计算的空间复杂度。同时,对转换后的稠密向量进行分段索引,缩小潜在相似文本范围,降低了计算的时间复杂度。 (重排 K-shingle向量,取N个非0下标,组成N维向量)

Simhash:KShingle算法和Minhash算法都需要生成一个庞大的Shingle词组库,当文本数量和文本长度很大时,计算这个词组库需要耗费巨大的时间和空间资源,且各文档的特征向量计算都依赖这个共同的词组库,因此计算特征向量的过程很难完全地并行化。Simhash算法仅基于文档中包含的词汇生成文档的特征向量,极大提高了计算效率。

simhash弊端:

一是Simhash对文本进行分词处理并统计词频,可以认为是一个词袋模型,并没有考虑词汇的先后顺序。Minhash采用滑动窗口提取词组,加入了词汇次序信息。

二是Simhash对词汇特征向量按列求和再做符号映射,丢失了文本特征信息。

KSentence

机器学习常问问题集锦(持续更新中)_第6张图片

 

2、抽取关键词都有哪些方法?

https://zhuanlan.zhihu.com/p/61666342 (关键词抽取综述)

关键词是表达文本主题内容的词,包括单词,术语和短语,在含义上是独立非复合的。

机器学习常问问题集锦(持续更新中)_第7张图片

LDA :https://www.cnblogs.com/xlturing/p/6136690.html (文本相似性表示)

https://blog.csdn.net/pit3369/article/details/95594728  (tfidf,textrank, word2vec主题应用)

3、词向量如何检索?

建立倒排索引,通过聚类构建K个区,查询向量通过和这K个区进行比较,进行检索

https://www.cnblogs.com/huaweiyun/p/13745957.html

4、google提出simhash是来解决什么问题的?

     Google公司进行海量网页去重使用的主要算法;

       通过上面的例子我们可以很清晰的发现simhash的局部敏感性,相似文本只有部分01变化,而hash值很明显,即使变化很小一部分,也会相差很大。  (分词、hash、加权、合并、降维(根据正负变成0,1))

    存储索引,分四段;鸽巢原理(海明距离为3的必有一段相同)

5、simhash为什么对短文本无效?

   局部敏感

6、simhash召回很低,如何提高召回,有没有什么其他方法?

      提取文章中的关键词,通过词召回,然后再检索

7、文本相似性度量

    字面距离

    相同字符数

   莱文斯坦距离(编辑距离)

   simhash:局部敏感hash

https://www.cnblogs.com/xlturing/p/6136690.html

=====================================================================================

1、bert的位置向量如何表示?

https://zhuanlan.zhihu.com/p/57732839

机器学习常问问题集锦(持续更新中)_第8张图片

2、transform的位置向量是怎么表示的?

https://zhuanlan.zhihu.com/p/57732839

机器学习常问问题集锦(持续更新中)_第9张图片

3、transform的位置向量能表示方向吗?

      代码前半段sin,后半段cos

4、tarnsform的attention为什么要除以sqrt(d)

          为了梯度的稳定,Transformer使用了score归一化,即除以  sqrt(dk)=8 (论文中使用key向量的维度是64维,其平方根=8,这样可以使得训练过程中具有更稳定的梯度。);

首先说明做归一化的原因,随着dk​的增大,q ⋅ k 点积后的结果也随之增大,这样会将softmax函数推入梯度非常小的区域,使得收敛困难(可能出现梯度消失的情况)(为了说明点积变大的原因,假设q 和k 的分量是具有均值0和方差1的独立随机变量,那么它们的点积q ⋅ k 均值为0,方差为dk​),因此为了抵消这种影响,我们将通过除以sqrt(dk)缩放点积,对于更详细的分析https://blog.csdn.net/liujian20150808/article/details/105215861

5、bert为什么要采用MLM任务?

https://zhuanlan.zhihu.com/p/139479425

MLM 首先在输入句子中遮挡住部分的词语(token),然后训练模型来基于剩下的词语预测被遮住的词语。作为一种创新的预训练任务来克服单向 LM(语言模型) 的缺点

6、MLM任务,mask的15%的任务,80%的mask,10%的原词,10%的随机词是为什么?

该训练方法会引起预训练阶段和微调阶段的不匹配,因为 mask 标记并不会出现在微调阶段。为了解决这一问题,Devlin 等人对于被选中遮住的词语(总词语数的 15%),80% 的可能使用 mask 将其遮起来,10% 的可能使用随机词语替换,10% 的可能保留原词语。

  • a: 引入 Masked LM (带mask的语言模型训练) 
    • a.1: 在原始训练文本中, 随机的抽取15%的token作为即将参与mask的对象。
    • a.2: 在这些被选中的token中, 数据生成器并不是把他们全部变成[MASK], 而是有下列3个选择: 
      • a.2.1: 在80%的概率下, 用[MASK]标记替换该token, 比如my dog is hairy -> my dog is [MASK]   (相当于忘形填空,进行词预测)
      • a.2.2: 在10%的概率下, 用一个随机的单词替换该token, 比如my dog is hairy -> my dog is apple (根据上下文预测进行语义预测)
      • a.2.3: 在10%的概率下, 保持该token 不变, 比如my dog is hairy -> my dog is hairy   (不会破坏原语言的表达能力和语言规则)
    • a.3: Transformer Encoder在训练的过程中, 并不知道它将要预测哪些单词? 哪些单词是原始的样子? 哪些单词被遮掩成了[MASK]? 哪些单词被替换成了其他单词? 正是在这样一种高度不确定的情况下, 反倒逼着模型快速学习该token的分布式上下文的语义, 尽最大努力学习原始语言说话的样子!!! 同时因为原始文本中只有15%的token参与了MASK操作, 并不会破坏原语言的表达能力和语言规则!!!

7、fasttext的结构是什么样的?

fastText是一种基于cbow模型的新扩展,它会使用subword的信息,将每个词被表示成一个字符级n-gram词袋(a bag of character n-grams)。每个向量表示与每个字符级n-gram相关联,而词(word)则可以看成是这些n-gram向量表示的求和(sum)。

  1. n-gram:按照字节顺序进行大小为n的窗口滑动操作,形成n长度字节片段的序列;
  2. fasttext模型包括输入层,隐含层,输出层;输入是多个经向量表示的单词输出是分类任务,隐含层是对多个词向量的叠加平均
  3. 多层softmax线性多分类

8、bert的基本结构是什么样的?

       

9、卷积神经网络过拟合都采用了哪些策略?

    增加数据,dropout ,早停,正则化

10、dropout具体策略了解吗?

=============================================================================

1、置信度学习的具体过程是什么样的?

    样本通过模型后会有一个预测为每一个类别的概率;我们可以根据预测概率计算出预测为每一类的置信度;根据这个置信度,我们可以统计<真实标签,预测标签>个数,根据这个计数,我们可以得到一个混淆矩阵,最后可以根据这个混淆矩阵进行错误样本的剔除。

2、transform的结构是什么样的?

     embedding层(词嵌入+position位置向量)-> encoder(self-attention) -> 残差+LN(layer norm) ->ffnn(前馈神经网络)->残差+LN(layer norm)-> 词向量输出

3、为什么要引入位置向量,有什么好处?

    位置向量表示了序列的顺序信息,可能更好地表征序列。

4、为什么要引入残差?

    为了适应更深的网络模型,避免反向传播时,梯度消失

5、为什么要引入ffnn前馈神经网络?

     为了堆特征进行放缩,通过激活函数进行特征选择

6、激活函数有什么好处?

     进行特征的放缩

7、relu函数有什么好处,为什么要使用relu激活函数?

     可以有效地防止梯度消失,对特征进行选择

8、transform输出的是词向量,如何表示句子的?

      词向量的加权平均

9、要是句子长度不一样,K,Q,V是如何计算,具体怎么实现的?

      句子长度不一样,会有一个padding操作,padding的时候,短的进行补0操作,长的进行截断。

10、K,Q,V是怎么来的?

     初始化K,Q,V向量的权重向量,权重向量乘以词嵌入向量X,得到了最终的向量。

11、K,Q,V是怎么计算的,谁乘以谁的转置?

      K*Q表示 K和Q的内积,Q*(K的转置)     softmax(k*q/sqrt(d))*v

12、为什么要这么计算?

       Q*(K的转置)度量了词在某一位置的重要性,提高重要点的关注度。

13、transform的模型是怎么训练的?

    embedding层(词嵌入+position位置向量)-> encoder(self-attention) -> 残差+LN(layer norm) ->ffnn(前馈神经网络)->残差+LN(layer norm)-> 词向量输出->全连接层->logit->softmax得到每一类的概率->crossentry(得到的概率与真实标签计算交叉熵)作为损失函数->通过adam优化器优化loss,更新权重

14、有什么加速训练的方法?

       word2vec的层次softmax;和负采样

15、层次softmax是怎么计算的,怎么分类的,怎么实现加速的?

      层次softmax对词或者标签构建了一个哈夫曼树,频率出现大的标签和词需要计算的路径短;每个路径都是一个二分类;根节点代表了权重向量

16、负采样的具体过程是怎么样的?是怎么计算的,怎么实现加速的?

    出现频率大的词被采样的概率大,其一模型每次只需要更新采样的词的权重,不用更新所有的权重,那样会很慢,其二中心词其实只跟它周围的词有关系,位置离着很远的词没有关系,也没必要同时训练更新,作者这点非常聪明。

17、transform的encoder输出的是什么?

    K,Q,V,向量

18、albert和bert的区别?

    主要有3点,1)因式分解  2)权重共享 3)预训练任务nsp,sop

19、albert和bert的推理速度一样吗?

  相同网络层次的两类模型相差不大,albert较bert慢

20、albert为什么要因式分解?

   减少参数量

21、gdbt的损失函数是怎样的?

 方差,交叉熵等

22、有哪些东西可以实现gdbt

sklearn,libgbm,sparklibm ,tf

23、gdbt是如何优化的,每次优化的是什么?

如果是方差损失函数,优化的是上个模型的残差,如果是其他函数,优化的是损失函数的一阶导数

24、你用的gdbt用的是什么损失函数?

均方差

25、gdbt和RF 有什么区别?

gdbt是梯度提升树,每次优化的是上棵树的损失,降低的是偏差;RF是基于bagging思想的,每次有放回地对样本和特征进行采样,通过多棵树同时决策,降低的是方差。

 

============================================================================

编程题汇总

1、[[1,2,3],[4,5],[6]]矩阵A 的组合方式

     输出: [[1,4,6],[2,4,6],[3,4,6],[1,5,6],[2,5,6],[3,5,6]]     

===========================================================================================

1、给定一个矩阵a,并且给定矩阵的起始位置(x,y);顺时针打印矩阵

2、给定一个数组a,找出数组的的连续子序列和最小的值,及输出其开始位置和结束位置

============================================================================

算法题:

1、一个排序好的数组,里面包含重复数字,如何在O(n)不用辅助空间的情况下把重复数字移动数组的后面?
eg: [1,1,2,2,3,3,4,4,5,6,7,8]  变为  [1,2,3,4,5,6,7,8,1,2,3,4]

 

2、给定一排序数组,查找数组中第一次出现的位置
eg : [1,1,2,2,3,3,4,4,5,6,7,8] 查找2,则返回2

二分法

================================================================================

算法题

1、不用递归,二叉树的中序遍历实现?

2、链表的反转?

3、二叉树叶子节点的统计?

==================================================================================

5、顺时针螺旋打印

def printMtrix(n):
    #生成矩阵
    a=[]
    for i in range(n):
        t=[]
        for j in range(n):
            t.append(i*n+j+1)
        a.append(t)
    print(a)
    #打印矩阵
    
    r_s,r_e=0,n-1
    c_s,c_e=0,n-1
    
    r=[]
    
    while(r_s<=r_e):
        #从左望右
        for i in range(c_s,c_e+1):
            r.append(a[r_s][i])
        r_s+=1
        #从上往下
        
        for j in range(r_s,r_e+1):
            r.append(a[j][c_e])
        c_e-=1
        #从右往左
        
        for i in range(c_e,c_s-1,-1):
            r.append(a[r_e][i])
        r_e-=1
            
       #从上往下
        for j in range(r_e,r_s-1,-1):
            r.append(a[j][c_s])
        c_s+=1
    return r
            
print(printMtrix(4) )

================================================================================================

给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。

'''
case:
[2, 1, 3, 8, 4, 2] => [3, 3, 8, -1, 8, 3]

code:
'''


def f(a):
    r=[]
    for i in range(len(a)):
        b=a[i:]+a[0:i]
        j=0
        while ja[i]):
               r.append(b[j])
                    break
             j+=1
        if j==len(a):
              r.append(-1)
    return r




def find(a):
    l,r=-1,-1
    position={}
    for j in range(len(10)):
        for i in a[::-1]:
            if i==j:
                position[j]=i
                break
            else:
                position[j]=-1
    
    for i in range(10,-1,-1):
        for j in range(len(a)):
            if(a[j]

在a中寻找包含b的最短子串,b是无序的  (我感觉我有点没听懂题目)

类似的参考 https://www.cnblogs.com/huangwei1024/archive/2012/09/28/min-len-substring.html

 

 

其他人总结的网址
https://andy1314chen.github.io/2017/11/03/%E6%9C%BA%E5%99%A8%E5%AD%A6%E4%B9%A0%E9%9D%A2%E8%AF%95%E6%80%BB%E7%BB%93/   (机器学习面试题汇总)

https://andy1314chen.github.io/2017/11/05/%E6%B5%B7%E9%87%8F%E6%95%B0%E6%8D%AE%E5%A4%84%E7%90%86%E9%9D%A2%E8%AF%95%E9%97%AE%E9%A2%98%E6%80%BB%E7%BB%93/ (海量数据处理问题总结)

https://andy1314chen.github.io/2017/11/03/%E5%90%84%E7%A7%8D%E6%8E%92%E5%BA%8F%E6%96%B9%E6%B3%95%E6%80%BB%E7%BB%93/ (排序总结)

https://blog.csdn.net/brucewong0516/article/details/78700402 (GBDT总结)

https://github.com/laddie132/NLP-Interview (NLP知识点,无答案)

https://blog.csdn.net/qawsedrf123lala/article/details/105899126 (统计方法论)

https://blog.csdn.net/qawsedrf123lala/article/details/107997088 (NLP)

https://blog.csdn.net/liujian20150808/article/details/105215861 (transform相关问题集合)

https://blog.csdn.net/u011428210/article/details/106421690?utm_medium=distribute.pc_feed_404.none-task-blog-BlogCommendFromMachineLearnPai2-15.nonecase&depth_1-utm_source=distribute.pc_feed_404.none-task-blog-BlogCommendFromMachineLearnPai2-15.nonecas (别人的NLP面试题,包括HMM,fasttext,bert)

https://blog.csdn.net/qq_34333481/article/details/85012666?utm_medium=distribute.pc_feed_404.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_feed_404.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecas (传统自然语言处理)

https://blog.csdn.net/qq_16949707/article/details/106113926?utm_medium=distribute.pc_feed_404.none-task-blog-BlogCommendFromMachineLearnPai2-16.nonecase&depth_1-utm_source=distribute.pc_feed_404.none-task-blog-BlogCommendFromMachineLearnPai2-16.nonecas (词向量,ner, transform常问问题)

刷题之路:

https://blog.csdn.net/qq_32384313/article/details/90745354 (感觉这个是按顺序的)

https://blog.csdn.net/weixin_38118016/article/details/90761111  (面试高频题汇总,动态规划占比太大了)

 

你可能感兴趣的:(面试题汇总,机器学习)