k近邻算法的k值怎么选择
具体做法是让k从1开始取值直到取到你认为合适的上限(一般来说这个上限不会太大,这里我们选取上限为8),对每一个k值进行聚类并且记下对于的SSE(误差平方和),然后画出k和SSE的关系图(毫无疑问是手肘形),最后选取肘部对应的k作为我们的最佳聚类数
bagging、boosting
1.bagging是并行的,boosting是串行的
2.Bagging:通过Booststrap sampling(有放回的均匀抽样)的方式从训练集中出去数据训练各个弱分类器。
3.(1)Bootstrap sampling方法:每当选中一个元组,这个元组同样也可能再次被选中并再次添加到训练集中。(2) Boosting:各个弱分类器的训练集不是独立的,每一个弱分类器的训练集都是其上一个弱分类器的学习结果,根据错误率进行取样(给予训练样本不同的权值)。
4.Bagging:每个分类器都赋予相同的权重。Boosting:每个分类器的权重是不同的,分类误差小的分类器将获得更大的权重
5.Bagging:从原始数据集中每一轮有放回地抽取训练集,训练得到k个弱学习器,将这k个弱学习器以投票的方式得到最终的分类结果。Boosting:每一轮根据上一轮的分类结果动态调整每个样本在分类器中的权重,训练得到k个弱分类器,他们都有各自的权重,通过加权组合的方式得到最终的分类结果
https://www.cnblogs.com/hugechuanqi/p/10554156.html
简单介绍一下BERT?
- 简单介绍一下BERT?
BERT:(双向编码器表征) Bidirectional Encoder Representation from Transformers
首先BERT是一个无监督学习的模型,本质是一个denoised auto encoding(去噪自动编码)模型;其次它的主要架构和transformers的encoder部分相同;主要贡献点在于Bidirectional,传统的预训练基本思想都是language model,只能看到一端的信息【就算是Elmo看似用了两端信息,但是也是分别学习再拼接的】,这限制了与训练模型的表达能力;
为了实现Bidirectional的学习,提出了masked language mode(MLM);
为了实现text-pair(文本对)的学习,利用了next sentence prediction;
next sentence prediction是什么?
为了学习到sentence pair对之间的关系,方便应用到下游任务,所以提出来了NSP任务。同时输入两个句子,50%的概率sentence2是sentence1的下文,50%的概率不是。
masked language model 是什么?
这就是在上个问题回答完之后留的气口儿,也是BERT的核心,大部分面试官会接着上个问题继续提出来这个问题的。
我们前面提到BERT本质是一个denoised auto encoding模型,就是因为这个mask,相当于增加了一些noise。
bert的具体网络结构,以及训练过程,bert为什么火,它在什么的基础上改进了些什么?
传统的language model是直接根据上文预测下一个词,这里利用了双向信息,根据上下文去预测当前的词;
mask掉15%的词去训练模型;
bert是用了transformer的encoder侧的网络,作为一个文本编码器,使用大规模数据进行预训练,预训练使用两个loss,一个是mask LM,遮蔽掉源端的一些字(可能会被问到mask的具体做法,15%概率mask词,这其中80%用[mask]替换,10%随机替换一个其他字,10%不替换,至于为什么这么做,那就得问问BERT的作者了{捂脸}),然后根据上下文去预测这些字,一个是next sentence,判断两个句子是否在文章中互为上下句,然后使用了大规模的语料去预训练。在它之前是GPT,GPT是一个单向语言模型的预训练过程(它和gpt的区别就是bert为啥叫双向 bi-directional),更适用于文本生成,通过前文去预测当前的字。下图为transformer的结构,bert的网络结构则用了左边的encoder。
transformer attention的时候为啥要除以根号D
softmax如果某个输入太大的话就会使得权重太接近于1,梯度很小
如何优化BERT效果:
1 感觉最有效的方式还是数据。
2 把现有的大模型ERNIE_2.0_large, Roberta,roberta_wwm_ext_large、roberta-pair-large等进行ensemble,然后蒸馏原始的bert模型,这是能有效提高的,只是操作代价比较大。
3 BERT上面加一些网络结构,比如attention,rcnn等,让模型更加复杂,效果略好,计算时间略增加。
4 改进预训练,在特定规模的领域进行预训练
5 文本对抗,作者了解的不多。感兴趣可以看看
self-attention相比lstm优点是什么?
bert通过使用self-attention + position embedding对序列进行编码,lstm的计算过程是从左到右从上到下(如果是多层lstm的话),后一个时间节点的emb需要等前面的算完,而bert这种方式相当于并行计算,虽然模型复杂了很多,速度其实差不多
(一句话概括就是,bert是并行的,速度可能更快)
BERT的优缺点分别是什么?
优点(即重复一遍提出BERT的原因):真正的学到了bidirectional的信息,在下游任务上表现很好,事实也证明双向信息很重要。
缺点:只mask掉15%的单词,所以在训练时收敛速度很慢;
inference和train阶段的任务有所偏差,毕竟inference时,不带有[mask]这个词;【但其实也可以解释,因为当数据量足够时,一个词虽然被mask掉,但在别的数据中存在,所以仍然能很好的学到被mask掉的这个词的特征】
Positional embedding就相当于手动给每个字符加上了位置信息
举个例子。如果没有positional embedding,那么Transformer对于语句"我吃苹果“和”苹果吃我“,在对“吃”编码时所看到的信息是等价的,它会把两个句子看成一样的意义。而在LSTM中,单词是按照时序信息一个一个输入的,就不会有这种问题。所以,
Positional embedding就相当于手动给每个字符加上了位置信息。
self-attention 跟attention的区别
自注意力机制是注意力机制的变体,其减少了对外部信息的依赖,更擅长捕捉数据或特征的内部相关性。
自注意力机制在文本中的应用,主要是通过计算单词间的互相影响,来解决长距离依赖问题
pytorch中的随机种子是啥意思?
在机器学习,深度学习算法中,我们往往会用到随机向量,随机矩阵,这使得我们每次运行算法计算出来的结果是不一致的,会为我们调试算法带来麻烦。
基于随机种子来实现代码中的随机方法,能够 保证多次运行此段代码能够得到完全一样的结果,即保证结果的可复现性,这样 别人跑你的代码的时候也能够很好地复现出你的结果。
epoch,iter,batchsize都代表什么意思
epoch 将所有训练数据集跑一次
iter 将batchsize跑一次
batchsize是批量大小,就比如在训练物体检测模型(有2700张图像)时设置batchsize=16,即每次训练的样本量是16,将所有图像训练一遍epoch=1,此时的iter=2700/16=168次
为什么transformer比RNN和LSTM更好?
1.非顺序的:句子是整体处理的,而不是逐字处理。也可以理解为并行的
2.self attention:这是新引入的“单位”,用于计算句子中单词之间的相似性得分。计算两两单词之间的相似度
3.位置嵌入:引入了另一种替代复发的创新。这个想法是使用固定或学习的权重,该权重对与句子中标记的特定位置有关的信息进行编码。
XGB对比传统GBDT的优点
1.传统GBDT在优化时只用到一阶导数信息,xgboost则对代价函数进行了二阶泰勒展开
2.xgboost在代价函数里加入了正则项,用于控制模型的复杂度
3.对缺失值的处理。对于特征的值有缺失的样本,xgboost可以自动学习出它的分裂方向
4.xgboost工具支持并行