第一面:科研基础
第二面:机器学习基础
HR面
阿里巴巴研究型实习生(Research Intern)项目是主要面向海内外顶尖高校博士生的实习生项目,目标是基于阿里巴巴在电商、金融、物流、文娱、健康、云计算等领域的丰富业务场景,联合培养高素质的计算机创新研究人才,为服务20亿人的新经济体储备核心科技。自启动以来,项目吸引了来自MIT、斯坦福大学、加州大学伯克利分校、卡耐基梅隆大学、香港科技大学、清华大学、北京邮电大学大学等多所高校的数百名学生。
研究型实习生申请页面:
https://campus.alibaba.com/talentPlanDetail.htm?id=82
和普通实习生不同,研究型实习生的主要任务是抽象业务问题并设计新颖有效的模型及产出顶级论文(CCF-A类论文)。论文的产出是研究型实习生最重要的KPI。
北京邮电大学博士生Houye[https://zhuanlan.zhihu.com/c_1158788280744173568]成功通过了阿里巴巴研究型实习生(Research Intern)的面试,主要在淘宝做图神经网络和推荐相关的工作。目前,有一篇合作的论文投递到KDD2020,还有一篇在做。下面他将会分享一些研究型实习生的面试经验。
研究型实习生和普通实习生面试最大的区别是:对科研基础的要求非常高。硕士如果没有CCF-A顶级论文是基本没有面试机会的。
第一面就是部门Leader 大佬,主管淘宝营销业务,如聚划算和百亿补贴等业务。当时面试官介绍完自己后,我就很慌,没想到第一面的面试官级别就这么高。
面试第一步就是自我介绍,主要是之前的研究项目。因为我之前一直是在图表示学习和图神经网络相关的工作,就介绍了一些自己发表的论文。这里的介绍过程和思考idea的过程非常像,从motivation到挑战及贡献,然后就是一些模型细节,最后是实验设置的对比方法。这里, 我有一篇较早做异质图神经网络的工作HAN,目前引用和影响也挺高。HAN也作为异质图神经网络的代表作被亚马逊开源的图神经网络框架DGL收录。
和做研究论文不同, 面试官特别的关注复杂度。这也是为了工业界的实际应用。这里介绍了HAN的复杂度及可能的优化思路。
因为这次的研究项目主题就是:图神经网络+推荐系统,面试官也问了一些推荐和图看法:
下面是我的理解:
推荐里面的User-Item预测实际可以理解为一个User-Item二部图上的链路预测。
那么,图上的链路预测和推荐里的链路预测有什么区别呢?
Graph Embedding
这里主要指DeepWalk/SDNE等无监督的方法(不包括现在的GCN/GAT)。因为没有标签,因此旨在从图本身出发,保持图本身的结构和性质。 比如什么一阶相似性,二阶相似性,非对称性,社区结构之类的。
没有特定的任务loss,导致节点的Embedding可能不会在某个任务(如推荐)上特别强,但是有较好的泛化能力。因此,Graph Embedding的结果可以作为召回及推荐里User/Item的预训练结果。
推荐里的Embedding
很直接,就是优化CTR,通常不会过多的考虑图本身的结构性质,关注loss的下降.这样学出来的Embedding普适性可能差一些。
在了解的论文里,也有对推荐DNN里所学习到的User/Item的Embedding进行可视化的,有些时候并不好,但也有论文可视化的结果也还不错的。
图神经网络+推荐:既可以利用CTR的label信息,又保持图本身的结构/性质。
图神经网络是一种聚合节点邻居信息并利用DNN来更新节点表示的模型。它可以保持图本身的结构和性质。
基于图神经网络的推荐:一个图神经网络学习User的表示,一个图神经网络学习Item的表示,最后内积预测就完事。
这也是为什么我觉得GNN用于推荐能够带来一定的提升。
最后,简单介绍了下经典的GNN论文及自己看法。我从空域和谱域的GNN分别介绍,说了GCN,GAT,GraphSAGE等论文。关于看法方面,我主要介绍了GNN做不深的问题(过平滑现象)。
GNN的过平滑现象指的是:随着模型层数的加深,GNN的效果会持续下降。说了下相关的论文
以及我在GNN层数上做的一些探索。
有没有必要做深和图本身有关系。
我做过很多测试,在不同的数据集不同的模型上进行试验。结果表明,深度GNN未必比得过浅层GNN。
经过分析,我的结论是:GNN的最佳层数和邻居矩阵A的稀疏程度有关系。 当图的稀疏度较低时,很快会出现过平滑现象。
ICLR2019的论文PPNP通过试验验证了:当GNN的层数设置为图的半径(最短路径)时,模型表现最好。
最后,问了点基础的编程知识。问我会不会Java, 我说不会。然后问了点Python的基础知识。熟悉哪些深度学习框架。我主要比较熟悉TensorFlow,之前论文的算法都是用TensorFlow实现的。这其实刚好满足阿里的需求,因为阿里内部的Pai平台对TensorFlow支持比较好,对Pytorch支持较差,剩下的不支持。
总结:第一面基本都在聊科研和聊论文,这也是和普通实习生面试的最大区别。在介绍思路和看法时,最好能有相关的参考文献或者实验结果作为支撑。另外,在阿里做研究要考虑落地的问题,因此算法的效率复杂度也要考虑。
第二面是交叉面,面试官是达摩院的大佬,主要做NLP的。这一面主要是问一些机器学习基础知识。
第二面刚开始就非常尴尬。面试官问我对Bagging和Boosting熟悉吗?我说不熟悉。面试官马上来了兴致,那你就介绍下你对他俩的了解吧。。。果然面试官都喜欢问你不会的东西。
下面是我的理解:
Bagging是多个模型的融合, Boosting是一个模型的不断迭代优化。
Bagging能否带来提升和模型、数据之间的相关程度是有关系的。相关性越低,提升幅度越大。这是有理论证明的,在台大的机器学习课上有介绍。然后说了Bagging的经典应用:从决策树到随机森林。通过多颗决策树的Bagging来提升最终的表现。
Boosting关注于如何更好的提升一个模型的表现。这里我说了AdaBoost的流程和做法。通过加大对分错样本的权重,使得模型加大对其的关注,进而提升模型的效果。
然后,面试官问了下深度学习求导的问题,实际上问的是:我深度学习领域中见过哪些不可导的操作,不可导怎么办?比如|x|的求导。
这里我的回答是:次梯度和重参数
深度学习算法通常需要反向传播来进行优化,这就涉及到求导的问题. 激活函数需要满足单调,处处可导,有界等条件。如传统的sigmoid函数,但是现在很多激活函数并不是处处可导的。如ReLU在x=0 处不可导,那么如何实现反向传播和模型优化呢? 答案就是:次梯度
对于ReLU函数, 当x>0的时候,其导数为1。当x<0时,其导数为0。则ReLU函数在x=0的次梯度是 这里是次梯度有多个,可以取0,1之间的任意值. 工程上为了方便取c=0即可。
VAE中隐变量z一般取高斯分布,然后从这个分布中采样。但是这个采样操作是不可导的,进而导致整个模型无法BP。解决方法就是Reparametrization tricks重参数技巧。
我们首先从从均值为0,标准差为1的高斯分布中采样,再放缩平移得到Z。
这样从 到 只涉及了线性操作(平移缩放),采样操作在NN计算图之外,而 对于NN来说只是一个常数。
接下来问了过拟合问题和常见的正则化技术,L1, L2,dropout等。
介绍下LSTM的架构, 各个门的用处和公式。
然后,问了一点Transformer的问题和LSTM的比较。我简单的介绍了下Transformer,并基于自己的理解分析了Graph Attention Network和Transformer的关系。我认为他们本质上是一种东西,说了下区别和联系。
除了self-attention还用过、了解什么Attention。我就把之前论文中的Attention介绍一下。
总结:第二面说是机器学习基础,但是最新的Transformer也被问到了。另外,西瓜书和PRML中常见的问题并没有被问到。可能是大家这几本书都背的很熟了。深度学习中的不可导操作这个问题还是有点出人意料的,幸好我之前遇到过相关的问题。
面试结束的时候,面试官对我的面试表现很满意,直接就说这面肯定过了。
第三面就是HR面了,一些常见问题就不多说了。
阿里巴巴研究型实习生(Research Intern)的面试非常强调研究基础,对于代码基础问到的反而不多。应该是默认能够实现并修改算法的同学基础是过关的。如果大家想尝试一下的话,一定要对相关研究领域非常熟悉,能够把握最新的研究进展。