卷友们好,我是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),备注工作/研究方向+加群目的。
阅读至此了,分享、点赞、在看三选一吧🙏