匿名 AI 医学公司一面:从 SVM 到 Transformer、ViT 的基础拷打
- 轮次
- 一面
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 你看过我的论文吗?
- 请做一下自我介绍。
- 本科是人工智能专业,学过什么样的专业课?
- 模式识别学了什么?学过哪些人工智能算法?
- 介绍一下 SVM。
- SVM 这么好的分类模型,为什么后面多模态/多分类不用它了,而是研究出了新的算法?
- 了解计算机视觉吗?什么是计算机视觉?
- 除了分类(classification),计算机视觉还有一个任务是什么?
- 随着 kernel 减少 channel 会增大,channel 最开始是几?
- Transformer 是什么?为什么要有 Transformer,相比于 CNN 解决了什么问题?
- CNN 有梯度爆炸,但是 ResNet 解决了这个问题,那为什么还要有 Transformer?
- 什么是 Vision Transformer?
- 说下 RNN 是什么?
- Vision Transformer 处理了什么问题?输入是什么,输出是什么?处理图像要分块,为什么要分块?
- 怎么理解 Transformer?自注意力机制是什么?
- 说下你是怎么用 Transformer 的,人们是怎么用 Transformer 的?
- GPT 用的是编码还是解码?
- 那谁用的是编码?BERT 是干嘛的,用的是什么,输入是什么,输出是什么?
- 本科发过论文吗?
- 如果我给你一篇文献,做 paper review,你会怎么做?
- 怎么用 AI,网页端还是其他方式?
- 能访问你们学校的图书馆资源吗?
《参考解析》
SVM 的核心与它为什么不再是主流选择
SVM 的思路是找一个能把两类样本分开、并且间隔最大的超平面;真正支撑它的是核技巧——通过核函数把样本隐式映射到高维空间,在这个空间里线性可分,从而用线性分类器解决非线性问题,同时不需要显式算出高维坐标。理论上它由支持向量决定决策边界,对少量高维样本(比如文本的 TF-IDF 特征、小样本医学数据)表现稳、有较好的泛化保证,这也是它在深度学习之前长期占主流的原因。
但它在新任务上被取代有几个现实原因。① 线性假设的局限:面试官给出的解释是对的——原始空间的线性边界表达力有限,SVM 靠核函数弥补,但核的选择和参数(C、gamma)高度依赖经验,特征不好时效果上限明显;而深度网络能自己从数据里学出多层非线性特征,不需要人去设计核。② 规模问题:标准 SVM 的训练复杂度随样本数大致是二次到三次增长,核矩阵的存储也是 O(n²),几十万条以上就难以承受;深度模型靠 mini-batch 和小样本梯度下降能扩展到海量数据。③ 多分类与多任务:SVM 本质是二分类器,多分类要靠 one-vs-rest / one-vs-one 拼装,类别一多代价高且各类别不共享信息;神经网络天然输出多类分布,还能多任务联合训练。④ 端到端与预训练:现代多模态任务需要统一的表示空间(图像、文本、音频对齐),SVM 只是最后一层分类器,无法参与表示学习。补一句会显得更完整:SVM 并没有「错」,在小样本、强特征工程、需要可解释边界的场景仍然好用,只是不再是通用首选。
Transformer 相比 CNN/ResNet 解决了什么
CNN 的两个关键归纳偏置是局部性和平移等变性:卷积核只看邻域、参数在空间上共享。这让它在图像上非常高效,但也带来两个限制——感受野要靠堆层数慢慢扩大,远距离的两个像素要经过很多层才能互相影响;同时卷积核权重是固定的,无法根据输入内容动态决定「该关注谁」。
Transformer 用自注意力替换了这种固定的局部连接:序列里每个位置都能直接和任意其他位置交互(路径长度是 O(1)),注意力权重由当前输入算出来,是内容相关的动态权重。这带来三点实际收益:长距离依赖建模更好;训练时可以并行处理整个序列(不像 RNN 必须逐步递推,这一点常被追问「为什么不是 LSTM」);以及可扩展性——结构规整、易于加深加宽,喂更多数据和算力收益持续,这是它成为主流架构的根本原因。
至于「ResNet 不是已经解决了梯度爆炸/退化吗,为什么还要 Transformer」,要点是把两个问题分开:ResNet 的残差连接解决的是深层网络的优化与梯度传播问题,Transformer 同样靠残差 + LayerNorm 才训得动深;而 Transformer 带来的是建模能力的范式变化(全局动态交互 + 可并行 + 可扩展),ResNet 再深也仍然是局部卷积的堆叠。二者是正交的,现代视觉模型里两者经常一起出现。
ViT:把图像当序列,patch 就是 tokenizer
Vision Transformer 的做法很直接:把一张 H×W 的图像切成固定大小的 patch(如 16×16),每个 patch 拉平后经过一个线性投影得到一个向量,这个向量就相当于 NLP 里的一个 token 的 embedding;再给每个位置加上位置编码(因为自注意力本身对顺序不敏感,丢了位置信息图就散了),在最前面拼一个可学习的 class token,整串送进标准 Transformer Encoder,最后用 class token 的输出接一个分类头。输入是一张图,输出是类别(或检测/分割头的预测)。
为什么要分块?本质是复杂度与信息粒度的权衡。自注意力的计算量随序列长度是平方增长,如果按像素做 token,一张 224×224 的图就是 5 万多个 token,注意力矩阵根本算不动;切成 16×16 的 patch 之后序列长度降到 196,才落到可训练的范围。同时每个 patch 内部本身有较强的空间局部相关性,先用线性投影把它压成一个语义向量,等于让模型在「块」这个粒度上做全局交互,兼顾了效率与表达。这也解释了它的已知短板和后续演进:patch 内部细节被抹平,所以在小数据集上不如 CNN、对细粒度任务需要更高分辨率或层次化设计(Swin 这类多尺度窗口注意力就是在这个方向上补的),而 patch 大小、分辨率变化时位置编码的插值也是常被追问的工程细节。
GPT 用解码、BERT 用编码:结构差异来自训练目标
GPT 是 decoder-only:每个 token 只能看到它左边(因果掩码),训练目标是「预测下一个 token」。因为不能看未来,它天然适合生成,也适合把任意任务改写成「续写」的形式,且推理时可以用 KV Cache 逐 token 高效解码。
BERT 是 encoder-only:双向注意力,训练目标是掩码语言模型(随机盖住 15% 的 token 去还原)加上下一句预测。双向上下文让它在理解类任务(分类、抽取、句对匹配)上很强,但它不是为生成设计的(训练时看到的是被 mask 的句子,且没有因果结构),要生成得额外改造。
Transformer 原始论文的结构是 encoder-decoder:encoder 用自注意力编码输入,decoder 用带因果掩码的自注意力 + 交叉注意力去attend encoder 的输出,这是机器翻译这类序列到序列任务的标准形态(T5、BART 也是这一路)。所以「谁用编码、谁用解码」的答案要带上任务视角:需要生成长文本、且希望结构简单可扩展 → decoder-only(GPT 系、多数现代 LLM);只需要理解/编码 → encoder-only(BERT 系,常用来做 embedding 与 rerank);输入输出都是序列且需要显式对齐 → encoder-decoder。面试官如果追问「为什么现在大家都用 decoder-only」,可以从训练目标统一(任何任务都能表述成续写)、推理时的 KV Cache 工程成熟、以及 scaling 行为可预测这三点来答。
paper review 怎么做:从「读懂」到「能判断」
拿到一篇文献,可复用的流程是:① 先定位——读标题、摘要、图表和结论,判断它属于哪个子领域、解决什么问题、声称的贡献是什么(新问题、新方法、新数据、新结论);② 弄清方法与假设——核心创新点在哪一步,依赖哪些前提(数据分布、标注质量、算力规模),公式与实现细节是否自洽;③ 看实验是否支撑结论——baseline 是否公平且够强、数据集与指标是否合适、有没有消融验证每个模块的贡献、有没有报告失败案例与显著性;④ 找边界——结论在什么条件下不成立、能不能迁移到自己的场景、作者自己承认的局限是什么;⑤ 形成判断——这篇工作相比已有方案真正的增量、可复现性、以及对自己课题的可用之处,最后写出一页以内的结构化笔记(问题—方法—证据—局限—可借鉴点)。
面试场合答这题,最好再补两点工程习惯:读之前先判断期刊/会议与引用情况做质量预筛;读完把关键公式和实验设置复现一遍(哪怕只是跑通作者的代码或在小数据上验证一个结论),比只写读后感更能说明你真的读懂了。