机器学习、计算机视觉面经整理(持续完善整理中……)

原创 2018年04月15日 19:23:49


      算法岗计算机视觉方向求职经验总结

进入11月份,楼主找工作也基本进入尾声了,从7月份开始关注牛客网,在求职的过程中学到了不少,感谢牛客提供这样一个平台,让自己的求职历程不再孤单。

 

先说一下楼主教育背景,本科西部末流985,研究生调剂到帝都某文科学校.专业都是CS专业,求职方向都是计算机视觉算法。有某外企以及二线互联网实习经历,本科虽然CS出身,但实际动手能力并不强。研究生的研究方向并不是计算机视觉方向。实习的时候开始接触计算机视觉,自己比较感兴趣,开始转CV方向。回想这几个月的求职经历,其中的辛苦只有自己知道。最终拿到了百度SP,京东SSP,美团无人驾驶SP,顺丰科技SP,拼多多SP,以及虹软SP,思科,中电29等offer。

 

想把我学习与求职路上的一些心得告诉学弟学妹们。

 

1.一定要有一门自己比较熟悉的语言。

我由于使用C++比较多,所以简历上只写了C++。C++的特性要了解,C++11要了解一些,还有STL。面试中常遇到的一些问题,手写代码实现一个string类,手写代码实现智能指针类,以及STL中的容器的实现机制,多态和继承,构造函数, 析构函数等。推荐看一下网易云课堂翁恺老师的C++的视频以及经典的几本书。

 

2.一定要刷题

楼主主要刷了剑指offer以及leetcode上的easy,middle的题目。如果编程能力不是很强,推荐可以分类型进行刷题,按照tag来刷,对于某一类型的题目,可以先看一下该算法的核心思想,然后再刷题。楼主在求职的过程中,遇到好多跟leetcode上类似的题目,刷题的目的不是为了碰见原题,而是为了熟练算法。当然能够碰见原题最好不过啦。

 

3.机器学习的一些建议

推荐西瓜书,以及李航老师的统计学方法。另外熟悉一种深度学习框架。学习计算机,一定要实战,毕竟只有在实战的过程中,才能懂得更透彻。可以多参加一些比赛,比如kaggle,天池,滴滴的一些比赛。这对找工作的用处很大。

 

4.能实习就尽量实习。

如果导师是学术大牛,可以带你发顶会的论文,并且自己对方向比较感兴趣,那可以在实验室待着好好搞科研。如果你研究生的研究方向跟你以后的求职方向不一致,建议早点出来实习,找个对口的实习,实习才能发现,实际工作和在学校学习的东西差距比较大。


 



楼主能不能分享下面试问了哪些视觉的问题啊
问到的问题主要跟我实习做的东西有关,有关于视频拆分的一些算法,以及三维点云的一些问题,传统的图像处理的一些基本操作还是要了解的,比如滤波,边缘检测,以及常用的一些传统的特征,SIFT,SURF,HOG等。深度学习这方面,我主要做过目标检测,所以问到的就是rcnn,fast-rcnn,faster-rnn,yolo,ssd这些算法。另外,问过一些调参,正则化,Batch normalization,drop out,激活函数的选择。手动推导BP,LR,SVM,算法题主要有常规的排序,二分查找,BP相关的题目,还有一些就是关于二叉树的递归和非递归遍历,层次遍历,最近公共祖先等,其余的题目记得不太清楚了

 

 

 

深度学习面经

(1)代码题(leetcode类型),主要考察数据结构和基础算法,以及代码基本功

虽然这部分跟机器学习,深度学习关系不大,但也是面试的重中之重。基本每家公司的面试都问了大量的算法题和代码题,即使是商汤、face++这样的深度学习公司,考察这部分的时间也占到了我很多轮面试的60%甚至70%以上。我去face++面试的时候,面试官是residual net,shuffle net的作者;但他们的面试中,写代码题依旧是主要的部分。

