天壤智能深度学习(生物信息方向)实习岗面试总结

非常暴露问题的一场面试,把我薄弱的基础和最近浮躁的学习状态揭露无疑。

直接上题目(附上相关的知识点以便以后复习):

  1. 介绍一下自己

  2. 你说你用过LSTM模型,请讲一下计算遗忘门的时候,总共有多少需要学习的参数:
    LSTM-unit
    思路:矩阵 X < t > X^{<t>} X<t> 的形状是 ( n x , m ) (n_x, m) (nx,m) a < t > a^{<t>} a<t>的形状是 ( n a , m ) (n_a, m) (na,m),因此stack以后的矩阵 [ a < t − 1 > , X < t > ] [a^{<t-1>}, X^{<t>}] [a<t1>,X<t>] 的形状是 ( n x + n a , m ) (n_x+n_a, m) (nx+na,m)。由于 c < t > c^{<t>} c<t> a < t > a^{<t>} a<t>同形状,因此 W f W_f Wf的形状为 ( n a , n x + n a ) (n_a, n_x+n_a) (na,nx+na),要估计的参数数为 n a × ( n x + n a + 1 ) n_a \times (n_x+n_a + 1) na×(nx+na+1) (1 for bias)

  3. 你刚才介绍了马尔可夫蒙特卡洛方法的原理,那你应该比较熟悉马尔可夫链的概念,请讲一下隐马尔可夫模型中状态转移矩阵的作用 (内心os: 什么,那是什么…一脸懵逼… 回来以后翻了《统计学习方法》才知道他在问的是什么)

    思路: 状态转移矩阵由一系列概率构成,矩阵大小是N × \times ×N (N是所有可能的状态总数), a i j a_{ij} aij表示时刻 t 处于状态 q i q_i qi的条件下在时刻 t+1 转移到状态 q j q_j qj的概率。 在前向和后向算法的计算中都涉及到状态转移矩阵。
    HMM

  4. 关于蛋白质结构这方面了解多吗,用过结构分析的软件吗?

    讲了本科和蛋白质结构分析扯不上边的毕设,第二个问题的回答直接诚实又粗暴:没有

  5. 对python熟悉吗,python2 和python3里的map() 函数有什么区别?

    思路: python2里 map() 函数直接返回一个list,python3里返回一个迭代器对象(iterable)

  6. 讲一下python里generator的概念。 (内心os: 听说过这个概念但从来没有好好查过。后悔没有好好从基础学起,一上来就用python做数据分析,做ML,果然是不可取的)

    思路:数据量很大时,一次性生成所有数据的list的空间代价比较大,generator可以一边循环一边推算,它的.next() 方法推算出后一个元素。

    创建generator的方法:用()取代列表生成式的[]; 用yield()函数

    参考
    https://blog.csdn.net/wxyangid/article/details/79514040

  7. 用过Batchnorm吗,我们为什么要使用Batchnorm? Batchnorm是针对哪一个维度做的normalization?

    思路: 可以用来解决梯度消失和梯度爆炸的问题(此处面试官附加了一个问题,什么是梯度消失和梯度爆炸,参考:https://blog.csdn.net/qq_25737169/article/details/78847691 ),使训练出来的网络泛化性能更好。 随后我想起NG的课堂作业上,BN的代码中给的axis = 3,input的shape是 (m, n_H, n_W, n_C),小心翼翼地回答到:Batchnorm是在channel维度上做的… 在面试官耐心又无奈地指导下,知道了BN是对一个batch做的normalization(不然怎么叫BatchNorm呢),而且对每个channel各自做(原来axis=3的含义是这样的)。面到这基本就已经凉了

  8. 给你一个可以生成(1到7) 7个数的随机数生成器,每个数的概率都是1/7,不限方法,你怎么用它来造出一个能生成(1到10)是个数的随机数生成器?

    思路: 想了半天绞尽脑汁说 使用这个随机数生成器n次,n要尽可能大,根据中心极限定理,这n次的平均值会服从一个均值和方差都已知的正态分布,通过曲线下面积把分布分成10等份,对应9个平均值取值的分界点… (面试官说这算是一个近似解法,而且操作上不现实,并且提示更好的答案只需要取两次,我还是没想到)
    接下来是正解,用到了下采样: 取两次随机数,第一次记为a,第二次记为b,那么 7 a + b 7a+b 7a+b 可以涵盖从(8到56) 的所有整数,且每个取值的概率都是相等的, 接下来只要随意地运用下采样方法就行,比如把所有不在 $(10, 50] $ 这个区间的结果舍弃,即如果出现不在这个区间的情况就重新采样,随后这个40个取值就可以分成10份…

  9. 甩来一张纸,写一下快排吧(内心os: 补刀! 真的是补刀!原来这一行所有的岗位都需要面算法是真的)

    思路:

# 所有left与right比较都带=号, 所有与pivot的比较都不带=号
def quicksort(A, start, end):
   if not A or start >= end:
        return
   left = start
   right = end
   pivot = A[(left+right)//2]
   
   while left <= right:
       while (left <= right) and A[left] < pivot:  
           left += 1
       while (left <= right) and A[right] > pivot: 
           right -= 1
       if left <= right: 
           A[left], A[right] = A[right], A[left]
           left += 1
           right -= 1
   quicksort(A, start, right)
   quicksort(A, left, end)

总结: 要进军深度领域,不仅要继续向前学习更加复杂的模型,更要回过头去把理论基础和对工具的使用好好掌握一下,另外,需要好好学习数据结构和算法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值