本人某211高校自动化研二渣硕,听闻今年师兄师姐算法岗、尤其视觉CV已经“灰飞烟灭”了,想着自己无好论文、好比赛经历,天天在实验室划水,不赶紧找份实习,真心害怕简历的空白致明年找不到工作。
之前在学校主要做的是GAN生成对抗网络方面,也没做出个啥所以然来,正巧看到某大厂招聘GAN方向的日常实习生,就投了,一星期后接到电话一面,此为背景。
话不多说,面经奉上:
1,先简单自我介绍。
......(略)
2,平时主要接触GAN是吧,可以说说它的数学原理吗?
答:首先,GAN是一个生成模型,它的目的是想要将一个随机高斯分布或者其他分布的噪声向量通过一个生成网络得到一个和真的数据分布差不多的生成分布。训练的时候,怎么衡量这个生成分布和目标分布差不多呢?它是通过又构造一个叫判别器的分类神经网络来衡量。
然后,有了这两个网络,数学原理我们从它的目标函数来说:目标函数是一个极大极小问题。1)对于生成数据,需要它越逼真越好,所以训练生成器时,判别器接收后极大它的概率输出;但是在训练判别器时,判别器接收这个假样本后需要极小它的概率输出,这就是所谓对抗的意思。2)对于真实数据,训练判别器时,为了保持它有意义,当然也是极大化它的概率输出;(可以用torch.nn.BCELoss二分类交叉熵损失函数实现)。
其实GAN利用的数学原理是,一句话总结就是通过一个JS散度来衡量两个分布的差异,然后最小化这个差异。
因为当判别器最优时,我们通过求导对抗损失,也就是以判别器D为函数变量,求极值,可以发现D=P_real/(P_real+P_fake),把它代回函数,解是一个由两个KL散度组成的JS散度,这个散度是衡量两个分布差异的。我们需要对这个散度求极小,也就是让两个分布差异最小。
3,GAN是怎么训练的?
不同的GAN训练可能不太一样,如果是原始GAN,可以先训练D......(略)
4,介绍下LSGANs?
LSGANs的英文全称是Least Squares GANs,针对的是标准GAN生成的图片质量不高以及训练过程不稳定这两个缺陷进行改进。改进方法就是将GAN的目标函数由交叉熵损失换成最小二乘损失,而且这一个改变同时解决了两个缺陷。
5,为什么最小二乘损失可以提高生成图片质量?
GANs包含两个部分:判别器和生成器。判别器用于判断一张图片是来自真实数据还是生成器,要尽可能地给出准确判断;生成器用于生成图片,并且生成的图片要尽可能地混淆判别器。作者认为以交叉熵作为损失,会使得生成器不会再优化那些被判别器识别为真实图片的生成图片,即使这些生成图片距离判别器的决策边界仍然很远,也就是距真实数据比较远。这意味着生成器的生成图片质量并不高。为什么生成器不再优化优化生成图片呢?是因为生成器已经完成我们为它设定的目标——尽可能地混淆判别器,所以交叉熵损失已经很小了。而最小二乘就不一样了,要想最小二乘损失比较小,在混淆判别器的前提下还得让生成器把距离决策边界比较远的生成图片拉向决策边界。
6,有什么训练GAN的经验吗?
......(结合平时经历,瞎扯了下,忘了怎么回答,有点乱,略)
7,CycleGAN应该知道哈,能说说循环一致损失原理吗?
(比较简单,略)
8,python还是C++用得多呢,写两道题哈
(略,两道leetcode简单题)
9,考一些基本的卷积神经网络问题
比如BN,dropout等(略)
10,我这边没什么问题了,后面的面试或流程具体情况,这两天会由HR通知,你有什么问题想了解的吗?
问了公司主要用GAN在什么应用场景,以及如果通过还有几论面试(一共需要三轮)。
总结
整体下来,感觉难度还行,主要就是语言表达能力较差吧,上一次面试还是研究生入学面试2333,有点紧张,有很多想表达的都没说好。。保佑一面能通过吧