尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

商汤2018校招研究员笔试复盘:从数学推导到视觉算法

商汤2018校招研究员笔试复盘:从数学推导到视觉算法 提到2018届的AI校招商汤科技的笔试是绕不开的话题。那时候深度学习岗位的竞争已经白热化商汤作为计算机视觉方向的第一梯队公司笔试筛选的严格程度在圈内出了名。尤其是“研究员”这个岗位和普通的算法工程师不一样它更看重你对模型原理的理解深度、数学推导的扎实程度以及快速把想法落地成代码的能力。我当年参加的是第一场笔试考完最大的感受就是这绝不是刷几道LeetCode就能应付的考试它更像是把研究生阶段的数学课、机器学习课、深度学习课浓缩成一份两小时的卷子。这篇文章会把商汤2018校招研究员笔试第一场的考察逻辑、核心知识点、题型特点以及我踩过的坑和复盘心得完整拆开来讲。无论你是准备面试视觉算法岗还是想了解这类笔试到底怎么筛人这份复盘都值得仔细看。1. 这场笔试到底在考什么商汤研究员岗位的筛选逻辑1.1 研究员和算法工程师的笔试差异很多人在准备校招时会把“算法岗”当成一个统一的概念去准备这其实是最大的误区。商汤的“研究员”岗位定位更偏向于能阅读前沿论文、改进模型结构、设计实验方案的人而不是单纯调用现成框架、调参跑数据的工程师。这个定位直接决定了笔试的考察方向数学推导、模型原理、视觉任务的经典方案这些内容占据了绝大部分分值。笔试里出现的大量数学和推导题本质上是在筛选“能不能理解算法为什么有效”的人。举个例子一道题可能让你手动推导Softmax交叉熵的反向传播这在实际工作中很少需要手写但面试官希望通过这道题看你是否真正理解梯度的来龙去脉——因为研究岗位需要你改进模型时每一步操作都要能解释清楚数学上的依据。1.2 笔试的整体结构与题型分布第一场笔试大概是两小时题量不小题型大致分为四类选择题、简答/推导题、编程题偶尔会有一些判断题。我根据自己的回忆整理了一份大致的题型分布参考价值比较大题型大致题量考察重点时间占比建议选择题15-20道数学基础、机器学习理论、深度学习常识30%简答/推导题3-5道公式推导、模型原理、方案设计40%编程题1-3道数据结构与算法、CV常见操作实现30%注意这个时间分配建议是我考完之后最大的教训。选择题看起来分值小但知识点覆盖广如果每道题磨太久后面的推导题和编程题会非常被动。第一场笔试最明智的策略是快速扫描整张卷子先把有把握的选择题用最短时间解决掉把完整的大段时间留给推导题和编程题。1.3 2018年视觉方向的技术背景回顾2018年计算机视觉正处于一个非常热闹的时期。图像分类方面ResNet已经是标配的backboneDenseNet也刚提出不久目标检测领域Faster R-CNN、SSD、YOLO这几大流派打得火热FPN刚刚被提出分割方向FCN、U-Net、Mask R-CNN是常考内容。GAN也已经火起来了但笔试里直接考GAN公式的还比较少见更多是问它的基本思想。这个背景意味着笔试题目会比较集中在“经典模型的理解”上而不是追逐最新的论文细节。商汤笔试更看重你能否把ResNet的残差结构解释清楚、能否说明Faster R-CNN的两阶段思想和anchor机制、能否对比YOLO和SSD的优缺点。这些内容在当年是视觉算法岗的“必修课”放在现在依然是理解深度学习视觉任务的基石。2. 数学与机器学习基础笔试的“守门员”2.1 线性代数特征分解与SVD是绝对高频商汤笔试的数学部分线性代数占比很重其中特征值分解、奇异值分解SVD相关题目出现概率极高。原因很简单这些是PCA降维、矩阵低秩近似、图像压缩、协同过滤等算法的数学根基而视觉算法研究员在日常工作中经常要和矩阵运算打交道。笔试中典型的考法有几种一是给出一个矩阵求特征值或特征向量二是问SVD和特征值分解的区别三是问PCA降维的数学原理。以PCA为例很多人的回答停留在“PCA是让投影后方差最大”但笔试更希望你写出完整的推导过程先中心化数据然后构造协方差矩阵对协方差矩阵做特征值分解取最大的k个特征值对应的特征向量组成投影矩阵。我建议准备这类题目的时候不要只记结论。把矩阵求导的常用公式也一并复习了因为后面深度学习反向传播的推导题会用到。常见的包括∂(xᵀAx)/∂x (AAᵀ)x∂(||Ax-b||²)/∂x 2Aᵀ(Ax-b)等。2.2 概率论与最大似然估计推导题的主战场概率论部分最大似然估计MLE几乎是必考内容。笔试最常见的是让你对某个常见分布做参数估计比如高斯分布或伯努利分布。别觉得简单真的手推一遍和看一遍完全是两码事。以高斯分布的MLE为例完整推导过程是写出似然函数取对数对均值μ和方差σ²分别求导并令其为零解方程得到估计值。笔试的时候要注意书写规范每一步变换都要写清楚因为阅卷会看推导过程的严谨性。另外一个容易忽略的考点是最大后验估计MAP它和MLE的差别在于是否引入了参数的先验分布。笔试可能会让你比较两者在正则化上的联系——L2正则化等价于高斯先验下的MAP估计L1正则化等价于拉普拉斯先验下的MAP估计这个结论在机器学习面试里也是高频考点。贝叶斯公式也是必考常和朴素贝叶斯分类器结合。给定一组训练数据和特征条件独立假设让你计算某个样本属于哪个类别的后验概率。这类题目计算量不大但容易在条件概率的细节上出错做题时建议先把已知条件列成表格再计算。2.3 经典机器学习模型对比知其然更要知其所以然除了数学经典机器学习模型也是选择题和简答题的常客。印象比较深的是SVM、逻辑回归LR、决策树/GBDT这三类模型被翻来覆去地考核心是考察你对模型本质的理解。SVM部分高频考点包括核函数的作用、软间隔中C参数的意义、支持向量的含义。有一道选择题问“为什么引入核函数能让SVM处理非线性分类”选项里有一个很迷惑的说法是“核函数把数据映射到高维空间并显式计算了内积”这个表述错在“显式计算”——核技巧的核心恰恰是隐式地在高维空间中计算内积不需要显式地做特征映射。LR和SVM的对比也常考。两者都是线性分类器但LR输出的是概率基于极大似然估计SVM输出的是决策边界基于最大间隔。LR对所有样本都有损失SVM只关心支持向量附近的样本。另外一个特别经典的推导题是为什么LR的损失函数用交叉熵而不是均方误差MSE因为MSE的梯度中含有sigmoid的导数项在预测值接近真实值时梯度会趋近于零导致收敛极慢而交叉熵损失配合sigmoid的梯度表达式简洁不会出现梯度消失的问题。GBDT和随机森林的区别也是必考。我整理了一个简表笔试前反复看几遍非常有用对比维度随机森林GBDT基学习器决策树通常深树决策树通常浅树样本采样Bootstrap有放回采样每轮使用全部样本训练方式并行独立训练串行每轮拟合残差目标降低方差降低偏差对异常值较鲁棒敏感2.4 一个容易翻车的经典推导交叉熵 vs 均方误差我在准备笔试时把交叉熵和MSE的梯度推导完整写了好几遍这个方法非常推荐。以二分类为例sigmoid输出p真实标签为y交叉熵损失 L -[y log p (1-y) log(1-p)]对权重w求梯度代入p σ(wᵀx)最终可以得到 ∂L/∂w (p-y)x。整个推导链清晰结果简洁。同样情况如果用MSEL (p-y)²则 ∂L/∂w 2(p-y)p(1-p)x。注意多了一项p(1-p)当p十分接近0或1时这一项接近零导致梯度非常小学习速度大幅下降。这个对比不仅笔试常考面试时也经常被追问值得反复练习直到能不看笔记快速推导出来。3. 深度学习与计算机视觉核心拉开差距的关键段落3.1 经典CNN结构演进从AlexNet到ResNet的必考知识点商汤笔试对CNN经典结构的考察非常细致几乎每年都围绕AlexNet、VGG、GoogLeNet、ResNet这几条主线展开。选择题会问你VGG相比AlexNet的核心改进是什么答案是“使用多个小卷积核堆叠替代大卷积核”既减少了参数量又增加了非线性表达能力。GoogLeNet的Inception结构也是高频考点。它的核心思想是在同一层使用多种尺寸的卷积核并行处理然后拼接特征图这样能捕捉不同尺度的信息。这类结构题不仅考你背没背过模型更考你是否理解设计动机。ResNet的残差结构就更不用说了笔试可能会让你解释为什么残差连接能缓解梯度消失——因为恒等映射的梯度为1反向传播时梯度可以直接通过跳跃连接传回浅层避免了连乘导致的梯度衰减。关于感受野的计算笔试曾经出现过这样的题一个输入大小为32x32的特征图经过一个3x3卷积padding1stride1后再经过一个2x2最大池化stride2问输出尺寸和感受野变化。这类题考察的是对卷积和池化公式的掌握程度公式很简单out (in 2*padding - kernel_size) / stride 1。但要注意感受野不是简单累加需要从最后一层往前反推准备时建议专门练习几道。3.2 训练技巧高频考点BatchNorm、Dropout与正则化深度学习的训练技巧是选择题的密集得分区最常见的是过拟合相关的考点。数据增强、L1/L2正则化、Dropout、早停、BatchNorm这些都是选择题的常客。BatchNorm是重点中的重点笔试常考的有两个角度一是它为什么能加速训练答案是它缓解了内部协变量偏移Internal Covariate Shift让每一层输入分布相对稳定从而可以使用更大的学习率二是训练和测试阶段的差异——训练时使用当前mini-batch的均值和方差测试时使用训练阶段滑动平均得到的全局统计量这个细节很多人会忽略。Dropout在2018年的笔试里已经不再只考概念了而是会问“训练时和测试时的行为差异”。答案核心是训练时以概率p随机丢弃神经元并对保留神经元的输出除以(1-p)做尺度补偿测试时不丢弃任何神经元直接使用完整网络。这个知识点的变体是“为什么Dropout可以看作集成学习”因为每次随机丢弃都相当于训练了一个不同的子网络测试时相当于多个子网络的平均。关于正则化我记得有一道题问L1正则化和L2正则化在解的特征上有什么不同答案是L1产生稀疏解L2产生接近于零但不完全为零的解。如果再深入一点面试官可能会问你为什么L1产生稀疏解这涉及优化几何L1正则项在零点有角点更容易让最优解落在坐标轴上。3.3 视觉任务主流方案检测、分割、跟踪的经典思路视觉任务部分是商汤笔试的“主场”毕竟商汤靠视觉起家。目标检测是绝对的重点Faster R-CNN的流程几乎是必考题先用backbone提取特征图再通过RPNRegion Proposal Network生成候选框RPN中每个anchor点有多个不同尺度和长宽比的anchor框然后对候选框做RoI Pooling最后接分类和回归分支。笔试可能会让你对比Faster R-CNN和YOLO的优缺点。两阶段检测器精度高但速度慢一阶段检测器速度快但精度略低这是最基本的回答。但想拿高分还需要补充细节Faster R-CNN通过RPN生成的候选框数量多正负样本不均衡问题相对可控YOLO则将检测视为回归问题直接预测边界框和类别速度优势明显但难以处理小目标和密集遮挡场景。关于anchor机制一道印象很深的选择题是假设特征图每个位置有3种尺度和3种长宽比共9个anchor输入图像尺寸为800x600下采样倍数为16问你RPN大约能生成多少个候选框。计算特征图尺寸50x37.5向下取整大概50x37每个位置9个anchor总数约50×37×9 16650个。这类题考的就是你是否真正理解anchor是在特征图每个像素位置上生成的。分割方向FCN是基础考点要理解它是如何把全连接层替换为卷积层从而接受任意尺寸输入并输出像素级预测图。U-Net的编码器-解码器结构和跳跃连接也是高频考点笔试可能问你它为什么适合医学图像分割——因为跳跃连接能把浅层的高分辨率特征和深层的语义特征融合对小目标和边缘细节更友好。4. 编程与推导题真正考验动手能力的环节4.1 编程题风格算法题与视觉操作题并重编程题在商汤笔试中的比重因年份略有浮动2018年第一场大概有1-3道难度不会特别高主要以数组、字符串、链表、二叉树这些常规数据结构为主。但和一般互联网公司的编程题不同商汤偶尔会考一些和CV紧密相关的操作实现比如计算两个矩形框的IoU、实现NMS非极大值抑制、实现图像最近邻插值或双线性插值。以计算IoU为例核心逻辑是先求两个矩形的交集区域坐标交集矩形的左上角是两个矩形左上角的较大值右下角是两个矩形右下角的较小值然后计算交集面积除以并集面积。这段代码不难但边界条件容易出错——如果两个矩形不相交交集宽或高可能为负要记得归零。NMS的实现也类似核心是持续挑选得分最高的框并抑制与它IoU超过阈值的其他框。如果你平时刷题用的是Python笔试时也尽量用Python写代码简洁、不容易出低级错误。但要注意输入输出格式商汤的线上笔试系统对输入输出的要求比较严格建议提前熟悉牛客网或赛码网的OJ模式避免因为不熟悉输入解析而丢分。4.2 手推公式的套路以Softmax加交叉熵反向传播为例推导题是研究员笔试最拉分的版块因为它直接考察数学能力和对深度学习的理解深度。最经典的一道题就是让我推导Softmax分类器加上交叉熵损失后的梯度。题目的设定通常是输入向量z Wx b经过Softmax得到概率分布p softmax(z)真实标签为one-hot向量y交叉熵损失 L -Σ yᵢ log pᵢ。推导的关键步骤分两层先求损失对Softmax输入的梯度∂L/∂zᵢ。推出来的结果是 ∂L/∂zᵢ pᵢ - yᵢ这个结果简洁且意义清晰——模型预测概率pᵢ和真实标签yᵢ的差异就是梯度。接着再往前传∂L/∂W (p - y)xᵀ梯度形式非常干净这也是为什么在分类任务中Softmax配合交叉熵是训练最稳定的组合。这道题几乎年年出现我强烈建议在笔试前默写至少两遍完整推导过程确保每一个中间步骤都写得出来。实际考试时不要跳过中间化简步骤阅卷是按过程给分的。4.3 现场时间分配经验先拿稳再攻坚作为一个参加过第一场笔试的人我真心建议不要把时间均匀地分配给每一道题。选择题和判断题的答案确定性强做对了就拿分应该快速推进推导题和编程题虽然分值高但耗时也长需要预留大块时间。我当年采用的策略是这样的拿到卷子先用3分钟整体浏览一遍对题目难度有个初步判断。然后从选择题开始做给自己限定每道题不超过2分钟拿不准的先标记跳过。简答和推导题按顺序做一般先做自己有把握的公式推导遇到卡壳的先写关键步骤和思路。编程题放在最后做因为不管前面的题做得怎么样保住编程题的完整代码输出才是最重要的。这里特别提醒一个容易忽略的细节笔试系统的代码编辑器和本地编译器不一样很多题需要自己处理输入数据。有些同学平时在本地用IDE写习惯了完全不处理输入输出直接提交一个只有函数实现的代码结果0分这个坑一定不要再踩。5. 笔试中常见的坑与复盘心得5.1 我踩过的几个典型坑第一个坑是审题不仔细。有一道选择题问的是“以下哪个方法不能用于防止过拟合”选项里同时出现了L2正则化和数据增强我扫了一眼直接选了数据增强但题目问的是“不能”正确答案其实是数据增强——不我再仔细回忆一下那题的四个选项是L2正则化、Dropout、增加训练数据、提高模型复杂度正确答案明显是“提高模型复杂度”。这类题考的就是仔细程度读题时建议把“不能”“错误”“不属于”这类否定词圈出来。第二个坑是推导题书写太跳步。我自认为推导过程烂熟于心所以在MLE的推导中直接跳过了取对数的步骤结果最后的得分比预期低很多。后来复盘才明白笔试的推导题是按步骤给分的跳步丢分务必把关键中间步骤写全。第三个坑就是前面说的编程题输入解析。我当时有一道题要求读入多行数据第一行是测试用例组数后面每组第一行是数组长度第二行是数组元素。我在本地测试时用自己写死的数据没问题但提交后不停报错就是因为没有正确处理换行和空格分隔。后来我习惯性地在写完核心逻辑后先写一个简单的input解析模块再开始做题这个习惯帮我避免了很多线上OJ的问题。5.2 一道典型的“陷阱题”复盘那年笔试有一道题让我印象很深题目大意是在类别极端不均衡的二分类问题中正样本占1%负样本占99%模型的预测准确率达到99%。问这个模型是否优秀以及应该用什么指标评价。这个题看起来简单但错误的选项特别有迷惑性。如果你只说“模型不优秀应该看F1分数”只能拿到一半分。更完整地回答应该是准确率在这个场景下没有意义因为全部预测为负样本就能达到99%的准确率应该关注精确率、召回率、F1、PR曲线或AUC指标。更进一步如果考察的是排序性能应使用AUC如果考察的是少数类的识别能力应关注召回率和PR曲线。这个题反映出一个重要趋势商汤笔试不单考“你会不会用某个指标”而是考“你能不能针对特定的数据场景选择正确的评价方式”。这和实际工作中遇到的不均衡问题高度契合。5.3 笔试复盘这样备考效率最高如果你准备的是类似的研究员岗位笔试我的核心建议有三条。第一基础数学推导必须达到“默写”水平。线性代数、概率论、最优化这三块的常见推导特征分解、SVD、MLE、MAP、梯度下降、拉格朗日乘子法要在纸上反复默写直到每个中间步骤都无需思考就能写出来。这里强调“纸上默写”是因为很多人眼睛看会了一动手就卡壳。第二深度学习经典模型要能“讲清楚设计动机”。不要只背网络结构要能回答“为什么这样设计”。ResNet为什么用残差因为恒等映射更容易学习。Faster R-CNN为什么要有RPN因为要用网络替代传统的Selective Search来生成候选框。BatchNorm为什么有效因为它缓解了层间分布变化让训练更稳定。这种“为什么”式的思考方式是笔试简答题拿高分的关键。第三编程题除了刷常见算法还要专门练习CV相关的算子实现。IoU、NMS、双线性插值、卷积操作、图像缩放这些都是短小精悍的编码题非常适合作笔试考察。我建议把每段代码控制在30行以内熟练掌握边界条件处理笔试时才能快速写出无bug的版本。6. 写在最后这场笔试给我留下的真正价值回过头看商汤2018校招研究员笔试第一场给我最大的收获不是拿到多少分而是让我意识到“研究型算法岗位”和“开发型算法岗位”在能力要求上的本质差异。日常调框架、跑模型和深入理解模型内部的数学原理、推导梯度、设计实验方案是两种完全不同的能力维度。我清楚记得当时复习到SVD的时候觉得这玩意除了做题还能有什么用直到后来有一次需要做大规模特征矩阵的降维压缩才发现当年笔试考的东西直接在项目里派上了用场。很多笔试的“知识点”在短期看来是为了过考试放到更长的时间尺度上其实是在帮你搭建一个扎实的技术底座。如果你正在准备商汤或者其他视觉方向研究岗位的笔试最后再分享一个小技巧笔试前找一两篇当年的经典论文精读比如ResNet或Faster R-CNN不要只看摘要而是把网络结构和损失函数部分逐字读透。商汤笔试的最后一道简答题经常和当年热门论文强相关精读一篇论文的收益可能比盲目刷十套卷子都大。
返回列表