2019-09-06bigo面试

1、说一下doc2vec是怎么做的
2、数组超过一半的数字
3、logloss为什么不用mse?
4、说一下协同过滤,推荐系统
5、层级softmax和softmax精度差别
6、spark的知识要准备一下
小米:
1、FM,怎么做的矩阵分解,介绍一下

链接:https://www.nowcoder.com/discuss/244739?type=all&order=time&pos=&page=1

有什么面试有疑惑的问题可以提问呀,一起讨论。有理解错的地方请一定帮我指出来呀
这些问题适合于非科班机器学习转行,其中有些题目可能被问到,做个记录。主要适合机器学习方向,nlp方向可以去学习bert,cv有另一些知识的,这些要单独去学习,楼主也不会,这里主要分享一些机器学习方向比较基础的问题。
先占个坑
问题预览
1数据量比较大的时候,svm和lr哪个更快
2线性回归和逻辑回归的损失函数区别
l1 l2问题
3rf和gbdt的思想区别
等等

1数据量比较大的时候,svm和lr哪个更快?
如果对工程有一些了解,知道数据量很大的时候经常用lr当baseline,那么就能猜到答案,但面试的时候显然不能直接猜答案的。只是,为什么lr比svm快呢。
首先要明白的是,这两个模型从理论上看训练速度都非常快才对,只是快的原因不一样,实际是这样吗?
svm寻找分类最大间隔,通过引入原函数的对偶形式,将原问题的w,b转化为对偶乘子α的求解。从形式上看,α为0对应了非支持向量,那么样本不起作用,α>0,才对应了支持向量,又由于支持向量是很稀疏的,那么要优化的α很少才对,因为svm只考虑边界点,那么就一点点乘子的优化看起来应该是训练速度很快?但实际上,在初始状态,学习器是不知道那些样本是支持向量的。smo算法每次选一对乘子优化,固定其他乘子,是一个二次规划问题,选择乘子也是启发式算法,这一步也导致了整个凸优化的svm寻解过程了变成了近凸优化,在乘子的选择上由于初始不知道那些是支持向量,所以乘子不好选择(启发式方法选的是违背kkt条件最大的一对点),实际上你还得去训练那些非支持向量的数据,速度提不起来。最重要的是,虽然,smo算法挺不错,但是这一步怎么并行啊,每次固定了其他乘子优化一对乘子,那就不能并行了呀,整个流程成了一个串行操作,这和gbdt的串行没有区别,xgb的并行不也老老实实一棵树一棵树的训练(类别n>2的gbdt分类可以并行做到n棵树n棵树的训练)。
而且,svm用都用了,不给整个核函数吗?这又是一步较为耗时的操作。

lr就不同了,同样是凸优化的模型,lr只有一个线性组合和sigmoid,梯度下降时,每个样本训练复杂度也就和样本特征维数有关,复杂度是线性的。最为关键的是,lr可以做到样本的并行和w求解的并行。矩阵运算是可以拆解的,AB看作A对B的行操作,也可以看作B对A的列操作,这样矩阵的运算就可以分解为独立的向量操作,轻松实现并行化。另外,lr也可以对数据进行切分后并行化操作,但主要应该还是梯度下降的并行,lr的实际训练速度要比看起来快很多。

2、线性回归和逻辑回归的损失

以前每当问到为什么不用逻辑回归或者逻辑回归的损失函数这一类时,总回答不好。作为一个笔试型选手,有时候表达不出来对的意思,情商不高?问逻辑回归的损失函数,我就答极大似然函数或者logloss。然后面试官问:还有呢?我说没了。然后就没了。

后来有一位面试官问我线性回归和逻辑回归损失函数的对比,我才明白之前的问题没那么简单。。。恰逢我同学也被问道了,决定总结一下。

线性回归用平方损失,逻辑回归用logloss损失,but why?为什么线性回归不用logloss损失,逻辑回归不用平方损失呢?

线性回归当然可以用logloss,逻辑回归也可以用平方损失,甚至只要你喜欢,加啥损失都行,光滑的不光滑的,都可以,只要当y的预测接近y的时候损失函数比较小,远离y则比较大就可以。甚至对于不可导的损失函数,也可以用次梯度优化、坐标下降法等方法进行优化,优化过程只要保证向损失函数减小的方向,优化方法的改变主要改变的就是训练的速度(当然对最终的解也会有轻微影响),特别是凸函数,最终总能收敛到全局最优点。只不过默认线性回归的平方损失和逻辑回归的logloss损失有额外好处。

最大的原因可能是凸性的要求,对于线性回归,使用平方损失,那么整个过程是一个凸优化的过程,可以保证收敛的情况比较好,证明过程的话求一下hessian矩阵看一下正不正定就可以。而逻辑回归,使用logloss是凸函数,使用平方损失则不是凸函数了,容易收敛到局部最优解,证明方法同样可以通过hessian矩阵来。

另外,对线性回归,使用平方损失,那么整个过程等效于参数在正态分布下的极大似然估计。(又多了一点好处,有兴趣的可以看一看线性回归,岭回归,LASSO对应的参数分布假设,算了过几天查查资料推一下吧)。。而且,线性回归在平方损失约束下,都不需要求导,直接使用矩阵的广义逆带进去,求的就是最小二乘解,也就是全局最优解。非常有意思,在平方损失约束下,线性回归求解简单,一步到位,而且还具有物理意义。

