2021秋招提前批-百度ACG智能制造部门-面试总结

1 minute read

Published:



你是第位访客~ ٩(๑^o^๑)۶ Σ(っ °Д °;)っ被你发现了!

百度 ACG 智能制造部门:

  • 部门概况:百度智能云,智能制造部门。主要面向工业智能方向,包含工业大数据,调度优化;云上平台;线下算法产品。 视觉应用在 3C 质检领域(例如手机、笔记本外壳充电口外观质检),汽车纺织领域的视觉应用。工业巡检,工人安全操作规范。还是存在一些数据少的问题,团队总体规模 30~40 人,算法人员大概 10 人。

一面

  • 自我介绍
  • 介绍一个最近研究的论文
  • 介绍一个在公司的项目,遇到的问题,怎么解决的。

  • 对检测分割等最近模型和进展的了解

    • 检测: RCNN, Fast-RCNN, Faster-RCNN; YOLO_v4,SSD
    • 分割: DeepLab_v3(dialation conv, PSP head); DANet(self-attention 机制)
  • Unet 工业场景裂纹分割的时候会被边缘的噪声影响怎么办?

    • 传统方法做数据预处理,平滑去噪,先做显著性检测或者分割,再做裂纹精细部分的分割。(我也不知道,瞎猜的)
  • 工业场景下,裂纹分割,裂纹只占全图很小一部分有什么提升的方法。小物体分割的解决思路和方案

    • 重采样,前景部分 re-weight,loss 加权重。 Focal loss
  • Focal Loss 的形式,作用
    • Focal Loss 作用在交叉熵的 Loss 上,主要解决样本不平衡问题和简单和困难样本问题。详细信息可以查看这里
  • 对小模型的了解 MobileNet 等

  • SGD,全梯度下降和 batch 梯度下降哪个好,哪个收敛更快。

    • 全量梯度下降每次学习都使用整个训练集,因此其优点在于每次更新都会朝着正确的方向进行,最后能够保证收敛于极值点(凸函数收敛于全局极值点,非凸函数可能会收敛于局部极值点),但是其缺点在于每次学习时间过长,并且如果训练集很大以至于需要消耗大量的内存,并且全量梯度下降不能进行在线模型参数更新。
    • 全量梯度下降算法每次都会使用全部训练样本,因此这些计算是冗余的,因为每次都使用完全相同的样本集。而随机梯度下降算法每次只随机选择一个样本来更新模型参数,因此每次的学习是非常快速的,并且可以进行在线更新。
    • 随机梯度下降最大的缺点在于每次更新可能并不会按照正确的方向进行,因此可以带来优化波动(扰动)
    • 不过从另一个方面来看,随机梯度下降所带来的波动有个好处就是,对于类似盆地区域(即很多局部极小值点)那么这个波动的特点可能会使得优化的方向从当前的局部极小值点跳到另一个更好的局部极小值点,这样便可能对于非凸函数,最终收敛于一个较好的局部极值点,甚至全局极值点。
    • 由于波动,因此会使得迭代次数(学习次数)增多,即收敛速度变慢。不过最终其会和全量梯度下降算法一样,具有相同的收敛性,即凸函数收敛于全局极值点,非凸损失函数收敛于局部极值点。
  • 动量 momentum 的作用
    • 如果在峡谷地区(某些方向较另一些方向上陡峭得多,常见于局部极值点),SGD 会在这些地方附近振荡,从而导致收敛速度慢。这种情况下,动量(Momentum)便可以解决。动量在参数更新项中加上一次更新量(即动量项),即: $v_t = \gamma v_{t-1} + \alpha \nabla_{\theta} J(\theta), \quad \theta=\theta- v_t$
      ...
      加上动量项就像从山顶滚下一个球,求往下滚的时候累积了前面的动量(动量不断增加),因此速度变得越来越快,直到到达终点。同理,在更新模型参数时,对于那些当前的梯度方向与上一次梯度方向相同的参数,那么进行加强,即这些方向上更快了;对于那些当前的梯度方向与上一次梯度方向不同的参数,那么进行削减,即这些方向上减慢了。因此可以获得更快的收敛速度与减少振荡。
  • Batch Normalization (BN)的作用:

    • 保证深度网络中每一程的输入的分布偏移不会太大,能够一定程度增加训练的稳定性,加快模型的收敛速度。
    • 在使用类似于 sigmoid 的激活函数的时候能够使用更深网络,能够一定程度上防止梯度消失的问题
    • 能够在一定程度上抑制过拟合。
  • C++的了解情况,平时编程是否涉及到复杂的进程或者线程的交互

    • 不太了解(OJ 水平),没接触过。。。
  • 线程和进程的区别

    • 进程是操作系统分配资源的最小单位。线程之间可以共享资源,而进程之间需要靠通信的方式来进行数据交换。
    • 通常在一个进程中可以包含若干个线程,它们可以利用进程所拥有的资源。在引入线程的操作系统中,通常都是把进程作为分配资源的基本单位,而把线程作为独立运行和独立调度的基本单位。
    • 由于线程比进程更小,基本上不拥有系统资源,故对它的调度所付出的开销就会小得多,能更高效的提高系统内多个程序间并发执行的程度。

      • 关于进程的特性

        • 独立性:进程是系统中独立存在的实体,它可以拥有自己独立的资源,每个进程都拥有自己私有的地址空间。在没有经过进程本身运行的情况下是不能访问其中的内容的。

        • 动态性:进程与程序的区别在于,程序是静态的,进程是动态的。程序只是一个静态的指令集合,而进程是一个正在系统中运行的指令集合。有了时间的概念,如生命周期;

        • 并发性:进程之间,交替着执行。

      • 关于线程的特性,或是它的优势

        • 进程之间不能共享内存,单线程之间共享内存非常的容易

        • 系统创建进程需要为该进程重新分配系统资源,但创建线程的代价很小。因此多线程的实现多任务并发比多进程实现并发的效率高

  • 进程间的通信方式
  • python tuple 和 list 的区别

    • tuple 不可改变,固定大小,可以哈希,计算速度更快。 list 动态结构可以变大小,计算速度相对更慢。
  • python 多线程的实现,python 的伪多线程

  • python 的装饰器的作用
    • 再不改变原有代码的情况下提供额外的功能。详见这里
  • 内存中堆和栈等空间分配
  • 概率题,两个人扔硬币,正面朝上就获胜游戏结束,甲最先扔,求其赢的概率

    • 解法一: 设甲赢的概率是$P$, 则乙能够赢的概率是 $\frac{1}{2}P$(甲第一次是反面,乙从头开始的概率和甲是一样的都是 P),两者和为 1 即 $\frac{3}{2} P = 1 $,得到$P=\frac{2}{3}$
    • 解法二: 不妨把甲乙每都仍一次看作一轮
    1. 第一轮,甲赢:1/2, 乙赢:1/2*1/2=1/4

    2. 第二轮,甲赢:1/2 * 1/2 _ 1/2=1/8, 乙赢:1/2 _ 1/2 _ 1/2 _ 1/2=1/16

    3. 第三轮:甲赢:1/16 * 1/2=1/32, 乙赢:1/32 * 1/2=1/64

    • 可知甲赢的概率是 P=1/2 + 1/8 + 1/32 + … + 1/(2* 4^n), 根据等比数列通项公式$S=a_0 * \frac{1-q^n}{1-q}$,其中$a_0=\frac{1}{2} ; q=\frac{1}{4}$,可得结果为 2/3。

