面试锦囊之面经分享系列,持续更新中
赶紧后台回复"面试"加入讨论组交流吧
本人基本情况:211本硕,本科电子信息工程,硕士通信与信息系统,典型的非科班,无论文,两段实习经历(均为算法岗,非大厂,一段CV,一段NLP)。
⛳ 百度——推荐策略部—算法工程师(已offer)
⛳ 阿里——阿里云智能事业群—机器学习(已offer)
⛳ 腾讯——互动娱乐事业群IEG—机器学习(已offer)
技术面共四轮(其中一轮交叉面),HR面试一轮。
未预约,直接打来电话面试。(1h 40min,代码给了非常久的时间,笔者C++代码写了上百行)
在介绍项目时穿插提问了很多经典问题:过拟合(笔者回答了Early stop, Dropout, 正则化等技术的原理以及个人理解),梯度消失(笔者从初始化和Normalization两个角度回答),学习率调整策略等
笔者从Over smoothing,梯度消失等方面回答
3. C++中的内存泄漏是怎么发生的?
4. 如何避免C++中发生内存泄漏?
5. 服务器上运行的服务已经发生了内存泄漏时如何处理让服务器恢复到正常状态?(这个真不会。。。)
6. 编程题:C++语言,在阿里伯乐在线测评系统上写代码
// 评测题目: 最少新建道路条数
// 已知有N个城市,城市编号1...N
// 已知M条路,每条路表示为(x_i, y_i), xy分别为城市编号
// 现在需要新建道路,确保任意两个城市之间,是可以通过一条或者多条道路联通
// 求解能够达到此目的的最小道路条数
// 思路:BFS或者DFS应该都可以找到城市簇即可。
介绍NLP项目的时候提问了了BERT等预训练模型的相关知识,以及Attention技术的相关知识。
三大角度:蒸馏,剪枝,量化。笔者分别介绍了三大角度的基本原理。还有一些零碎的知识:低秩分解,ALBERT中的参数共享,深度可分离卷积,Inception V3中的大卷积核替代方案等。
笔者从结构化剪枝与非结构化剪枝分别对应Lasso和Group Lasso的角度来回答,这也导致面试官引入了下一个问题。
笔者谈了YOLO,SSD,Fast R-CNN,由于笔者并未参与过与目标检测相关的项目,所以只了解一些经典算法。
笔者不光从欠采样过采样等经典解决办法的角度回答。另外回答了一些其他方法:GAN(ICCV 2019 best paper:SinGAN),特征空间增广,改进训练方式(源数据训练特征提取backbone,欠采样或过采样训练分类器),Loss加权,使用AdaGrad优化器等。。。
SGD,SGD with momentum,NSGD,AdaGrad,AdaDetla,RMSProp,ADAM,NADAM,RADAM+LookAhead等。
据笔者了解,阿里交叉面主要是为了防止作弊,挂人的可能性较小,但是不排除。
ELMo,BERT,Transforler-XL,XLNET,ERNIE,RoBERTa,ALBERT,ELECTRA。。。笔者从BERT的mask LM以及NSP任务出发讲解了BERT后续各大预训练的改进。
各大预训练语言模型可能不能从头到尾讲起,笔者线是介绍了BERT,然后从BERT的预训练任务出发,比如介绍了ERNIE中对mask LM的改进,ALBERT中将NSP任务替换为SOP任务等。。。
主要讲的是Transformer中Multi-Head Scaled Dot-Product Attention。注意,这里有一个Mask Attention机制,它对于Transformer Decoder和XLNet的实现原理非常重要,同学们如果了解相关知识点,一定要对这个Mask Attention知识点进行深入的理解。
笔者并无相关底层优化经验,所以回答:借助CNN底层计算原理,将多头变换展开为二维矩阵(填充大量0),将多头变换转为矩阵乘法运算。
重点介绍了学习率调整策略(固定step衰减,余弦衰减,余弦循环学习率等)
寻找最优学习率的方法(学习率从小到大观察Loss)
Warmup与优化器的搭配使用(笔者主要是谈Adam与Warmup的搭配使用,解释了Warmup的一些直觉上的理解,这个建议大家去看看知乎)
固定参数训练的相关经验(笔者回答了如何使用Pytorch和Tensorflow如何固定参数训练,主要讲代码怎么写的。。。)
模型陷入局部极小(或者鞍点)的处理办法(优化器选择,短时间增大学习率等方法)
深度可分离卷积,从参数数量以及计算量角度与传统卷积对比分析
宽度因子,分辨率因子
MobileNet与Xception以及ShuffleNet的对比
是否测试过MobileNet在不同计算设备上的运行速度?
数据结构:最大堆最小堆的概念,归并排序时间复杂度,稳定排序和非稳定排序,二叉搜索树的递归定义
总结:
阿里的考察非常全面,一二面考察偏重基础,四面考察偏重业务,交叉面比较简短。笔者为通信专业,非科班,这里要提醒非科班的同学一定要重视基础,尤其是数据结构,不能光刷题,要系统的仔细的学习这门课程!!!
笔者是提前批录取,无笔试,非内推,经历2轮技术面,一轮HR面。
笔者从直觉角度(特征聚合,特征变换)回答,这个角度与空域图卷积非常类似(实际上GCN有着充分的理论基础保证,所以还应该从谱图卷积的角度回答,详见问题5)
这里笔者结合近两年看过的GCN相关的论文,讲了一些关于GCN的改进
笔者仍然从Over smoothing,梯度消失等方面回答
谱图卷积——切比雪夫多项式近似频域卷积核——取一阶近似并对切比雪夫系数进行化简
这个问题是非常重要的,要从Transductive和Inductive的角度去解释GraphSAGE和GCN的本质区别。
笔者认为实际上GAT是早期的Attention技术中的Local Attention的一种特殊形式。
这两种算法都是源于Word2vec,Node2vec在Deepwalk的基础上添加了两个超参数用于控制随机游走的倾向(DFS和BFS)
笔者并无相关经验,不过笔者了解NLP中关于Word2Vec中采样的长尾分布问题,所以将这个问题类比到Deepwalk和Node2vec中。
这个是强化学习的问题,笔者只了解过一些经典强化学习算法,并未真正参与过相关项目。DQN使用一个NN代替Q-Learning中的Q表,Q-Learning无法处理某些状态空间S非常大的场景(Q表太大,无法存储和更新),所以使用神经网络代替Q表输出Q(s, a)。
总结:
笔者面试的腾讯游戏数据中心的复杂网络处理组,主要工作就是处理大规模社交网络图。腾讯的考察风格与阿里不同,腾讯考察内容几乎全部都是与Graph处理相关的,非常贴合实际业务,需要同学们对某一个方面有着非常细致深入的了解。
由于百度是3月份面试的,印象并不深刻,当是也并未做面经,这里笔者尽力回忆。
百度共三面,一二面为技术面,三面为部门主管面。
协同过滤(基于用户,基于内容),矩阵分解及其后续改进(PMF等,建议大家去搜索博客园刘建平老师整理的博客,言简意赅)
BPR(贝叶斯个性化排序)系列,CDL(基于MF架构引入自编码器提取item特征),CML(度量学习范畴),NCF,RRN(基于RNN建模用户历史偏好),基于强化学习的推荐算法等。
重点聊了推荐系统项目。笔者曾经参与过基于异质信息网络的推荐系统算法研究,对于该研究,面试官提出很多细节问题:
利用user,item,tag等信息构建异质信息网络,异质信息包含user,item,tag等
Deepwalk,Node2vec等Graph Embedding方法
笔者认为BPR能够利用大量的隐式反馈,这是最重要的。传统MF等方法只利用显示反馈,导致大量的Embedding更新不足。
不是技术面,就是谈谈职业规划,想来做什么样的工作的。。。
百度这边,由于是推荐策略部,考察推荐算法相关的内容多一些。
- END -
推荐阅读
斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用
太赞了!Springer面向公众开放电子书籍,附65本数学、编程、机器学习、深度学习、数据挖掘、数据科学等书籍链接及打包下载
数学之美中盛赞的 Michael Collins 教授,他的NLP课程要不要收藏?
模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法
关于AINLP
AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。