研 0 进组面试总结

手机上的 Days Matter 提醒我,今天已经是复试结束后的第 19 天了,网安院何其多人,找个合适的老师还是任重道远啊

面试前

其实这是第三位老师,前面已经给两位老师发了邮件:

第一位郝老师,官网 profile 上写的研究方向是信息论、纠错编码、密码学、机器学习,还强调了“主要研究兴趣”为:全同态加密,隐私保护机器学习,存储纠删码,全密态数据库,看这些内容也是偏研究的(密码学当然是搞研究的),当初给他发邮件是因为有本校同学说这老师人还挺好的,但是这些研究方向确实很“网络安全”,对于我这种半路出家的上手难度有点高,也许真的不太适合,因为关于网络安全的内容,我就复试前对北邮自己出的那本教材学了大半本的密码学,更杂的网络安全是看都不想看一点。

密码学热潮已过了,虽然确实很有用,并且最近入坑的人也很多(os:美密会今年又投了一堆,哪来的这么多人…),但是始终不是最有前途的方向

第二位时老师,主要还是因为本校学生评价人不错就申请了,官网 profile 写的研究方向是网络测量、匿名通信与隐私保护、区块链安全、信息智能处理与大数据安全分析、网络模拟仿真,感觉应该是做项目相关的,应该不错,因为我有一个 TCP 协议的项目(虽然真要严格区分的话这项目应该算入系统编程),对这些东西也挺感兴趣,起码不是密码学那种不自量力型,或者是攻防那种完全不想做的方面。

做项目的话,我也不太了解,但是起码你的 coding 能力不会退化吧,一下考了两年研,我码力确实弱了不少

虽然我现在回过头来看我的头两封套磁邮件写的确实很粗糙,甚至可以看作没有太大诚意,但是即使如此,两位老师也没有回复我的邮件,可能是招生名额已经用完了,也可能是觉得我太菜了。

高情商:和课题组不匹配;低情商:菜

第三位尚老师,研究的是 nlp 和内容安全,大致交流过并且看他的论文应该是做 nlp 的语义安全的,方向不错,甚至是目前我最想做的方向了,虽然 nlp 领域的端对端难题目前来看是被 LLM 解决了,早些年 nlp 端对端表现比 cv 差太多了,只能拆分成上下游的各个子任务各自研究,其实这位老师也多半感知到了这些问题,虽然他目前引用最高的一篇 AAAI 是搞上游任务的 JERE 的,但后续研究重心应该是语义安全

关于研究重心目前还在犹豫,虽然毫无疑问应该 all in AI,但是对 system 的东西还没有怯魅,还不想那么快切换

我记得是上周二这位老师就亲自打了电话过来,说这周五 / 周末或者再下周一安排一次面试,其实从细节来看这位老师人确实还是不错的,对这次 meeting 他称之为“交流”,而不是“面试”,虽然后来我一直坚持当作“面试”,因为本质如此。

准备倒是好好准备了,我翻了一下这老师的论文,关键的几篇看了一下摘要引言结论这样,并且去 Kaggle 找了个文本分类的 nlp 赛题做了一下,稍微熟悉一下 nlp 各种任务和流程,但是准备方向有点歪了,具体看下面的面试过程吧

面试过程

手写 Kmeans 算法

面试时间大约是一小时,体感真的是没问什么问题就过去了。
第一项内容是实现一个 Kmeans 算法,很凑巧我没有系统的学过传统 ML(其实是有在计划中的,我打算选完导师后用李航那本统计学习方法补一补传统的 ML 基础,不过计划赶不上变化 X-D),并且现在是半个 python 残疾人(一是它就不是我的主力开发语言,二是考研两年就算有基础也忘得差不多了)
其实老师直接指示出大致要做什么东西了:

1
2
3
4
# Kmeans:
# 1. 随机生成若干个样本点
# 2. 用 Kmeas 算法对样本点进行聚类
# 3. 输出聚类结果

其实是很简单的 20 代码内就可以完成,奈何我是完全不了解这些经典的 ML 算法,只是听过这一个概念,所以现场打开 ChatGPT && Gemini,在腾讯会议七个人的注视下开始学习 Kmeans 算法,老师还额外强调不要参考现成代码(所以prompt上我还额外加了“尽量别向我提供具体代码”),所以我想先搞懂这算法的具体流程,再尝试硬着头皮写出代码。

