一面:电话面(主要讨论research的东西)
先介绍了一下组做什么的,然后问我的东西,我觉得应该是看上了我给老师干活做的一个论文工作,然后问里面的东西,不过我回答得不好,就略过。
后面问我的研究方向,开始讨论图神经网络的东西,问问有哪些工作,说了常见的,切比雪夫核,一阶近似的GCN,graphsage和gat,然后好像问了graphsage,我说了几种聚合算子,后面让我详细说说池化算子,我当时直接说论文来凑数的,因为我也不太懂🤣,现在想想太草率了哈哈哈。假期又读了下,发现这个池化算子还是比较重要的,作者后面证明了sage能够以任意误差拟合网络中的三角形(衡量算法重构复杂网络能力的),这个证明用到了池化算子的性质。但我现在还没搞懂这个最大池化算子是怎么工作的,有懂的朋友可以交流一二🙏。
后面就在讨论GNN里的过平滑问题了,先回答为什么会产生,可以从频域空域视角理解,主要思路就是让节点向量趋于一致而失去应有的区分度。
然后问了一下图卷积网络和CV里的卷积网络都是卷积,为什么CNN可以做深,GCN不能?当时回答的是这俩卷积不是一个东西,可能机制不一样blabla。现在回想一下GNN其实是能做深的,不过和CNN一样都需要一些trick,最经典的就是残差连接。
然后问了怎样缓解过平滑,其实当时对这个问题没有深入的考虑和调研过,就主要谈了邻居采样问题,我主要觉得节点随着层数扩展是以指数级别聚合邻居节点特征的,所以聚多了自然就一致了,所以主要谈了谈怎么随机邻居采样,减少采样数量。现在再回答就是解耦+trick。
代码题最后简单问了一下思路,开平方问题,二分法,复杂度。
二面:由于一面没有严谨的撕代码,让我这个小辣鸡有了一张二面体验卡。
一开始又聊GNN的过平滑,由于聊过一次,对答如流,就在暗自庆幸之际,面试官就说来一道代码题吧:
“假设有T个城市,每个城市有L个类型的补给站。一个旅行者,需要从第1个城市依次走到第T个城市。第i个城市第j个类型的补给站可以提供的补给数量由数组A[i][j]表示,A是一个T*L的数组。从相邻城市的m补给站到n补给站,可以额外获得的补给奖励为B[m][n],B是一个L*L的数组。求可以获得最高补给的路径,以及最高补给数量。”
回答了暴力解法的思路和复杂度,优化要用动态规划,可是我不会啊,遂挂。
这就是我面试的流程,希望对大家有帮助,谢谢。
全部评论
(7) 回帖