那么逻辑回归这个分类模型呢,他用logloss的原因是不是也是类似呢。是的,logloss在逻辑回归里,也是最大似然估计的形式,也是凸优化过程。不仅如此,还是最大熵模型的等价形式(知道这个结论就好,不熟不要挖坑),除此除此之外,还有好处。

交叉熵p(x)log(1/q(x)) 提一个负号,p(x)是y,q(x)是预测的y,即f(x),这不就是logloss损失ylog(f(x))。f是对x线性组合后的sigmoid函数。那么用logloss就是在优化交叉熵,so 那又如何?

相对熵,又叫KL散度,形式是p(x)log(p(x)/q(x))。展开后是p(x)log(p(x))-p(x)log(q(x)),相对熵的作用就是用来衡量两个分布的差异性,即p(x)==q(x),相对熵为0最小。在机器学习里,我们首先特征工程,实际上是一个假设空间,我们认为假设空间存在一组解,利用这组解得到最真实的预测情况。首先,这个假设空间的最优解是个固定的分布,优化的过程就是去逼近这个分布,换句话说,p(x)在作为y的真实分布,这里是定分布,而q(x)是我们学习器学出来的,是我们的猜测分布。由于我们要对交叉熵,也就是logloss求导,他等价与对相对熵求导,因为p(x)log(p(x))求导的时候为0没了,剩下的右边就是相对熵。所以我们优化交叉熵就是在优化相对熵,成了。

那么优化相对熵有啥好处,p(x)是真实y分布,q(x)是猜测的分布,我们优化相对熵就是在让两个分布一致,即f(x)作为预测结果更加接近真实的y,物理意义成了。

来了蘑菇街大楼,环境真不错呀,就是冷气太足了不太好,继续更

三逻辑回归是分类还是回归

搜一些资料,经常可以搜到,逻辑回归是广义线性回归,所以是回归,用来处理分类任务。逻辑回归还叫对数几率回归,but why?

在学习这玩意的时候,我们往往会说,一个线性组合,套个sigmoid,就是lr。没错,为什么套sigmiod啊?因为sigmoid光滑,因为sigmoid有概率意义,因为sigmoid+logloss凸。原本神经递质的神经元是01函数,这个函数不太行咱们用sigmoid替代他。说的倒也对,不过光滑的激活函数很多,未必不存在具有更好性质的激活函数呀。

先回答为啥lr是对数几率回归吧。(手机公式好累我擦)

p(y|x)=p(x|y)p(y)/p(x)=p(x|y)p(y)/(p(x|y)p(y)+p(x|1-y)p(1-y))=1/(1+p(x|1-y)p(1-y)/p(x|y)p(y))然后假设类别作为条件的条件概率是同协方差的高斯分布就可以了。等下,手机真推不动了,回去再推。这已经看见sigmoid雏形了。

我搜了搜,知乎有相关推导,可以先看一看

https://www.zhihu.com/question/41647192

后天回成都补全

放弃了网易互联网二面。电脑断电了,哎。。无缘呀
四 为什么l1范数更稀疏
这个问题看到了,很多人脑海中肯定有个图,一个菱形交一个圆,容易交在坐标轴上,所以稀疏。l2是两个圆,交在一起容易交在外面。所以参数偏小。
l1范数是菱形约束,在这个菱形的边上,各个点的范数损失一样大,他和原函数平方损失的切点为最优点,而原函数用了平方损失,那么就是以均值为中心的高斯分布,是个圆或者说椭圆。l2是圆形约束,和原函数平方损失组合一起,就是两个圆相切,注意不是相交是相切的那个点。
另一种有趣的解释是l1梯度向0跑,右边-1左边+1,两边都朝着0收敛,但是l1梯度绝对值一直是1,所以容易收敛到0不动,l2越靠近0梯度绝对值越小,容易到0附近不动。
本质上,lasso模型实际上假设了w参数服从拉普拉斯分布,岭回归则是高斯分布。
待补公式
拉普拉斯分布的图像就是在0处有一个高高的凸起,所以从概率上讲,假设w服从拉普拉斯分布,那么最终落在0上的概率很大。假设是高斯分布,那么落在0周围的概率很大,因为高斯分布就是容易落在均值附近。
机器学习里有一个奥卡姆剃刀准则(哲学emm),就是能简单就不要搞复杂。正则化其实就是让模型变得简单。l1正则的作用就是让部分参数不起作用,部分参数为0。理论上l0正则更适合作稀疏性的工作,但l0是个np难问题,就是多项式时间内解决不出来,需要近似于穷举的问题。l1作为弟弟替代品,代替l0行使权力,让模型因为稀疏而简单。l2范数是约束了某个特征不要作用太大,因为带平方这类函数都对异常点离群点敏感,l2约束就可以让w部分不要值太大,因为参数某个值太大就会让其他参数黯然失色,就好比一个百万富ong和9个学生,平均资产10万一样,不带l2范数,可能就会导致w里某个值过大,对训练数据拟合挺好,但是泛化不行的问题,l2就是让w的各个值的范围压缩到同一水平,所以值都比较小,大家一起起作用。

四从gbdt到xgb到lgb
gbdt是梯度提升树,又叫伪残差树。思想来自boost提升思想,构造相关的低方差基学习器去拟合偏差。残差树是通过真实值到预测值的残差作为下一棵树拟合方向。等下

你可能感兴趣的:(2019-09-06bigo面试)