零、自我介绍
原则:面试官需要招聘的是基础知识扎实、有能力解决问题的、富有创造性的、同时又有一定沟通能力的人
一、套路:简单整体介绍项目,你的创新点是什么?项目中用到的某个网络或者某个技术你了解吗?这个项目你遇到了哪些困难、你是如何解决的?这个项目的评价标准是什么?最终达到什么样的性能?
----注意,项目在精,不在多。千万不要把自己曾经做过的大大小小的项目一股脑地全都放到简历上去,因为你简历上的每一个项目都有可能被面试官当成重点
宏观:
首先整体角度:在什么背景(Situation)下,为了解决什么问题(Target),采取了什么方法(Action),最后达到了什么效果(Result)
主干:
为什么用这个网络,网络结构和特点是什么,训练和测试的差别等进行回答。例如我其中的一个项目用到了一个检测网络SSD,那我就会从速度要求引出one_stage和two_stage的区别,因此使用较快的SSD。然后介绍其网络结构和其全卷积、先验框、多尺度的特点,最后解释测试时NMS的处理等等
细节:
画一棵树,树的主干是此项目所用的主要方法,分出的枝干是所有细节的技术,叶子又是细节技术所牵引出来的其他技术知识。一般也就是准备到两级问题就没基本可以了
评价:
你用的评价指标是什么,达到什么水平。例如我的一个项目用到了灵敏度、特异性、AUC,基本所有面试官都问了我这些指标的含义,如何计算,以及的方法达到了什么程度。
以及 创新点有哪些,和现有的方法好在哪些方面。在这个过程中遇到了哪些困难,你是如何解决的。(此问题尤为重要!)
总结:基本按照上述四点准备,项目经历这一块就没啥问题了。当然,还需要重复的一点是语气!语气!语气!决定了说服力,哪怕你觉得项目就是个渣渣,其实没有任何创新型,效果也贼烂,但你在与面试官的交流中一定要底气十足!这一点非常非常非常重要!
二、基础知识
对于一个问题如果仅仅简单的概述式的介绍给面试官,那基本是凉了的,那到底怎么样才算是准备的足够高充分了呢?
比如:你知道Batch Normalization吗
1、BN的背景,为什么会提出这种方法
2、BN的基本原理是什么 易自己理解的方式介绍大概步骤
3、训练和测试时的方差和均值选取的区别
4、BN的多卡同步是怎么回事
5、甚至进一步 BN所针对的激活函数一般是sigmoid,可以将参数拉离饱和区,那么如果换成Relu,BN是否还有效?
(一起建立讨论小组)
三、编程能力
刷题:剑指offer
注意命名规则要合理
最后,要多多面试。每一场面试下来,只要你认真总结,你就会发现自己的漏洞在被不断地补全,然后把自己最想去的几家公司放在最后去投。
——————————
1、依托的不仅是业务经验(这就是为什么对口的实习经历很重要),更重要的是过硬的工程能力。至于学术上的创新,是锦上添花而不是必要条件。
2、更重要的是靠多年的炼丹直觉+工程能力,快速搭建一个简单粗暴、易于实施且预期有迭代空间和足够不错的起点的基线,然后才是堆砌多年积累的上分tricks,快速刷分。
3、现在市场上大部分的算法岗都是这种程度的。你可以考虑一下,这种情况下,你简历上就挂着几条不痛不痒的水文,你能证明自己的优势吗?灰飞烟灭也不足为奇吧。
4、已经上了算法的车,又有了一些积累,下车的代价也比较高了,那么,不管你是CV、Speech、NLP还是IR、Rec、DM,请务必重点提高自己的工程能力,努力让自己成为一个机器学习全栈工程师——不会写paper但跟得上前沿,写得了规则修得了badcase,能炼丹上分也会部署模型
业务导向型算法岗:
我们需要从实际产品中发现用户的痛点和难点,提出高性价比的解决方案并快速上线,通过真实的用户反馈来不断的检验算法的效果并调整策略,如此往复迭代。在这个过程中,相比算法的创新性,我们更加注意的是算法的可控性,可维护性和线上性能/推理效率的问题。毕竟复杂算法在标准测试集上几个点的提升,对实际使用产品的用户来说,很有可能根本感受不到效果的优化,却实实在在的感受到了复杂算法带来的长达数百毫秒的延迟。
参考自:https://mp.weixin.qq.com/s/ER6mr0LUwmwh68BFrT9_1A