二面

  • 介绍一下自己的研究经历
  • 挑一个工作介绍一下
  • 算法题,给定一个列表的点,他们首尾相连可以组成一个多边形,然后再给定一个点,判断这个点是否在多边形内部。

    • 需要注意的点是,这个多边形可能凹多边形,也可能是个凸多边形。
    • 有点复杂,只会是凸多边形的情况,可以将多边形切分成很多小三角形,判断目标点是不是在其中的任意一个三角形中,如果是的话则返回 True,如果不在任何一个三角形中则返回 False。
    • 判断点是不是在三角形中的方式:目标点到三条边所在的直线作垂线,判断垂线交点是不是都在三角形的线段内,如果是返回 True,否则返回 False

    • 正确解法

三面 (面试时间 2020 年 7 月 19 日)

  • 介绍一下自己
  • 你在大学阶段遇到的最大困难是什么
  • 有没有什么是经历过困难之后成功的经历
  • 刚进大学的时候有没有啥规划,现在达到了当时的期望吗
  • 对未来有没有啥规划,打算,工作的方向
  • 对医疗 AI 的看法,存在的问题什么的
  • 对目前视觉落地的场景的看法
  • 对 BAT 以及商汤旷世等创业公司的看法
  • 在大学阶段花的时间最多精力最多学的是啥
  • 对 AI 技术在工业领域的应用有哪些了解
  • 对加班问题怎么看

  • 问面试官问题
    • 目前部门主要是在做工业质检,利用视觉技术去检查例如手机壳,镜头的外观什么的。还有一些在做安全巡检什么的。从 17 年至今应该是国内较早做相关方向的,而且这个市场大概有 3000 亿。
    • TOB 的业务部门,所以工作可能需要外派去甲方沟通需求或者解决问题,一两个月需要出去两三天左右
    • 目前面临的主要问题还挺多,算法交付要求的时间比较紧,算法的效果要求高(优于 99.9%),算法的成本不能高
    • 由于质检的物品变化较大,算法的泛化能力可能有限,需要针对垂直场景进行模块化优化等
    • 部门考核 KPI 需要综合来看,一方面是产品的交付的上线,另外一部分是对一些困难问题的算法提升的和优化,业务部门不科研。
    • 结果导向,不需要做完事情还在磨洋工。
    • 百度提前批一个在七月底一个在 8 月底,到时候看通知等 HR 联系,如果没有联系就是挂了。