2019年第二次面试

2019年第二次面试

周三的时候面了A场的第三面,约的是3点的面试,结果3点10分的时候面试官还没有到,后来来了一位,是临时被叫来的。

面试开始,自我介绍,然后问我项目上的问题,问的挺细的,先是人脸方面的,问项目背景,具体怎么做的,为什么这么做。然后问了智能制造的项目,问的非常的细致,网络输入是多大的,做了什么augment, 怎么做的,网络的具体到某一层的网络结构是什么,输入是什么,gt是什么,gt如何制作的,loss是什么,为什么选择这个loss。 这是第一波攻击潮。

还好上面是我亲自做过的,问的我都一下子能答上来,估计他是在看我到底有没有真的做过我写在简历上的项目。

然后接下来是第二波攻击潮。

  • 知道正则化吗?怎么正则化的?

我说知道,常用的有L1和L2。

  • 它们俩有啥区别

我说这个我知道,L1 会让参数趋于稀疏(稀疏的意思是加了L1之后的一些参数的最优值是0),而L2会让一些参数趋于0。[它们的差别在于参数的理论最优值虽然是0,但是学习结束后,这些学到的参数不一定为0,这也由其它因素决定,比如算法;而让参数趋于0是不管参数的理论最优值是多少,直接让它趋于0.].

  • 它们为什么会有这样的差别

我说深度学习圣经上面给了很漂亮的理论解释,不过我要细推一下,然后我就开始拿起来纸和笔准备推一下,结果他说不用了.(估计他时间非常紧,刚见他时他就说他今天下午还要面试两个人)

  • LR 的代价函数怎么写的,解释一下它的意思?

这个之前在T场就被问到过,不过这次当时被问时确实想不起来了,然后我又想了想,写下来了,也解释清了,险过一关。

然后问了两个其他的题目。

  • 概率论题

有两个桶A和B, A中有7黑3红球,B中有3黑7红球。每次在A中和在B中取球的概率是一样的,但是如果第一次是在A中取球的话,以后都要在A中取球。同理如果第一次在B中取的话,以后也都是在B中。取完把球放回。

现在连续抽了10次球,球的颜色是6黑4红。问这10次取球是从A中取的概率是多少?

这个题意很容易懂,他说完题,我想了一下,我说我知道了,就给他写了个公式,我说这里面的每一个量根据题中的条件都是可以计算的,他说你还是写一下吧,我就写了一下具体的式子。他扫了一下说是对的。

  • 编程题

有n个加油站,标号0,1,..,n-1,这些加油站围成了一个环,第i个加油站有两个数据gas[i], cost[i],前者是这个加油站当前的总油量,cost[i]是从当前的加油站到下一个加油站所需要的耗油量,假设汽车以空油箱,从任意一个加油站出发,问从哪个加油站出发还能够完全返回来,并输出最后还剩多少油,

这个题我想了一会儿,然后写了主要的代码,然后拿给他看,并给他解释了一下,他提出了一个漏洞的地方(我忘记当前的油量要减去之前的耗油了),然后稍微改了一下,他说可以了。

  • 问我最后还有没有问题要问他

我说应该没有吧。

关于最后一个问题,每次面试面试官最后都会问,我好像都没有想好要问什么,以后一定要问一个高质量的问题.

补充

下面是对上面一些问题的解答和补充,好久没打过tex了,好多公式都忘记了。

  • L2和L1正则化

avator

avaotr

  • 那个概率题

其实关于这类题理论上如果答不出来的话,也可以做实验,有的面试会给出一个具体的场景,比如光路模拟,或者其他场景的模拟。这个题理论上的结果是

>>> 0.7**6*0.3**4/(0.7**6*0.3**4+0.7**4*0.3**6)
0.8448275862068966

也可以用实验模拟,我写了一个

# ===========================================
# --coding:UTF-8 --
# file: test_prob.py
# date: 2019-03-30
# email: beyondpzk@outlook.com
# description: 
# ===========================================

import random
import sys

def test(n):
    assert n>=1

    dicA = [0]*11
    dicB = [0]*11
    total=0
    while total<n*1e5:
        prop = random.random()
        times = 0
        black = 0
        if prop<=0.5:
            # from A
            while times<10:
                temp = random.random()
                if temp<=0.7:
                    black += 1
                times += 1
            dicA[black] += 1
        else:
            # from B
            while times<10:
                temp = random.random()
                if temp<=0.3:
                    black += 1
                times += 1
            dicB[black] += 1
        total += 1

    return dicA, dicB

iters = int(sys.argv[1])
ret1, ret2 = test(iters)
#print(ret1)
#print(ret2)
print(ret1[6]/(ret1[6]+ret2[6]))


实验3kw次的结果是

[88, 2090, 21891, 134743, 550641, 1544449, 3001702, 4003078, 3501064, 1819538, 422348]
[423189, 1813674, 3501852, 4005470, 3000302, 1543225, 551448, 135039, 21952, 2136, 81]
0.8448002476675626

可以看到已经和理论值非常接近了.

打赏,谢谢~~

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,多谢支持~

打开微信扫一扫,即可进行扫码打赏哦