大部分题目都不难,基本是leetcode medium的难度。但是要求在现场白板编程,思路要流畅,能做到一次性Bug-free. 并且,一般都是要给出时间复杂度和空间复杂度最优的做法。对于少数难度很大的题,也不要慌张。一般也不会一点思路也没有,尽力给面试官展现自己的思考过程。面试官也会引导你,给一点小提示,沿着提示把题目慢慢做出来也是可以通过面试的。

以下是我所遇到的一些需要当场写出完整代码的题目:

<1> 二分查找。分别实现C++中的lower_bound和upper_bound.

<2> 排序。 手写快速排序,归并排序,堆排序都被问到过。

<3> 给你一个数组,求这个数组的最大子段积

时间复杂度可以到O(n)

<4> 给你一个数组,在这个数组中找出不重合的两段,让这两段的字段和的差的绝对值最大。

时间复杂度可以到O(n)

<5> 给你一个数组,求一个k值,使得前k个数的方差 + 后面n-k个数的方差最小

时间复杂度可以到O(n)

<6> 给你一个只由0和1组成的字符串,找一个最长的子串,要求这个子串里面0和1的数目相等。

时间复杂度可以到O(n)

<7> 给你一个数组以及一个数K, 从这个数组里面选择三个数,使得三个数的和小于等于K, 问有多少种选择的方法?

时间复杂度可以到O(n^2)

<8> 给你一个只由0和1组成的矩阵,找出一个最大的子矩阵,要求这个子矩阵是方阵,并且这个子矩阵的所有元素为1

时间复杂度可以到O(n^2)

<9> 求一个字符串的最长回文子串

时间复杂度可以到O(n) (Manacher算法)

<10> 在一个数轴上移动,初始在0点,现在要到给定的某一个x点, 每一步有三种选择,坐标加1,坐标减1,坐标乘以2,请问最少需要多少步从0点到x点。

<11> 给你一个集合,输出这个集合的所有子集。

<12> 给你一个长度为n的数组,以及一个k值(k < n) 求出这个数组中每k个相邻元素里面的最大值。其实也就是一个一维的max pooling

时间复杂度可以到O(n)

<13> 写一个程序,在单位球面上随机取点,也就是说保证随机取到的点是均匀的。

<14> 给你一个长度为n的字符串s,以及m个短串(每个短串的长度小于10),每个字符串都是基因序列,也就是说只含有A,T,C,G这四个字母。在字符串中找出所有可以和任何一个短串模糊匹配的子串。模糊匹配的定义,两个字符串长度相等,并且至多有两个字符不一样,那么我们就可以说这两个字符串是模糊匹配的。

<15> 其它一些描述很复杂的题这里就不列了。

 

(2)数学题或者"智力"题。

不会涉及特别高深的数学知识,一般就是工科数学(微积分,概率论,线性代数)和一些组合数学的问题。

下面是我在面试中被问到过的问题:

<1> 如果一个女生说她集齐了十二个星座的前男友,她前男友数量的期望是多少?

ps:这道题在知乎上有广泛的讨论,作为知乎重度用户我也看到过。如果一个女生说,她集齐了十二个星座的前男友,我们应该如何估计她前男友的数量?

<2> 两个人玩游戏。有n堆石头,每堆分别有a1, a2, a3.... an个石头,每次一个游戏者可以从任意一堆石头里拿走至少一个石头,也可以整堆拿走,但不能从多堆石头里面拿。无法拿石头的游戏者输,请问这个游戏是否有先手必胜或者后手必胜的策略?如果有,请说出这个策略,并证明这个策略能保证必胜。

<3> 一个一维数轴,起始点在原点。每次向左或者向右走一步,概率都是0.5. 请问回到原点的步数期望是多少?

<4> 一条长度为1的线段,随机剪两刀,求有一根大于0.5的概率。

