面经

面试分享(1)——算法工程师(NLP方向)

将每一次面试的题目做一个记录,包括回答的以及当时没有回答出来的,如有错误,欢迎各位大佬批评指正

Q1:说一下快速排序。
A1:首先快排是选择排序的一种,适合用于无序数组的排序。其思想是选择一个数字作为“标志”,将小于这个“标志”的数字置于“标志”之前,大于“标志”的数字置于“标志”之后,这样将一组数分为两部分,对这两部分分别重复如上操作,一直递归,直到数组为空或者只包含一个数。

Q2:如果我有一万个数,如何选择这个“标志”?
A2:首先将这一万个数切分为100个batch,在这100个batch中分别选择一个“标志”,再从这100个“标志”中选择中间的“标志”做为最后选择的“标志”。

Q3:说一下线程和进程的区别。
A3:进程是抢夺计算机CPU等资源分配的基本单位。他是程序执行时的一个实例,比如我们开启一个应用,便是创建了一个进程。
线程是程序执行时的最小单位,一个进程可以包含多个线程,线程之间可以共享进程的所有资源。
线程和进程的区别:进程是计算机资源分配的最小单位;线程是程序运行的最小单位。
进程在计算机内有自己独立的地址空间;线程共享进程的地址和资源,因此计算机打开一个进程的花销要比打开一个线程的花销大
进程之间的通信需要通过通信协议,而线程数据共享,因此不需要通信协议
进程有自己独立的空间,因此一个进程的死亡对其他进程无影响;而一个线程的死亡会导致进程的死亡

Q4:说一下SVM和LR的区别
A4:SVM(支持向量机):SVM的目的是寻找一个超平面(WTx+b = 0),使得“支持向量”距离超平面的间隔最大。
max r = 2/||WT||——>min ||WT||2——>min ||WT||2/2
LR(逻辑回归):线性回归的输出是连续的值,LR通过加一个非线性函数(logistics函数),将线性回归的输出转为概率值
区别:1. SVM一个很大的优势就是他可以使用核函数,可以将数据从原始特征空间映射到高维特征空间
2.对于数据量小的样本,SVM的计算速度更快,LR的准确率更高;对于大规模样本,SVM的计算复杂度明显下降,此时LR的效果会更好
3.SVM的损失函数自带正则,这也是为什么SVM算法是结构风险(在训练误差和模型复杂度之间寻求平衡,防止过拟合,从而达到真实误差的最小化)最小化算法的原因;LR必须另外再加正则项

Q5:SVM和LR哪一个抗噪音能力更强?为什么?
A5:SVM的抗噪音能力更强,根据他们的定义方式可以知道,LR考虑的是全部的数据点,而SVM只考虑超平面附近的数据点,抗噪音能力更强。

Q6:在极端情况下,使用SVM,所有的噪音数据全部分布在超平面周围,这时候SVM如何处理
A6:个人认为可以对两类样本点分别使用统计规则,对样本点进行重排

Q7:说一下为什么现在的激活函数都选择relu而不选择sigmoid函数
A7:通过这两个函数的曲线可以看到,sigmoid函数将数据压缩到0-1之间,但是当x的取值逐渐增大时,sigmoid函数会出现梯度消失的情况;而relu函数的曲线是:当X<0时,将所有的值置为0;当X>0,relu函数的曲线是一条一次函数曲线,这样有效避免了梯度消失的问题。

Q8:对于relu函数的曲线,我们可以看到曲线在X=0处有一个转折点,在这个点处,函数无法求导,该如何处理
A8:对于这个点,可以人为规定,比如将其规定为0或者规定一个可导函数(个人看法,如有错误或者更好的方法,望大佬不吝赐教)

Q9:对于不同的模型,如何选择他们的损失函数
A9:对于回归任务,我们一般选择的损失函数为均方误差;对于分类任务,我们选择的损失函数为交叉熵

Q10:你对bert了解么?简单说一下
A10:由于之前看了一点bert的东西,但是没看太深入,而且bert的内容较多,这块先不给出我的看法,后续会更新博客专门介绍bert和transformer

Q11:说一下SVM中软间隔和硬间隔的区别
A11:硬间隔是指对于线性可分的数据,可以找到一个超平面将数据分开。软间隔是指当数据并不是完全线性可分时,存在少量样本点使得数据不是线性可分,此时加入软间隔,放松对超平面约束的要求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值