ARTICLE DETAIL

资讯详情

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

网易深度学习算法实习生笔试题解析:数学、机器学习与代码能力

网易深度学习算法实习生笔试题解析:数学、机器学习与代码能力 前阵子有同学在准备大厂算法岗实习翻出网易2018年的深度学习算法实习生笔试题来问我感受。说实话那年头的题目跟现在很不一样没有LLM八股没有手撕Transformer考的东西反而更偏向基本功。整张卷子大致分三块客观题单选多选、编程题、问答与设计题。客观题里数学、机器学习、深度学习基础大约占七成剩下的是数据结构、概率和简单算法编程题一般两到三道考代码熟练度和边界处理问答设计题则直接把手推公式和模型设计拉到台面上。很多人误以为“深度学习”和“算法”这两个关键词意味着题目很难、很偏实际上落到卷面上核心诉求就四件事数学、机器学习、深度学习基础、代码能力。为什么这么设计我后来想了想实习生不同于社招面试官不指望你来了就能独当一面但希望你有扎实的基础、能快速上手、踩坑了能自己排查。所以笔试的重点不是“你会不会某个冷门技巧”而是“你的底层学科功底是否撑得起自驱成长”。网易这套题给我最大的感受就是平衡——它不追求偏难怪而是把深度学习算法岗必备的知识面铺开看你在有限时间里能稳稳拿下多少。1. 笔试整体印象网易考的不是刷题量是基本功1.1 网易2018深度学习算法实习生笔试在考什么整张卷子分客观题、编程题、问答设计题三块。客观题里面概率统计、线性代数、机器学习、深度学习基础占了大头这部分看起来是“选择题”但实际上比填空还狠因为错误选项往往设置得非常接近如果你对概念的理解停留在“大概知道”的层面很容易掉坑。编程题不是纯LeetCode风而是更偏向工程实现偶尔会结合一点字符串、排序、数据结构题量不大但边界条件抠得很细。问答设计题是区分度最高的部分它直接考察你能否把深度学习的知识组织成一个完整方案从数据处理到模型选择到评估指标都要讲清楚。这套题放在2018年的时代背景下正好赶上深度学习岗位的招聘开始从“科研向”转向“工程向”的阶段。所以网易没有去考特别前沿的模型而是把LR、SVM、CNN、RNN、softmax这些基石知识反复揉搓考察的就是候选人有没有扎实的底子。1.2 考点地图先知道考什么再决定怎么准备我习惯把这类笔试的知识点画成一张地图复习的时候才不会东一榔头西一棒子。模块典型题目优先级概率统计贝叶斯公式、期望、方差、常见分布高线性代数矩阵乘法、特征值、矩阵求导高机器学习基础LR、SVM、决策树、聚类、集成学习高深度学习基础CNN、池化、BN、Dropout、损失函数最高数据结构与算法排序、字符串匹配、链表、二叉树高编程题边界条件、复杂度、代码风格高模型设计题分类/回归/序列任务的pipeline中这里插一句很多人复习时喜欢先刷编程题结果发现数学题不会做又回头补数学。我的建议反过来先把概率、线代、机器学习、深度学习概念过一遍再集中刷编程题和成套真题。基础不牢刷多少题都是空中楼阁。2. 数学和机器学习基础笔试的“送分题”与“陷阱题”2.1 概率统计几乎每道客观题都在考建模直觉网易这套笔试里概率统计占的比例不低而且题目很“活”。举个例子题目里经常出现这种表述“某种检测方法的准确率是99%误报率是1%人群患病率是0.1%现在某人检测结果为阳性问他真正患病的概率是多少”这本质上就是个贝叶斯题。设 P(患病)0.001P(阳性|患病)0.99P(阳性|健康)0.01那么P(患病|阳性) 0.99×0.001 / (0.99×0.001 0.01×0.999) ≈ 0.0902算出来只有9%很多人第一反应是99%。这个题考察的不是公式背得熟不熟而是你能不能把条件概率当成一种“证据更新”的思维模型先验概率低的时候即便检测看起来很准后验也未必高。深度学习里很多问题本质上也是概率推断softmax输出就是一类概率分布所以考概率不是在为难你而是在筛掉那些只会调库不思考的人。同类题型还包括抛硬币算期望、随机变量的数字特征、正态分布/伯努利分布/泊松分布的均值和方差。复习时把贝叶斯公式、全概率公式、样本均值与样本方差的区别摸透这些是高频考点。2.2 线性代数与矩阵求导手推梯度之前先过这关深度学习反向传播说白了就是链式法则乘以一堆矩阵求导。如果连“标量对矩阵求导”都搞不清楚手推softmax梯度、全连接层梯度就会全程懵。网易的题里比较常见的考法是给一个 y Wx b已知损失 L 对 y 的梯度求 L 对 W 的梯度。这类题有个万能套路先看梯度矩阵的形状再按维度配平。假设 x 是维度为 D×1 的向量W 是 K×D 的矩阵y 是 K×1。已知 dL/dy 是 K×1那么 dL/dW 的尺寸必须和 W 相同也就是 K×D。因为 y_i sum_j W_ij x_j对 W_ij 求导只影响 y_i所以 (dL/dW)_ij (dL/dy)_i · x_j用矩阵写就是 (dL/dy) · x^T。这个“先定形状再凑结果”的思路笔试考场上能省下大量时间。特征值、特征向量、SVD这些知识点也常出现在选择题里考察角度通常是PCA、矩阵分解、奇异值压缩这些应用场景不需要你现场证明但得知道基本定义和意义。2.3 经典机器学习算法的选择题陷阱机器学习基础是另一个大头。网易爱考LR逻辑回归、SVM、决策树、随机森林、k-means这些经典算法但考法不是让背推导而是考“理解偏差”。比如LR的损失函数为什么用交叉熵而不是MSE因为MSE对sigmoid输出求梯度时会有饱和区梯度趋近于0收敛慢而交叉熵配合sigmoid的梯度形式简单且没有饱和问题。SVM为什么要引入核函数为了在低维线性不可分的数据上通过隐式映射实现高维线性可分同时避免显式计算映射。决策树用信息增益还是基尼指数本质区别是什么一个是熵减的角度一个是纯度变化的角度实际效果类似但计算复杂度不同。k-means对初始中心敏感常用k-means来缓解。还有一类容易被忽略的冷门题比如“粒子群算法属于哪类优化算法”。答案是群体智能优化。它和梯度下降最大的区别在于不依赖梯度信息靠个体和群体的历史最优位置引导搜索适合处理不可导或全局搜索问题。这种题出现频率不高但看到了别慌知道它属于启发式/群体智能方法就够了。3. 深度学习核心知识点概念题与手推题的重灾区3.1 从全连接到卷积CNN参数与感受野的计算深度学习模块是决定你能否通过笔试的关键。网易2018年的题目里CNN的计算题几乎是标配。典型问法是“输入是224×224×3的图像卷积核3×3步长2padding 1问输出特征图的尺寸。”这时候直接用公式output_size floor((H 2P - K) / S) 1代入得 floor((224 2×1 - 3)/2) 1 floor(223/2) 1 111 1 112输出112×112。注意中间一定要先做floor除法再加1如果先加1再取floor结果就是113错了。这种带小数的情况在PyTorch、TensorFlow里均采用向下取整笔试时别想当然。另一个高频题是感受野。假设第一层卷积核5×5、stride1第二层卷积核3×3、stride1从最后一层往回推第二层输出的每个点对应第一层输出的3×3区域再对应输入的5×5区域所以最终感受野是7。递推公式可以写成 RF_new RF_old (K - 1) × stride_累计其中stride_累计是前面所有层的步长乘积。如果第一层stride2、第二层卷积核3×3那么第二层对输入的感受野就是3 (3-1)×2 7。考察感受野本质是看你对“每一层到底看到输入多大区域”有没有概念这在设计网络结构、做目标检测时很关键。复习时最好手算几次经典结构比如VGG、ResNet前面几层的感受野算过一次就记住了。3.2 池化、Dropout、BN三个“小操作”背后的原理池化、Dropout、BN这几样东西表面看是深度学习里的“小操作”但一问原理就很容易露馅。网易这类大厂笔试很喜欢把它们的细节揉进选择题。池化分最大池化和平均池化。最大池化在保留纹理特征上更好平均池化在保留背景信息上更平滑。现在ResNet、DenseNet里更多用stride2的卷积或者全局平均池化代替全连接层因为全局平均池化天然带正则效果、参数量更小。Dropout的训练和测试差异是必考陷阱。训练时以概率p随机丢弃神经元测试时不能丢因为推理需要确定性。问题来了如果不做任何处理训练和测试的输出尺度会不一致所以要么训练时对保留神经元除以(1-p)要么测试时对权重乘(1-p)。现代框架默认用的是inverted dropout也就是训练时除以(1-p)这样测试代码不用额外处理。很多人背了结论但不知道“尺度一致”才是本质遇到变形题就翻车。BNBatch Normalization要更复杂一些。训练时对每个mini-batch做归一化再乘可学习的缩放系数γ和偏移β但测试时不能依赖当前batch的统计量而是用训练阶段维护的滑动平均running mean和running variance。框架里会自动处理这些但笔试会直接问“训练和测试有什么不同”答案就是统计量的来源不同。很多候选人把这题答反了特别可惜。3.3 Softmax与交叉熵一个稳定性的坑Softmax加交叉熵是深度学习笔试里几乎必考的组合因为几乎所有分类网络都用它收尾。最常见的坑是数值稳定性当logits里某个值很大比如100e^100直接就爆float32的上限了。解决办法是每个元素减去该行最大值softmax(z)_i exp(z_i - max(z)) / sum_j exp(z_j - max(z))这个操作不改变概率分布因为分子分母同时乘了 e^(-max(z))但能把指数函数的输入拉回安全区间。笔试里如果让你手写softmax实现不减去最大值就是零分。交叉熵的梯度也建议手推一遍。对于多分类问题L -sum_i y_i log p_i其中 p softmax(z)。可以证明 dL/dz p - y这个结论在实现时可以直接用。我在笔试现场把梯度重新推了一遍就为了确认符号没错。如果提前推过遇到这题就是纯送分。建议读者朋友也自己推一次先算p_i对z_j的导数分ij和i≠j两种情况再用链式法则合并体会一下分类概率和梯度信号之间的关系。4. 编程题与字符串算法边界条件是第一生产力4.1 算法题的时间分配与审题策略网易笔试的编程题一般是两到三道难度从easy偏中等到hard边缘不等。我见过太多人栽在时间分配上第一道题求稳慢慢写写到第三道时只剩20分钟连题都没读完。我的策略是先花5分钟把三道题全部扫一遍按难度从低到高排序先做一眼有思路的把保底分拿到再去啃难题。代码题只要不超时、不爆内存、边界情况处理到位就能拿到大部分分数。边界条件是个老生常谈但永远有人错的地方。输入为空、数组长度只有1、整数溢出、字符串首尾空格、负数取模这些都要在写的过程中主动处理而不是靠最后debug。一个实用的习惯是写完函数立刻在脑子里跑三个用例正常情况、极端情况、空输入。跑完没问题再提交。4.2 KMP这类字符串题为什么高频出现“KMP算法”在算法岗相关搜索里一直很活跃说明大家都在关注。网易这类笔试也偶尔考字符串匹配但往往不会直接让你背KMP而是考next数组的理解。以模式串 abacaba 为例它的next数组next[i]定义为前i个字符组成的子串的最长相等前后缀长度通常next[0]-1或0看具体约定可以这样推i1子串 a最长相等前后缀长度0i2子串 ab0i3子串 aba前缀a和后缀a相等长度1i4子串 abac0i5子串 abaca前缀a后缀a长度1i6子串 abacab前缀ab后缀ab长度2i7子串 abacaba前缀aba后缀aba长度3所以next [-1, 0, 0, 1, 0, 1, 2, 3]按next[0]-1的版本。搞懂next数组KMP的核心就掌握了一半——匹配失败时不是从头开始而是跳到最长相同前后缀的位置避免重复比较。笔试如果出字符串题KMP不是唯一解但它是考察“你懂不懂线性复杂度”的分水岭。如果时间有限先把暴力匹配写对再说明复杂度O(nm)至少能拿过程分。4.3 排序与数据结构的“快问快答”排序算法是选择题和编程题都爱考的基础。不同排序算法的稳定性、时间复杂度和空间复杂度必须记扎实。算法平均时间复杂度最坏时间复杂度空间复杂度稳定性冒泡排序O(n^2)O(n^2)O(1)稳定快速排序O(n log n)O(n^2)O(log n)不稳定归并排序O(n log n)O(n log n)O(n)稳定堆排序O(n log n)O(n log n)O(1)不稳定计数排序O(nk)O(nk)O(k)稳定除了排序链表反转、二叉树遍历、哈希表冲突解决、优先队列实现Top-K也是笔试编程题的高频素材。网易比较讲求实用性题目一般不会超纲但会在“代码优雅度”上做区分。比如同样求Top-K有人用排序O(n log n)有人用堆O(n log k)后者明显更好。5. 从2018看到现在数值精度变成新的必考点5.1 fp32、fp16、bf16、tf32到底差在哪2018年的网易笔试题里数值精度相关内容还不太多顶多问问“为什么softmax要防溢出”。但放到现在再看浮点数格式已经成为深度学习模型部署和面试绕不开的硬知识尤其是FP32、FP16、BF16、TF32这四种格式。我觉得值得专门展开讲因为哪怕是当年过了笔试的人如今补上这课也不亏。这四种格式都遵循类似IEEE 754的布局1位符号位 若干指数位 若干尾数位。符号位决定正负指数位决定数值范围通过偏移量表示正负指数尾数位决定精度。FP32是1823动态范围约1e-38到3e38FP16是1510动态范围约6e-5到65504精度低但省内存BF16是187指数位和FP32一样多所以动态范围和FP32一致但尾数位少精度低TF32是1810指数位也跟FP32一致精度介于BF16和FP16之间是NVIDIA Ampere架构专门为深度学习引入的格式。直观感受一下FP32的尾数23位对应十进制大约7位有效数字FP16只有10位尾数大约3位有效数字BF16只有7位尾数大约2到3位有效数字。所以BF16能表示很大的数但表示不了太精确的小数训练中容易出现梯度更新不精确的问题。5.2 不同精度的选型实战那实际项目里怎么选我按自己的经验给一套默认配置训练首选混合精度AMP前向和反向用FP16但主权重、优化器状态和loss保持在FP32配合Loss Scaling解决梯度下溢。收益是显存减半、训练提速在支持Tensor Core的卡上效果尤其明显。推理部署如果模型很大优先考虑INT8量化和FP16。FP16作为“无脑可用的折中方案”很稳精度损失通常在一个点以内INT8省得更多但要做校准和量化感知训练风险和工程量都大。纯BF16训练/推理在大规模分布式训练里很流行因为BF16的动态范围大不担心溢出省去了Loss Scaling但精度有限适合对精度要求不苛刻的场景。一个常见的坑FP16训练时如果loss突然变NaN第一反应不是调学习率而是看梯度有没有下溢、loss scale设置是否合理。FP16的梯度数值小于约1e-12就会直接变0这时要开loss scale让它先放大梯度再回缩更新。另外混合精度对batch size更敏感batch太小统计量波动大FP16的误差会更快累积。5.3 如果当年考到这些怎么回答假设2018年的卷子多一道简答题“请简述FP16训练时如何避免精度损失。”我会这么组织答案先说明FP16的优点是显存减半、计算更快缺点是动态范围小、精度低接着讲解决方案分三层一是混合精度训练把权重和优化器状态放在FP32仅前向和反向用FP16二是Loss Scaling用一个缩放因子把loss放大到安全范围反向传播后再把梯度缩小回去三是定期检查梯度数值出现NaN/Inf时跳过当前迭代并降低缩放因子。这样一个结构完整、因果清晰的回答哪怕放到今天也是标准解法。笔试里如果考浮点数大概率是这种“概念方案”的组合题不会真让你手算二进制表示。但答得好的前提是你能把“范围”和“精度”这两个维度分开讲清楚。6. 案例实战一道综合题从读题到写答案的全过程6.1 综合题示例设计一个文本情感分类模型网易这类大厂的笔试和面试里问答设计题很喜欢出“给你一个业务场景请设计解决方案”。以情感分类为例题干一般是“给定一批电商评论要求判断每条评论是正面、中性还是负面请写出你的技术方案。”我的答题结构是这样的问题定义三分类问题类别不均衡需要关注。数据预处理清洗HTML标签、去除无用符号、中文分词、构建词表、定长截断或填充。特征表示从词袋/TF-IDF到词向量Word2Vec/GloVe再到RNN/LSTM/CNN文本模型。模型结构先给一个baselineLSTM 最后时刻的hidden state softmax再给进阶方案BiLSTM Attention说明Attention能解决长距离信息衰减。损失函数与优化器交叉熵损失 Adam学习率从1e-3开始并配合early stopping。评估指标类别不均衡不能只看accuracy用macro-F1更合适。这样答的好处是告诉面试官你有完整的项目思维而不是只会套模型。记得把“为什么选这个模型”也写上比如LSTM比CNN更适合捕捉序列依赖但训练速度慢所以可以用CNN做baseline做对比。6.2 手推题示例从梯度推导到参数更新问答题还有一种形式是手推梯度比如让推导线性回归的梯度更新公式。很多人觉得这题简单但写出来的过程经常丢三落四。设预测值为 h Xw损失为均方误差 L (1/2m) ||Xw - y||^2。先对w求梯度dL/dw (1/m) X^T (Xw - y)这一步要注意矩阵乘法的顺序X^T在左边。得到梯度后参数更新 w : w - learning_rate × (1/m) X^T (Xw - y)。这道题考察的是矩阵求导和梯度下降的衔接。类似的题还有给一个两层MLP和sigmoid激活函数手推反向传播。我的建议是提前把“单个样本版”和“矩阵版”都推一遍。笔试时先在草稿纸上写清变量形状再下笔能有效降低出错率。6.3 答题排版与时间分配笔试答题尤其要注意“过程分”。像网易这种大厂阅卷不完全看最终答案中间步骤也是评分依据。所以每一个关键公式最好单独成行并标注步骤编号比如“①计算前向传播、②计算损失、③反向传播”。遇到不会的题先把思路和公式写上哪怕最后答案算错也能保住一部分分数。我当年考完跟同学对答案发现很多“没做出来”的题其实只差最后一步但因为没有写中间推导白白丢了大半分数。7. 备战网易深度学习算法实习生的几点心得7.1 我踩过的坑只刷LeetCode不补基础第一次准备这类笔试的时候我也曾觉得只要疯狂刷LeetCode就够了。结果一上考场代码题确实写出来了但数学选择题和深度学习概念题错了一大片。后来复盘才意识到算法岗笔试和开发岗最大的区别就是开发岗考代码算法岗考“算法思维理论基础”。刷题是必要的但它只是四分之一数学和DL基础必须同步补。建议复习期间给自己定个规矩每天留出1小时专门过概念题而不是全天泡在代码里。7.2 一个月冲刺计划如果现在还有一个月时间我建议按三周加一周的结构来安排。第一周过完概率统计、线性代数、机器学习核心理论配合笔记整理公式不追求吃透所有细节但高频考点必须会算。第二周深度学习专项重点攻CNN、RNN、正则化、损失函数、反向传播推导每两天手推一次softmax加交叉熵梯度直到闭着眼能写出来。第三周刷编程题按排序、字符串、树、DP、二分这些专题分类刷每道题注意边界条件和复杂度。最后一周成套做历年真题模拟真实考试环境掐时间做完后逐题复盘。复盘的优先级甚至高于做题因为很多错误是系统性的比如矩阵求导维度不敏感、边界条件漏判、时间分配失衡。7.3 笔试之后的面试衔接笔试通过后紧接着就是面试而面试的很多问题其实在笔试里已经埋下伏笔。比如笔试考了感受野面试官可能就顺着问你“你怎么理解感受野”“如果增大感受野常见手段有哪些”。这类题目考的不是记忆力而是你有没有真正理解概念背后的设计动机。建议笔试结束后别急着放松把当天不会的题目查一遍画一遍推导流程这基本就是面试的“预热题库”。最后分享一个小体会网易2018这套题放在今天看难度不算炸裂但它的考查面非常平衡数学、机器学习、深度学习、代码能力全覆盖。准备这类笔试最重要的不是押题而是把基础知识织成一张网让每个知识点都能在考场上随时被调用。真到了那一天你会发现笔试不过是一个检验自己底子是否扎实的过程。
返回列表