秋招第一场面试就这么来了,之前休息的不好,太过紧张,发挥的不好,可能就凉了,还是多复盘总结吧,越挫越勇!!!
铺垫
部门:美团地图部/数据组
时间:周日下午四点
形式:远程面试(我必须吐槽一下,面试还是现场面吧,视频面的笔试太难做了吧= =)
面试体验:面试官人挺好的,主要还是以自己讲为主,他也没细问,然后就说我理解的不深入,题目做的不好,准备的差不多都没问,感觉凉了~
问题&答案
-
让我自己讲我的所有实习经历和项目经历,然后他也没有细问,他总结了以下,就完了。
-
介绍一下word2vec
-
word2vec是词向量的求解模型,输入:大量已分好词的文本,输出:用一个稠密向量表示每一个词
-
word2Vec就是简化的神经网络模型:
输入的是one-hot vector,隐藏层是没有激活函数,即线性单元,输出层和输入层维度相同,使用的是softmax回归;损失函数是交叉熵(对数)损失函数;我们为每个词获取的稠密向量,其实就是从输入层到隐藏层的权重。
其中,softmax函数如下:
s o f t m a x ( x ) = e x ∑ i N e x i softmax(x) = \frac{e^x}{\sum_{i}^{N}e^{x_i}} softmax(x)=∑iNexiex
交叉熵损失函数如下:
H ( p , q ) = − ∑ x p ( x ) l o g q ( x ) H(p,q)=-\sum_{x}p(x)logq(x) H(p,q)=−x∑p(x)logq(x) -
CBOW和skip-garm的区别:
CBOW是输入某个特征词的上下文相关的词对应的词向量,输出就是这个特定词的词向量,即先验概率;skip garm输入的特定的一个词的词向量,输出是特定词对应的上下文的词向量,即后验概率。 -
CBOW和skip-garm的应用场景:CBOW对小型数据库比较合适,而Skip-Gram在大型语料中表现更好。
-
两种高效的训练方法:负采样(negative sampling)和层序softmax(hierarchical softmax)
- 负采样(negative sampling)
将语料中的一个词串的中心词替换为别的词,构造预料D中不存在的词串作为副样本。此种策略下,优化目标变为:较大化正样本的概率,同时最小化副样本的概率。 - 层序softmax(hierarchical softmax)
是一种对输出层进行优化的策略。原始模型的输出层利用softmax计算概率值,层序softmax改为了利用Huffman树计算概率值。一开始我们可以用以词表中的全部词作为叶子节点,词频作为节点的权,构建Huffman树,作为输出。从根节点出发,到达指定叶子节点的路径是概率值。Hierarchical Softmax正是利用这条路径来计算指定词的概率,而非用softmax来计算。
- 负采样(negative sampling)
-
为了更好的理解,请看以下博文:
https://www.jianshu.com/p/d6a0aec6e9a1
https://www.cnblogs.com/zhangyang520/p/10969975.html -
-
GDBT和RF区别
相同点:都是由多棵树组成,结果由多棵树共同决定。
不同点:- GBDT是回归树,RF可以是回归树也可以是分类树;
- GBDT对异常值特别敏感,RF则没有;
- GBDT只能串行生成多个模型,RF可以并行;
- GBDT的结果有多个结果求和或者加权求和,RF是由投票选出结果;
- GBDT是通过减少偏差来提高模型性能,RF是通过减少方差;
- RF对所有训练集一视同仁,GBDT是基于权值的弱分类器。
-
lightgbm和xgboost的区别
- 树的切分策略不同:
- xgb基于level-wise,对每一层节点进行无差别分裂,造成不必要的开销;
- lgb基于leaf-wise,在当前所有叶子节点中选择分裂增益最大的节点进行分裂;
实现并行方式不同:
- xgb使用基于 pre-sorted 决策树算法;
lgb使用基于histogram决策树算法,对离散特征进行分裂时,特征的每个取值为一个桶; - lgb支持直接输入categorical feature,对类别特征无须进行one-hot处理;
- 优化通信代价不同:lgb支持特征并行、数据并行。
- 树的切分策略不同:
-
SVM介绍一下?为什么可以使用对偶来求解原始问题?
- 凸二次规划问题:基本目标是二次函数,约束条件是线性的这种优化问题被称为凸二次优化问题,应有对偶问题求解更高效;
- 满足KKT条件下,对偶问题和原始问题的解是完全等价的。
-
核函数了解吗?有几种核函数?核函数解决什么问题?我说核函数解决了当前特征空间中样本不可分的问题,他说只要是样本不可分就用核函数吗?
- 核函数的作用:当样本在原始空间线性不可分时,通过核函数将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分。
- 核函数的种类:
- 当然不是。在样本近似可分时,我们可以使用软间隔最大化来求解一个线性SVM分类器。
-
LR说一下?
没啥可说的,最讨厌面试官问我这种问题了= =。 -
介绍一种你熟悉的深度学习网络,我说的LSTM,说完之后他说你GRU了解吗?
- LSTM的出现解决了DNN什么问题?
时序反向传播算法按照时间的逆序将错误信息一步步地往前传递。当每个时序训练数据的长度 T 较大或者时刻 t 较小时,损失函数关于 t 时刻隐藏层变量的梯度比较容易出现消失或爆炸的问题(也称长期依赖问题)。 - LSTM 的主要思想是:门控单元以及线性连接的引入
- 门控单元:有选择性的保存和输出历史信息;
- 线性连接:如下图中的水平线可以看作是 LSTM 的“主干道”,通过加法,Ct−1 可以无障碍的在这条主干道上传递,因此 LSTM 可以更好地捕捉时序数据中间隔较大的依赖关系。
- LSTM流程(会推导)
- LSTM的出现解决了DNN什么问题?
-
代码题:
题目描述:牛牛手里有一个字符串A,羊羊的手里有一个字符串B,B的长度大于等于A,所以牛牛想把A串变得和B串一样长,这样羊羊就愿意和牛牛一起玩了。而且A的长度增加到和B串一样长的时候,对应的每一位相等的越多,羊羊就越喜欢。比如"abc"和"abd"对应相等的位数为2,为前两位。牛牛可以在A的开头或者结尾添加任意字符,使得长度和B一样。现在问牛牛对A串添加完字符之后,不相等的位数最少有多少位?
输入描述: 第一行为字符串A,第二行为字符串B,A的长度小于等于B的长度,B的长度小于等于50.字符均为小写字母。
输出描述: 输出一个整数表示A串添加完字符之后,不相等的位数最少有多少位?
输入例子: abe cabc
输出例子: 1
import java.util.*;
public class MinDiff{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String s1 = in.nextLine();
String s2 = in.nextLine();
int maxlen = 0;
for(int i=0; i<=s2.length()-s1.length(); i++) {
int count = 0;
for(int j=0; j<s1.length(); j++) {
if(s1.charAt(j) == s2.charAt(i+j)) {
count++;
}
}
maxlen = Math.max(maxlen, count);
}
System.out.println(s1.length() - maxlen);
}
}