<5> 讲一下你理解的矩阵的秩。低秩矩阵有什么特点? 在图像处理领域,这些特点有什么应用?

<6> 讲一下你理解的特征值和特征向量。

<7> 为什么负梯度方向是使函数值下降最快的方向?简单数学推导一下

 

(3)机器学习基础

这部分建议参考周志华老师的《机器学习》。

下面是我在面试中被问到过的问题:

<1> 逻辑回归和线性回归对比有什么优点?

<2> 逻辑回归可以处理非线性问题吗?

<3> 分类问题有哪些评价指标?每种的适用场景。

<4> 讲一下正则化,L1和L2正则化各自的特点和适用场景。

<5> 讲一下常用的损失函数以及各自的适用场景。

<6> 讲一下决策树和随机森林

<7> 讲一下GBDT的细节,写出GBDT的目标函数。 GBDT和Adaboost的区别与联系

<8> 手推softmax loss公式

<9> 讲一下SVM, SVM与LR有什么联系。

<10>讲一下PCA的步骤。PCA和SVD的区别和联系

<11> 讲一下ensemble

<12> 偏差和方差的区别。ensemble的方法中哪些是降低偏差,哪些是降低方差?

...... 这部分问得太琐碎了,我能记起来的问题就这么多了。我的感觉,这部分问题大多数不是问得很深,所以不至于被问得哑口无言,总有得扯;但是要想给出一个特别深刻的回答,还是需要对机器学习的基础算法了解比较透彻。

 

(4)深度学习基础

这部分的准备,我推荐花书(Bengio的Deep learning)和@魏秀参 学长的《解析卷积神经网络-深度学习实践手册》

下面是我在面试中被问到过的问题:

<1> 手推BP

<2> 手推RNN和LSTM结构

<3> LSTM中每个gate的作用是什么,为什么跟RNN比起来,LSTM可以防止梯度消失

<4> 讲一下pooling的作用, 为什么max pooling要更常用?哪些情况下,average pooling比max pooling更合适?

<5> 梯度消失和梯度爆炸的原因是什么? 有哪些解决方法?

<6> CNN和RNN的梯度消失是一样的吗?

<6> 有哪些防止过拟合的方法?

<7> 讲一下激活函数sigmoid,tanh,relu. 各自的优点和适用场景?

<8> relu的负半轴导数都是0,这部分产生的梯度消失怎么办?

<9> batch size对收敛速度的影响。

<10> 讲一下batch normalization

<11> CNN做卷积运算的复杂度。如果一个CNN网络的输入channel数目和卷积核数目都减半,总的计算量变为原来的多少?

<12> 讲一下AlexNet的具体结构,每层的作用

<13> 讲一下你怎么理解dropout,分别从bagging和正则化的角度

<14> data augmentation有哪些技巧?

<15> 讲一下你了解的优化方法,sgd,momentum, rmsprop, adam的区别和联系

<16> 如果训练的神经网络不收敛,可能有哪些原因?

<17> 说一下你理解的卷积核, 1x1的卷积核有什么作用?

........

同上,这部分的很多问题也是每个人都或多或少能回答一点,但要答得很好还是需要功底的。

 

(5)科研上的开放性问题

这部分的问题没有固定答案,也没法很好地针对性准备。功在平时,多读paper多思考,注意培养自己的insight和intuition

下面是我在面试中被问到过的问题:

<1> 选一个计算机视觉、深度学习、机器学习的子领域,讲一下这个领域的发展脉络,重点讲出各种新方法提出时的motivation,以及谈谈这个领域以后会怎么发展。

<2> 讲一下你最近看的印象比较深的paper

<3> 讲一下经典的几种网络结构, AlexNet, VGG,GoogleNet,Residual Net等等,它们各自最重要的contribution

<4> 你看过最近很火的XXX paper吗? 你对这个有什么看法?

......

(6) 编程语言、操作系统等方面的一些问题。

C++, Python, 操作系统,Linux命令等等。这部分问得比较少,但还是有的,不具体列了

