ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

AI算法岗笔试核心考点拆解:机器学习、手撕代码与业务场景题

AI算法岗笔试核心考点拆解:机器学习、手撕代码与业务场景题 严格说这个标题一开始就让我有点犯迷糊。“第四范式”是AI公司“IEG”是腾讯互动娱乐事业群两个词摆在一起大概率是当年求职者口口相传时把不同公司的笔试混在了一个帖子里——或者是有人拿第四范式的算法题投了IEG的游戏AI岗位顺手起了这么个标题。这种事在秋招季太常见了。不过这不重要。重要的是这类标题背后藏着一批真实的、反复出现的考点。我本人这些年帮人改简历、做模拟面试也实际刷过不少AI算法岗的笔试题包括第四范式和腾讯IEG方向的。我可以说这些题并不神秘核心就那几个模块机器学习理论、手撕代码、深度学习基础、业务场景题外加一部分游戏AI特有的策略题。这篇文章我就以“2020第四范式秋招IEG笔试题”为引子结合我实际刷题和辅导的经验把这类AI算法岗笔试真正会考的东西拆开讲清楚。我不会去贴所谓的原题——网上流传的版本多不完整我在文末会讲原因。但考点、思路、做题顺序、容易踩的坑这些我会全部讲透。1. 这类笔试的底层逻辑不是考你会不会是考你“多会”先别急着刷题。你得先搞明白出题人到底想从一场笔试里得到什么。AI算法岗的笔试尤其是第四范式、腾讯IEG这类技术强相关的公司不像是学校期末考试——期末考试考的是“你掌握了哪些知识点”而笔试题考的是“你遇到一个具体问题时能不能用学过的知识把它解决掉”。这两个目标完全不同。举个例子。学校里考SVM大概率是让你写出对偶形式的推导或者解释核函数的作用。但笔试里考SVM可能会给你一个带噪声的二分类数据集问你用线性SVM还是RBF核SVM如果类别不平衡你会怎么处理如果训练集特别大你还会选择SVM吗为什么看出来区别了吗笔试更在意的是选择理由和工程权衡。你不仅要会“用”还要会“为什么这么用”更要能说出“在什么条件下这个方案不适用”。第四范式的笔试向来以“考得深”著称。他们的题目风格很统一给你一个业务背景然后层层往下问。第一问可能是一个基础概念第二问就开始结合实际第三问直接考察你对模型上限和瓶颈的理解。腾讯IEG的风格有所不同因为游戏AI的特殊性他们更关注强化学习、模仿学习、多智能体系统这些方向但机器学习基础题一样不会少。所以你在拿到一套题之后第一步要做的不是赶紧做第一题而是先花三分钟扫一遍全卷搞清楚题目结构。一般来说AI算法岗笔试会分成这么几块模块常见题型出题目的机器学习理论概念辨析、推导题、场景应用题考察基础是否扎实手写算法数据结构与算法题考察编码基本功深度学习网络结构、训练技巧、调参思路考察工程经验业务场景开放性设计题、策略题考察综合解决问题的能力游戏AI特有强化学习、行为树、NPC决策考察领域理解当然不是每套题都包含全部分类。第四范式的题偏前四类腾讯IEG会包含第五类。但无论题怎么出底层逻辑都是一样的筛选出那些既能理解理论又能落地的工程师。2. 机器学习理论题最容易被“好像会了”骗过去的模块这一部分我得说得很直白机器学习理论题是刷掉人最多的模块。原因不是题目难而是大部分人自以为会了可真到写的时候概念全是模糊的。2.1 偏差-方差分解不是背定义就行我见过太多简历上写“熟悉偏差与方差的权衡”的人笔试一问就露馅。问你“bagging和boosting分别是如何影响偏差和方差的”标准答案背得顺溜bagging降低方差boosting降低偏差。但接下来问你“为什么bagging能降低方差”很多人就卡住了。正确的回答链路应该是这样的假设我们有n个独立同分布的样本每个样本的模型预测方差是σ²bagging对样本进行bootstrap采样训练多个模型然后取平均如果模型之间完全不相关平均后的方差会变成σ²/n但现实中模型因为共享训练数据相关性不可能为0所以方差不会严格降到σ²/n所以bagging的核心逻辑是通过引入样本扰动降低模型之间的相关性从而减小集成模型的方差这还没完。如果你遇到的是第四范式风格的题后面还会跟着一问随机森林里每次分裂只随机选一部分特征这个操作是在降低偏差还是方差答案是方差。因为特征扰动进一步降低树之间的相关性让平均的结果更稳定。你看同一个知识点学校考的是名词解释笔试考的是“你能不能把知识串起来用”。2.2 损失函数与评价指标的不匹配问题这类题几乎是AI算法岗笔试的保留节目。常考的组合有训练用交叉熵评价用准确率这俩不匹配怎么办训练用MSE评价用MAE有什么问题回归问题上为什么有时候MAE比MSE更合适做题的核心逻辑是损失函数影响梯度梯度影响优化方向评价指标只用来衡量结果不参与优化。所以如果损失函数和评价指标不匹配你在训练过程中优化的目标和你想达成的目标就不是一回事。给你一个具体的例子。在CTR预估场景中第四范式的业务大多和金融、零售相关正样本比例经常很低。这时候如果用准确率作为评价指标模型只需预测全为负样本准确率就能轻松过95%。但我们需要的是“找出那些可能转化的用户”所以更合理的评价指标是AUC、LogLoss这类。训练时则可以通过对负样本做降采样或对正负样本设置不同的权重来调整。再往深问一层如果负样本特别多你又不想降采样该怎么办这时候可以选择Focal Loss。它是交叉熵的改进版本通过降低易分类样本的梯度贡献让模型聚焦在难分类样本上。你能说清楚平方项的作用能写得出公式这道题就算真正拿下了。2.3 正则化的本质约束空间而不是简单的“惩罚复杂度”很多人在答“L1和L2正则化的区别”时都会说L1产生稀疏解L2让权重变小。这个答案只能得一半分。换个角度来想为什么L1会稀疏这个问题的完整解释有至少三个层次直观层L1的梯度恒定当权重为0附近时优化过程会把权重直接“推”到0几何层L1约束的可行域是菱形L2是圆形菱形容易让最优点落在坐标轴上概率层L1等价于给参数加了拉普拉斯先验L2等价于高斯先验拉普拉斯分布在0处概率密度更大笔试题经常问的就是第二层。你如果能用几何图形解释清楚改卷的人一眼就能判断出你是真的理解还是在背答案。还有一道衍生题也常出现L1正则化求导时在0处不可导那梯度下降怎么处理答案是使用次梯度或者用Proximal方法。这个问题在工程里很实在——你写代码的时候L1那一项不能直接用常规的梯度公式算否则在0处就是NaN。3. 手写代码题比LeetCode更让人紧张的是边界条件和复杂度分析AI算法岗笔试的代码题通常不会出特别难的LeetCode Hard但会故意在边界条件和数据规模上做文章。3.1 高频题型树、图、动态规划我在实际辅导过程中统计过AI算法岗笔试的代码题最常出现在这几类二叉树相关的遍历与变体图的最短路径与拓扑排序动态规划背包变体、字符串编辑距离、路径计数二分查找及其变种排序算法的特定场景应用为什么是这些因为这些类型最能考察“一个人的代码能不能在真实系统里跑通”。树的题考察递归和迭代两种思路图的题考察你对复杂依赖关系的建模能力动态规划考察你有没有把一个实际问题抽象成递推公式的能力。第四范式做的是企业级AI解决方案特征工程和数据处理里天天和这些结构打交道。3.2 一个典型的考察套路Top K 问题“找出一个数组里最大的K个数”——这题如果只答“排序然后取前K个”笔试基本就凉了除非你后面补一句“但这只适用于K接近N的情况”。正确的做题思路是分情况讨论如果K很小K远小于N用大小为K的最小堆时间复杂度O(NlogK)空间复杂度O(K)如果K接近N用快速选择QuickSelect算法平均时间复杂度O(N)如果数据量超大无法一次性装入内存用分治堆组合的方式如果数据分布在多台机器上需要考虑分布式归并这个题的精髓不在于代码本身而在于你要主动说出不同方案的适用条件。改卷的人看的就是你有没有这种意识。3.3 一个真实的踩坑实例二分查找的边界我在模拟笔试的时候见过很多人写二分查找几十行代码写完了自以为没问题一跑就死循环。问题都出在边界条件上。传统写法是这样的def binary_search(nums, target): left, right 0, len(nums) - 1 while left right: mid (left right) // 2 if nums[mid] target: return mid elif nums[mid] target: left mid 1 else: right mid - 1 return -1这个写法没问题。但笔试里真正的坑在于你拿到的是变体题比如找到第一个等于target的位置找到最后一个小于等于target的位置在旋转有序数组里查找target在无穷数组里查找target每种变体对边界条件的处理都不一样。我建议你形成一个固定习惯每写完一个循环用最小规模的输入在脑子里跑一遍比如数组长度为1、2、3的边界情况。这个习惯看起来笨但真能救你命。我在实际笔试中就是靠这个习惯避免了好几次因为下标越界导致的低分。4. 深度学习题从“背网络结构”到“理解训练动态”2020年左右是深度学习笔试难度上涨的分水岭。早期笔试问“ResNet的创新点是什么”就算有深度了后来开始问“为什么ResNet能解决梯度消失”“BatchNorm在训练和推理阶段有什么区别”再后来直接问“你的模型不收敛你按什么顺序排查”。4.1 BatchNorm的隐藏考点BatchNorm这类题值得好好准备因为它几乎必考且层次丰富。第一层BatchNorm做了什么对每个mini-batch的每个特征维度做标准化再通过可学习参数做缩放和平移。第二层训练和推理的区别训练时用的是当前batch的均值和方差推理时用的是训练阶段累积的全局统计量。这题很多人会忽略“累积”这两个字但恰恰这个机制影响极大——它意味着你保存模型的时候必须一并保存这些统计量否则线上推理结果会和离线评测对不上。第三层BatchNorm为什么能加速收敛官方解释是减少内部协变量偏移。但后续的研究比如2018年那篇经典论文提出BatchNorm的真正作用是让损失函数的曲面变得更加平滑这使得梯度下降更容易找到好的局部最优解。如果你能在笔试中答到这个层次基本就超过了大多数候选人。第四层一个小batch size会不会影响效果会。batch太小均值方差估计不准模型训练会很不稳定。这也是为什么有些模型在batch size从32改成8之后必须相应调小学习率——因为噪声变大了走快了容易乱蹦。4.2 过拟合与数据增强的组合拳深度学习模块有一题我几乎每次都会在模拟面试里考如果训练集损失很低验证集损失很高你怎么办标准答案的得分点包括增加训练数据量或做数据增强降低模型复杂度减少层数、减少通道数加入正则化L2、Dropout、Early Stopping使用预训练模型做迁移学习做交叉验证排查数据划分是否有问题但高分答案会在这些基础上多两条先确认验证集和训练集是不是来自同一分布。比如你用了全年的数据做训练验证集恰好选了某个大促时间段的数据那分布偏移导致的高loss根本不能说明模型过拟合。这个排查优先级应该排在“调模型复杂度”之前。看正负样本比例。如果验证集里某一类别的样本占比和训练集不一致损失函数的值本身就会异常高。这种情况先要对验证集做同分布采样再谈过拟合。说白了深度学习题考的不是你会不会用框架而是你能不能把模型“调”好并且能说清楚每一步调节背后的理由。4.3 注意力机制的快速演进2020年的笔试后来已经出现Transformer相关的问题了。腾讯IEG方向的游戏AI对注意力机制的应用也很早。常考的问题有Self-Attention的计算过程写出Q、K、V的计算方式和Softmax归一化公式为什么除以√d_k防止点积结果过大导致Softmax梯度过小Attention和全连接层的区别Attention根据输入动态生成权重全连接层的权重是固定的如果序列长度特别长标准Attention的复杂度是O(n²)怎么优化答稀疏注意力、局部窗口注意力、线性注意力这些题今天依然是热点。我建议你用“能默写出公式能画清楚流程图”的标准来准备因为笔试里经常让你手写伪代码画不出流程图的人基本挂了。5. 业务场景题与游戏AI策略题真正拉开差距的地方如果说前几个模块是“基础分”那业务场景题和游戏AI策略题就是“区分度题”。第四范式风格偏金融、零售、政务场景腾讯IEG风格偏游戏场景但本质逻辑相同给你一个模糊的大问题考你能不能拆解成可执行的步骤。5.1 经典题型预测一个问题你会怎么设计全流程这类题的答题框架我建议固定成五步明确问题定义分类还是回归正样本是什么时间窗口是什么数据获取与特征工程能从哪些表里拿数据构造哪些特征模型选择与训练策略用什么模型如何处理不平衡如何验证上线与监控模型怎么上线在线和离线指标怎么对齐多久回滚业务价值闭环模型带来的增益如何衡量怎么做AB测试以第四范式经常做的金融场景为例。假设要预测“用户未来30天是否会逾期还款”你需要问清楚样本怎么定义“逾期”是逾期30天还是90天逾期金额有门槛吗没有这些定义后面所有步骤都会偏。特征工程是这个环节的重头。多数人会想到用户的收入、年龄、历史还款记录但你如果能补充“设备指纹”“App使用行为序列”“申请时段”这类特征并解释这些特征背后的业务含义分数就会明显上一个台阶。5.2 游戏AI特有的策略题强化学习的考法腾讯IEG的笔试题如果挂上“强化学习”几个字通常不会只考你DQN的公式。他们更常考的是你如何设计一个NPC的行为策略在一个MOBA游戏里你的AI英雄需要对全图信息做决策但实际只提供部分视野怎么处理奖励函数太稀疏怎么办如何利用已有的玩家数据加速训练其中“奖励函数稀疏”是反复出现的题。标准解法包括奖励塑形Reward Shaping添加与目标正相关的中间奖励引入课程学习Curriculum Learning先让AI在简化任务上学习再逐步过渡到完整任务用模仿学习预热先从玩家行为数据中学一个初始策略再做强化学习微调分层强化学习把大任务拆成子任务每个子任务有各自的奖励这类题不要求你真的训练过一个很酷的游戏AI但要求你知道这些技术名词的适用场景和基本逻辑并且能组合使用。5.3 反向思考什么样的回答会让面试官反感我见过的失败案例有一个共性只给方案不解释取舍。比如问“你会用哪个模型做推荐”你回答“用DeepFM”但没解释为什么不用WideDeep、为什么不用FM、DeepFM相比前者有哪些代价。这种答案显得像是背答案而不是做决策。好的答题习惯是先抛出首选方案再说清楚这个方案在什么情况下会失效最后给出一个备用方案。这种“分层决策”的思维模式在业务场景题上百试百灵。因为真实工作中从来不只有一种正确答案而是存在一堆有约束条件的权衡选项。6. 时间分配与考场实操做题顺序比刷题量更被低估我辅导过的很多人刷题量不小但笔试分数不稳定。后来我发现问题出在时间分配上——他们常常在前面的推导题上耗时太多导致后面的代码题没时间写。6.1 推荐的时间分配策略以两小时、四到五道大题的配置为例我建议按这样的顺序和时间来分配时间段任务策略0-5分钟快速浏览全卷判断题目类型和难度5-50分钟做题号靠前但会做的题先抢稳的分50-80分钟主攻代码题优先写思路清晰的题80-100分钟写业务设计题框架优先细节其次100-120分钟检查补漏重点查边界条件注意先从自己最会的题开始。AI算法岗笔试的评分不是按题目顺序评的是按照点给分。你前一道题写了一半可能只能拿三分但后一道题完整写出来能拿满分。先把稳的拿到手再啃难的这个策略在多次实战中验证过。6.2 代码题的实操技巧伪代码也可以得分手写代码题有一个很多新人不知道的潜规则如果你完整代码写不出来写清晰可读的伪代码也能拿大部分分数。改卷的人想看到的是你的审题能力、方案设计能力和实现思路。如果你能在代码开头用注释写出算法步骤然后把关键的数据结构和循环逻辑写清楚即使最后有一两个语法错误也能拿到不错的分数。但有几个底线你要守住代码不能完全没有框架直接写几个函数壳子应付核心算法逻辑必须正确复杂度分析要写清楚如果用到特殊数据结构比如堆、并查集要自己实现或明确写出用的什么库6.3 关于“网上流传的真题”的真心话最后我想实事求是地提醒一句网上流传的题目基本都是一些求职者回忆出来的碎片不完整且可能有偏差。我不建议你把时间花在“搜集某年某公司笔试题”上因为这会在两个方向上误导你一是让你以为“背熟这些题就够了”二是让你在真正做题时分心去回忆“这题是不是流传版本里的那道”而不是专心分析当前题目本身。正确的备考方式是把精力放在理解各类题型背后的出题逻辑上。只要你把机器学习理论、手写代码、深度学习基础、业务设计这几块的能力练扎实了不管题目怎么包装你都能拆掉壳子看到内核。我在实际带人的过程中发现能把“算法岗笔试当做一个完整的系统工程来准备”的人成功率远高于只刷题的人。笔试题的每一个模块本质上都在模拟你工作后的某一种能力理论题考你能不能读懂论文和文档代码题考你能不能把想法落地业务题考你能不能跟产品和运营沟通需求。把这些能力练好笔试只是顺带的收获。如果你正准备AI算法岗的秋招我给的最终建议就三条第一把机器学习基础概念在“能用”的层次上过一遍而不是“能背”的层次第二手写代码题每天保持1-2道的量重点练边界条件和复杂度分析第三遇到业务设计题坚持“定义问题—拆解步骤—解释取舍”的结构来表达。把这三件事做好你再去翻那些流传的笔试题碎片会发现它们已经不再是散落的题目而是一整个体系里的一部分。
返回列表