现场学其实是很抽象的一件事情,并且我也把他想考察的重点弄错了,最后加之有点紧张,表现实在是差劲,实际到快 40 分钟的时候老师就结束了这个环节,进入自我介绍 + 简历面了。
后来回忆了一下,就算没学过,也能在短时间内大致弄懂这算法的步骤,复现出来的时间也够,只能说是自己的基础确实不够。
下面是一个 Kmeans 算法的 py 代码,由 ChatGPT 提供:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import numpy as np
def generate_sample_points(num_samples, num_clusters, cluster_std=1.0):
# 生成簇中心点
cluster_centers = np.random.randn(num_clusters, 2) # 生成2维簇中心点,均值为0,标准差为1

# 生成样本点
samples = []
labels = []
for i in range(num_samples):
# 随机选择一个簇中心
cluster_index = np.random.choice(num_clusters)
# 从簇中心生成样本点,假设每个簇服从正态分布
sample = cluster_centers[cluster_index] + np.random.randn(2) * cluster_std
samples.append(sample)
labels.append(cluster_index) # 记录样本点所属的簇

return np.array(samples), np.array(labels)

# 示例用法
num_samples = 100 # 样本点数量
num_clusters = 3 # 簇的数量
cluster_std = 0.5 # 簇的标准差
samples, labels = generate_sample_points(num_samples, num_clusters, cluster_std)

简历面

第二项内容就是,对着我的复试简历提问,问了 20 多分钟,主要是老师本人提问,他组里的学生也有少量提问,不过学生的提问水平不咋地,可能我的简历上的东西涉及的方向太多太杂了,诸如数学建模赛题 / 强化学习那些他们也不太了解,至于简历上系统编程方面的东西更不会问了,也启示我不要为了把简历写的很满而把不符合面试方向的东西放上去。

首先是我的毕设,毕设做的是神经网络(或者说是 DL)在锂离子电池领域的应用,问答的硬伤有两个:

  • 我对这模型为什么能 work 不清楚。当他惊讶于我的样本量如此小但结果还不错的时候,我也发现了这个问题,我从头到尾都没有太深究
  • 我对毕设的细节(无论是代码还是模型细节)忘得一干二净,比如问到我的模型里 pytorch 用于反向传递的代码,我是完全忘了,并且那个 kaggle 赛题我是直接用的 sklearn,封装程度很高,我甚至没意识到这方面的疏漏,实际上准备的时候我应该用pytorch 重写一遍那个文本分类的回归模型,但总归是有遗漏

    再再再回忆,答得真的不咋地

总结

准备的内容一个没用上,无论是那个 Kaggle 的 nlp 赛题还是这老师的论文,也体现了我换位思考的不足:

  • 他可能真的不要求你是 DL 领域的大师,对 nlp 的成果和发展动态如数家珍,或者能对他的论文侃侃而谈(我确实为想要表现出这种从容淡定而准备了某些内容,但总之没什么用处)
  • 也可能不要求你在科研领域“开箱即用”,不需要他指导就能科研自动化(比较玄学,我不太能确定如何从一场面试里识别出这种能力,有论文是最有说服力的)
  • 他更想要一个真心想搞他这个方向研究的学生,但无论是我前面手写算法的表现和简历内容问答,都体现了我对 ML 和 DL 的基础不扎实,并且我的研究兴趣不一定真的在他的方向这边(很遗憾事实确实如此…我比较贪心,想要 AI 和 System 两手抓)

其次,关于我的简历,只要是放上去的内容必须要仔细回顾,无论是整体设计还是细节,都要很熟练,与其准备一个新的项目还不如认真回顾自己之前做过的东西

以后

没能进入这个做NLP的组是挺遗憾的,因为方向不错,并且这老师人也真不错(前两位老师甚至没回复我邮件呢…),没能抓住这次机会
明天是周末了,趁这周末好好找一下合适我方向的老师吧,再多发一些邮件,希望能有愿意要我的老师
等这次选完导师,尘埃落定之后,再启动其他的事情吧…