(7)针对简历里项目/论文 / 实习的一些问题。

这部分因人而异,我个人的对大家也没参考价值,也不列了。

 

作者:牛客网
链接:https://zhuanlan.zhihu.com/p/30212122
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

楼主本科,今年前前后后面了一些BAT的实习和校招,岗位主要是基础研究,机器学习方面。最后去T的技术研究岗。并不是大神,只是在这里总结一下自己的看法和面经。因为面试题主要是看面试官,并不是看公司,所以这里就不分开写了。


这一类的岗位面试大多数是以简历为基础,会根据简历上所提到的一些工具(比如caffe,cuda),算法(比如CNN,随机森林)和项目进行提问。所以准备面试最重要的就是要深刻的理解这些工具和算法的基础和优劣势,和实际工程上会遇到的问题并且要知道如何解决(比如,SVD在遇到数据特别大的时候会产生一定的问题?如何解决?)。如果自己不太熟或说不清楚的算法或记忆不太清楚的项目最好不要写在简历上。一般之前实习的具体内容不会被问到,面试官感兴趣的主要是学校课程和实验室所做的基础项目。

这类岗位同时也经常会问到一些统计相关的问题,所以基本的统计模型,概率题,矩阵知识得熟悉。也经常会遇到一些很抽象的问题,比如某技术的前景,和一些技术的对比,所以建议大家多看看机器学习相关的公众号啊之类的。

面试时楼主认为不仅是你能回答所有问题,态度等也很重要,要让面试官感受到你的谦虚和热情并且感受到你是一个将来可以融入他们团队的人。面试官更想看到你是个学习能力强并且积极阳光的人,毕竟校招不同于社招,并不会期待你能懂很多很多。

以下是楼主遇到过的问题,这些问题只供参考,不同面试官问的问题差别会很大。所以重点还是放在精通简历内容上。

有任何具体问题可以私信我~祝大家都拿到心仪的offer!



算法,数据库,数据结构:

1. 快排

2. 归并排序(核心为一个merge函数,把两个sort好的list合并起来)

3. 冒泡排序

4. 两个单向链表相接的一系列问题

5. reverse一个linked list,while和for两种方法

6. dynamic programming (要会做基础的背包问题,longest substring等)

7. mysql索引

8. B+树(节点如何分裂的)

9. 数据库底层所用到的grace hash join和merge join

10. 死锁和解决办法

11. n个数取k个最大


数理统计:

1. 如何求出一个圆的sin1度的大小(用taylor series)

2. 有一个不规则硬币,如何用它做一个1到6的随机数生成器(核心为找六个概率相同的事件)

3. 斗地主摸到王炸和四个二的概率是多少

4. 有一个二位坐标轴,你从原点可以往上下左右走,请问100步后走回原点的可能性(题目大概是这样,学过随机过程的可以做做)

5. confidence interval

6. 统计中的P值和Alpha值

7. 三门问题

8. 还有一些其他的概率题不太记得了

9. 矩阵的基本知识得牢记


机器学习方面:

(机器学习方面的问题一般会根据简历来问, 简历上写了的算法一定要很清楚如何底层实现,面试官一般都会让你给他讲)

1. 随机森林(注意要了解随机树上的每个节点上的feature是怎么选择的)

2. 线性回归(最优解表达式要牢记)

3. logistic回归

4. logistic函数和relu函数的图像是什么样的

5. 反向传播神经网络的讲解

6. PCA和SVD(数学方面的分解最好能比较精通)

7. SVD在遇到数据特别多的时候会产生一定的问题?如何解决?

8. cuda可以通过哪些方法对神经网络进行加速

9. 有一张统计qq在线时间分布图,基于一些统计的test提问

10. 推荐系统(简单的可以用PCA和SVD做)

11. RNN和CNN的对比

12. 如何做矩阵的卷积。


语言:

