Py学习  »  机器学习算法

如果你是面试官,你怎么判断一个面试者的深度学习水平?

AINLP • 2 年前 • 236 次点击  

卷友们好,我是Giant。为了定期检测知识掌握度,有时候我会站在面试官的角度给自己提问、回答,模拟自我博弈。

下面我从4个角度总结了一些最基础的DL问题,可以帮助你在面试前查漏补缺,同时避免掉入面试官无意中挖的“坑”。

一、理论基础

基础篇(通用型)

1)了解前向传播反向传播,以及链式求导;例如给一个两层的MLP和简单的二维向量,能推导出 forward propagation,再用 chain rule 推导出 back propagation;

2)了解常见的损失函数,激活函数和优化算法,明白它们的区别优劣,例如 relu 相比 sigmoid 的优点在哪,Adam对于SGD做了哪些改进,交叉熵公式是什么;

3)了解常见的评价指标以及它们的区别,例如 accuracy,precision,recall,F1,AUC,混淆矩阵各自的公式;

4)有哪些防止过拟合的策略,至少3个以上;

5)了解梯度下降算法原理,准确指出梯度下降、随机梯度下降、批量梯度下降的区别;

6)如何合理的设置训练batch,是不是越大越好?

7)了解基础的神经网络,例如 MLP、CNN、RNN(GRU, LSTM)、Attention,基本各个子领域都会用到;

8)明白各个神经网络的优缺点是什么,例如 Attention相比CNN做了哪些改进,RNN为什么容易造成梯度消失&爆炸;

9)有哪些缓解数据分布不均匀的方法,至少3个以上;

10)了解基本的数据冷启动和数据增强策略;

以上列举的部分知识点,如果短时间内没答上超过1个,基础功可能还需要加强。

这里推荐两本工具书:

1)《深度学习500问》,书中按章节罗列了500多个深度学习高频问题,是一本不错的复盘工具书。

2)《百面深度学习,由Hulu的近30位算法研究员和算法工程师共同编写完成,在深度学习各个方向罗列了详细的知识点。

有需要的读者在公众号【NLP情报局 】后台回复【深度学习即可免费领取。

进阶篇(以NLP为例)

1)熟悉语言模型发展史(word2vec->ELMO->GPT->BERT->...),以及改进的优点;

2)熟悉word2vec,例如两种模型结构和优化技巧,与glove的差异;

3)熟悉BERT模型,例如2个预训练任务,3个Embedding层,主要缺点,如何做英文分词(BPE)等;

4)熟悉文本预处理方法和常见的特征提取策略;

5)能解释文本CNN使用平均/最大池化时,反向传播参数梯度如何更新;

6)能手推RNN计算公式以及参数量;

7)熟悉Transformer有哪些核心模块,Attention计算公式;

8)熟悉底层的分类、匹配任务,并掌握一些经典的神经网络模型;

9)如果做过实体抽取任务,至少熟悉CRF的原理与损失函数,与HMM的区别等;

实际面试中,面试官不会完全从答案是否正确来判断面试者的深度学习水平,有些问题甚至没有标准答案。

和面试官及时交流,反馈自己的思考过程也十分重要。

二、项目经验

这一小节主要针对手上还没有顶会论文的同学,项目经历将是面试中的考查重点,往往会占据至少一半的面试时间。

实验室项目、实习经历、算法比赛等都可以看作是项目。由于每个人的研究方向有差异,这一小节主要归纳一些共性问题。

1)做这个项目的动机以及最大亮点是什么?

2)自己负责了哪些具体任务?

3)项目中碰到最大的挑战是什么,最后如何克服的?

4)除了采用深度学习,有没有尝试其他解决方案,例如传统的机器学习算法?

5)项目最终的评测结果如何?是否部署上线?

通过上面几个问题,面试官基本可以摸清面试者在项目中的角色,是核心骨干还是浑水摸鱼,有创新价值还是仅仅跑了一遍开源代码。

如果我是面试官,会非常希望同学有基础的深度学习项目经验,最好熟悉完整的算法开发流程、GPU训练和服务器调用指令,这样可以帮助公司减少很多培训成本。

三、编程能力

面试中手撕代码是近几年技术岗的必备环节,甚至是面试通过与否的硬门槛之一,可以快速考查编程基本功。之前网上流传,pony马化腾每周还会在leetcode上刷一道编程题!

而考查的类型大致可以分为以下3种:

1)1-2道数据结构算法题,类似于leetcode;难度一般为medium,偶尔穿插easy和hard,考查的数据结构以二叉树、动态规划、数组、字符串、二分查找等为主;

2)用深度学习框架(TF、Keras、Pytorch等)实现一个简单的任务,要求定义类、损失函数、优化器、前向传播等,考查对框架的熟悉程度;

3)用Python或深度学习框架手推一个机器学习算法,例如KNN、KMeans、LR等。

四、行业认知

经过3个环节的考查,面试官已经基本掌握了你的深度学习水平。如果前面答的都不错,恭喜你离offer仅一步之遥了。

在某些公司的总监或boss面中,一般不会再问技术细节,但是会对全局认知能力再次考核。面试者是仅仅站在程序员的角度思考问题,还是会有更高层次的全局观、更长远的见解和规划。

而这种宏观认知,只需要询问几个问题:

1)该领域未来发展方向有哪些,会在哪发力?

2)目前的瓶颈或痛点在哪?

3)针对这些难点有没有好的思路?

面试就像是老师和学生们围坐在一起面对面探讨问题,大家依次发表自己的想法,最终老师会选出思路敏捷清晰、专业基础扎实的同学当课代表(发offer)。

上面列的问题并不全面,也没有面面俱到。大家可以参考这几个维度查漏补缺,注意和面试官的交流与反馈,最后offer就会属于你啦!

进技术交流群请添加AINLP小助手微信(id: ainlper)
请备注具体方向+所用到的相关技术点

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。


阅读至此了,分享、点赞、在看三选一吧🙏

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/121322
 
236 次点击