(C++,java的这里就不写了,现在这类岗位比较喜欢问python相关的问题)

1. python2和python3有哪些区别

2. 用哪些库(比较基础的是numpy和scikit-learn)

3. python如何继承其他的class

4. super()的用法

5. python较java相比的优劣势

6. AngularJS, ReactJS, html的比较(写过前端的同学可以看看)

7. unix里的一些指令,比如cat,mkdir

8. git的一些指令,比如fetch和pull的区别

9. SQL一系列问题


opencv应用实例

-
  • 1970年01月01日 08:00

视频面试经历,科大讯飞,机器视觉算法研究员(一面)

两位面试官都有发问。由于先视频后音频,我不太能分清是哪位面试官提的问。   先是自我介绍。因为所做项目和岗位匹配度很高,面试官也是同方向的,所以让我很详细地介绍了项目过程。介绍完成后对于项目细节提了很...
  • Adam_fei
  • Adam_fei
  • 2017-03-23 17:54:39
  • 4542

正则化和dropout

正则化和dropout1. 过拟合先来说说什么是过拟合,在Andrew Ng的ML课程中有这么一段描述。 使用一次曲线拟合房价,发现效果并不好,出现欠拟合,是high bias,训练数据不够充分。使...
  • u010194274
  • u010194274
  • 2017-03-17 20:34:30
  • 1793

理解 dropout

原文转载于:https://blog.csdn.net/stdcoutzyx/article/details/49022443理解dropout注意:图片都在github上放着,如果刷不开的话,可以考...
  • dengheCSDN
  • dengheCSDN
  • 2018-03-24 21:34:29
  • 30

从bagging到dropout(deep learning笔记Ian)

dropout的思想继承自bagging方法,学习dropout先了解一下bagging方法。baggingbagging是一种集成方法(ensemble methods),可以通过集成来减小泛化误差...
  • m0_37477175
  • m0_37477175
  • 2017-08-13 17:27:11
  • 830

机器学习技法课程学习笔记7 -- Blending and Bagging

上节课我们主要介绍了Support Vector Regression,将kernel model引入到regression中。首先,通过将ridge regression和representer t...
  • gyh_420
  • gyh_420
  • 2017-10-12 15:00:30
  • 97

boosting与bagging理解

作为集成学习的二个方法,其实bagging和boosting的实现比较容易理解,但是理论证明比较费力。下面首先介绍这两种方法。 所谓的集成学习,就是用多重或多个弱分类器结合为一个强分类器,从而达到提...
  • wtq1993
  • wtq1993
  • 2016-04-23 20:24:34
  • 1608

深度学习(Deep Learning)读书思考三:正则化

概述 正则化是机器学习中非常重要并且非常有效的减少泛华误差的技术,特别是在深度学习模型中,由于其模型参数非常多非常容易产生过拟合。因此研究者也提出很多有效的技术防止过拟合,比较常用的技术包括: ...
  • fangqingan_java
  • fangqingan_java
  • 2016-11-20 11:26:30
  • 3599

Deep learning:四十一(Dropout简单理解)

前言   训练神经网络模型时,如果训练样本较少,为了防止模型过拟合,Dropout可以作为一种trikc供选择。Dropout是hintion最近2年提出的,源于其文章Improving neu...
  • tsb831211
  • tsb831211
  • 2016-07-29 17:31:55
  • 1622

2.1.2 Dropout正则化以及其他正则化

Dropout正则化 Dropout介绍 除了L2正则化之外,还有一个很重要的正则化方法叫随机失活(Dropout),下面,我们来了解一下。 如图所示,假设网络中的每一层的节点都以抛硬币...
  • Einstellung
  • Einstellung
  • 2018-04-16 21:23:00
  • 17
收藏助手
不良信息举报
您举报文章:机器学习、计算机视觉面经整理(持续完善整理中……)
举报原因:
原因补充:

(最多只允许输入30个字)