资讯动态

深度学习100道选择题:从题库构建到能力评估的落地路径

发布时间:2026/10/17 19:04:33 来源:尧图企业网站定制
简介这是一份面向深度学习初学者与备考人群的选择题练习资源围绕机器学习与神经网络的核心概念展开帮助学习者在系统刷题中检验理论掌握程度、查漏补缺。题目覆盖监督与无监督学习、梯度下降、交叉验证、准确率与F1分数等评估指标也涉及L1正则化、PCA降维、类别不平衡处理、过拟合与激活函数等高频考点并延伸到CNN、YOLO目标检测、词嵌入、SVM支持向量以及PaddlePaddle、TensorFlow、PyTorch等框架知识兼顾理论基础、算法实现与模型评估。资源包共1个docx文件约76KB以单选题形式集中呈现便于打印练习或逐题自测。目前已有142人学习下载适合课堂测验、期末复习与面试前快速回顾可帮助读者在有限时间内梳理知识脉络、定位薄弱环节。1. 深度学习100道选择题从题库到能力评估的落地路径深度学习100道选择题这个标题乍看像是一份考试卷实际在工程场景里它对应的是一个很具体的需求如何用一套结构化的选择题快速评估一个人或一个团队对深度学习核心概念的掌握程度。我最早接触这类需求是在某公司内部做算法岗转正考核的时候当时需要一套能覆盖张量运算、反向传播、卷积核参数、损失函数选型、正则化策略等关键知识点的题目既要能区分“背过”和“真懂”又不能让题目本身成为玄学。后来发现这类题库的价值远不止考试——它可以用来做培训效果验证、面试初筛、甚至作为模型知识蒸馏的评测基准。适合谁用带团队的算法负责人、做课程设计的讲师、准备面试的求职者以及想系统自查知识盲区的工程师。这一篇不讲虚的直接拆怎么从零构建一套可复现、可扩展、有区分度的深度学习选择题库包括题目设计原则、参数计算类题目的生成脚本、难度校准方法以及我踩过的那些坑。2. 题目设计从知识点覆盖到干扰项构造2.1 先定知识域权重再写题很多人上来就开始编题结果100道题里60道在考卷积反向传播只占5道这种分布拿去评估能力就是自欺欺人。我的做法是先画一张知识域权重表按从业者实际工作中各知识点的出现频率来分配题量。下面这张表是我在多次调整后稳定下来的一个版本适用于通用深度学习岗位的初筛如果你面向的是CV方向可以把卷积和归一化的权重再往上提。知识域建议题量核心考点举例难度分布易/中/难张量与基础运算12广播机制、维度变换、矩阵乘法形状推导5/5/2反向传播与计算图15链式法则、梯度消失原因、计算图释放时机4/7/4卷积与池化18输出尺寸计算、感受野、参数量、空洞卷积6/8/4损失函数与优化器15CrossEntropy与Softmax关系、Adam偏差修正5/6/4正则化与归一化12Dropout训练/推理差异、BN与LN适用场景4/5/3序列模型与注意力14LSTM门控、Self-Attention计算复杂度4/6/4训练技巧与调参14学习率预热、梯度裁剪、混合精度5/6/3这张表不是拍脑袋来的是我把过去三年里团队内部代码review中高频出错的点做了统计再对照几本经典教材的章节篇幅做了加权。你如果面向的是刚入门的学生可以把“训练技巧与调参”的权重降一半把基础运算提上去。2.2 干扰项不是随便凑的要对应真实误区选择题的质量高低八成看干扰项。我见过太多题库正确答案像太阳一样明显剩下三个选项一看就是凑数的。好的干扰项应该来自真实的学习误区。比如考卷积输出尺寸公式是 ( O \lfloor (I - K 2P)/S \rfloor 1 )我会故意设置一个选项对应“忘记加1”的结果一个对应“忘记下取整”的结果还有一个对应“把padding当成单边加”的结果。这样每个错误选项都能映射到一种具体的理解偏差考完试看错题分布就能知道这个人卡在哪。下面这段Python代码是我用来批量生成卷积输出尺寸题目的脚本输入是各种参数组合输出是题干和四个选项其中三个错误选项分别对应上述三种典型错误。import math import random def generate_conv_question(): # 随机生成合理的参数组合 I random.choice([28, 32, 64, 128, 224]) # 输入尺寸 K random.choice([3, 5, 7]) # 卷积核大小 P random.choice([0, 1, 2, 3]) # padding S random.choice([1, 2]) # 步长 # 正确答案 correct math.floor((I - K 2 * P) / S) 1 # 干扰项1忘记加1 wrong1 math.floor((I - K 2 * P) / S) # 干扰项2忘记下取整用浮点数结果 wrong2 (I - K 2 * P) / S 1 # 干扰项3padding只算单边 wrong3 math.floor((I - K P) / S) 1 # 去重并保证四个选项 options list(set([correct, wrong1, wrong2, wrong3])) while len(options) 4: # 补一个随机偏移 offset random.choice([-2, -1, 1, 2]) candidate correct offset if candidate 0 and candidate not in options: options.append(candidate) random.shuffle(options) return { question: f输入特征图尺寸为{I}×{I}卷积核大小{K}×{K}padding{P}步长{S}输出尺寸是多少, options: options, answer: correct } # 生成5道题看看效果 for _ in range(5): q generate_conv_question() print(q[question]) print(选项:, q[options]) print(答案:, q[answer]) print(---)这段代码的逻辑很直白先随机采样一组合理的卷积参数然后按标准公式算出正确答案再分别用三种常见错误算法生成干扰项。参数说明上I的取值范围我限定在28到224是因为这是实际网络中常见的输入尺寸K只取奇数因为偶数卷积核在框架里通常需要特殊处理不适合作为基础题P最大取到3再大就偏离常规设计了。set去重那一步很关键有时候不同错误算法会算出相同的数值不去重就会出现重复选项。补选项的循环里加了正数判断避免出现负数选项这种一眼假的干扰项。2.3 难度校准用区分度指标筛题题目写完不是就完了得用数据说话。我一般会找20到30个人做一轮试测然后算每道题的区分度。区分度的简单算法是把总分前27%的人划为高分组后27%划为低分组某题高分组正确率减去低分组正确率就是这道题的区分度。低于0.2的题基本可以淘汰或者大改高于0.4的题是优质题。难度用通过率表示0.3到0.7之间比较理想。这个流程走一遍100道题里通常会砍掉15到20道剩下的才是能用的。3. 参数计算类题目的自动化生成与校验3.1 为什么参数计算题值得单独做一套生成器深度学习选择题里有一类题是“死题”——概念题比如“Dropout在推理阶段的行为是什么”这种题只能手写没法自动生成。但另一类题是“活题”——参数计算题比如卷积输出尺寸、参数量、感受野、FLOPs这些题有明确的公式参数一变就是一道新题。我粗略统计过一套100题的题库里参数计算类能占到30到35道如果全靠手写不仅效率低而且容易在数字上出错。用生成器来做一方面保证计算准确另一方面可以无限扩展题量今天出100道明天换个参数范围又能出100道。3.2 参数量计算的生成脚本与边界处理参数量计算是另一个高频考点。以卷积层为例参数量公式是 ( (K_h \times K_w \times C_{in} 1) \times C_{out} )那个加1是偏置项。但很多框架在设置biasFalse时就不加这个1所以出题时必须明确是否包含偏置。下面这段代码生成参数量题目时会随机决定是否包含偏置并且把“忘记乘C_out”和“忘记加偏置”作为干扰项。import random def generate_param_question(): Kh random.choice([3, 5, 7]) Kw Kh # 简化假设方形卷积核 Cin random.choice([3, 16, 32, 64, 128]) Cout random.choice([16, 32, 64, 128, 256]) use_bias random.choice([True, False]) # 正确答案 correct (Kh * Kw * Cin (1 if use_bias else 0)) * Cout # 干扰项1忘记乘Cout wrong1 Kh * Kw * Cin (1 if use_bias else 0) # 干扰项2忘记加偏置无论实际是否加 wrong2 Kh * Kw * Cin * Cout # 干扰项3偏置只加一次而不是每个输出通道一个 wrong3 (Kh * Kw * Cin) * Cout 1 options list(set([correct, wrong1, wrong2, wrong3])) while len(options) 4: candidate correct random.choice([-Cout, Cout, -Cin, Cin]) if candidate 0 and candidate not in options: options.append(candidate) random.shuffle(options) bias_str 包含偏置 if use_bias else 不包含偏置 return { question: f输入通道数{Cin}输出通道数{Cout}卷积核大小{Kh}×{Kw}{bias_str}该卷积层参数量是多少, options: options, answer: correct } for _ in range(3): q generate_param_question() print(q[question]) print(选项:, q[options]) print(答案:, q[answer]) print(---)这段代码里use_bias随机决定是否加偏置题干里会明确写出来避免歧义。干扰项的设计覆盖了三个最常见的错误忘记乘输出通道数、忘记加偏置、偏置只加一次。补选项时用Cout或Cin作为偏移量这样补出来的数字和正确答案在量级上接近不会出现那种一眼就能排除的离谱选项。注意wrong3那个干扰项它对应的是“知道要加偏置但不知道每个输出通道都有独立偏置”这个误区在实际教学中这个错误非常常见。3.3 感受野计算的递推与校验感受野是另一个容易出计算题的点但它的公式是递推的比前两个复杂。单层感受野的递推公式是 ( RF_{i} RF_{i-1} (K_i - 1) \times \prod_{j1}^{i-1} S_j )其中(S_j)是前面各层的步长。我写生成器的时候会随机生成2到4层的卷积堆叠然后逐层计算。校验的方法很简单用暴力展开的方式模拟一遍看递推结果和暴力结果是否一致。这个校验步骤不能省因为递推公式里那个连乘项很容易在代码里写错。def compute_receptive_field(layers): layers: list of dict, each with kernel and stride 返回每一层后的感受野 rf 1 stride_product 1 rfs [] for layer in layers: k layer[kernel] s layer[stride] rf rf (k - 1) * stride_product stride_product * s rfs.append(rf) return rfs # 示例三层卷积 layers [ {kernel: 3, stride: 1}, {kernel: 3, stride: 2}, {kernel: 3, stride: 1} ] print(各层感受野:, compute_receptive_field(layers)) # 输出应为 [3, 7, 11]这个函数返回的是每一层输出特征图上每个像素对应的原始输入区域大小。参数说明rf初始为1表示原始输入上单个像素的感受野stride_product记录的是到当前层为止所有步长的乘积初始为1。每经过一层感受野增加(k-1) * stride_product然后stride_product乘以当前层的步长。这个逻辑我用了很多次只要层参数输入正确结果不会错。出题的时候我会把中间某一层的感受野作为正确答案然后把“忘记乘stride_product”和“把stride_product当成当前层步长”的结果作为干扰项。4. 避坑题库建设中最容易翻车的五个地方4.1 题目表述有歧义导致正确选项不唯一现象试测的时候有人选B有人选C查了半天发现两个选项在某种理解下都对。原因出题时默认了某个前提但没写进题干比如“卷积层默认biasTrue”这个假设不同框架默认值不一样。解决所有可能产生歧义的参数必须在题干里显式写出比如“假设偏置项存在”“假设padding为0”“不考虑dilation”。我现在的习惯是每道参数题写完自己先读三遍把每个可能被追问的点都补上。4.2 干扰项数值过于离谱失去区分度现象某道题的三个错误选项分别是正确答案的0.1倍、10倍和100倍稍微有点常识的人都能排除。原因生成干扰项时只做了简单的乘除没有模拟真实错误。解决干扰项必须来自真实的错误计算路径而不是随机缩放。我上面代码里那三种错误算法就是典型例子每个错误选项都能对应一种具体的思维误区。如果某个干扰项找不到对应的错误路径宁可换一道题。4.3 难度分布失衡简单题扎堆现象100道题里70道通过率在0.8以上做起来像在刷小学算术。原因出题时凭感觉没有做难度校准。解决强制按权重表分配难度易/中/难的比例控制在4:4:2左右。试测后把通过率高于0.85的题标记出来要么改干扰项增加难度要么直接替换。我一般会保留10道左右的“送分题”用来建立信心但不会更多。4.4 知识点重复换汤不换药现象连续五道题都在考“卷积输出尺寸”只是数字变了。原因生成器参数范围太窄或者手写题时思维惯性。解决在生成器里加一个去重机制记录已经出过的知识点和参数组合同一知识点连续出现不超过两道。另外定期用知识点覆盖表做检查确保每个知识域的题量符合权重表。4.5 答案位置有规律被应试技巧破解现象有人统计发现正确答案选C的概率高达40%于是不会就选C。原因生成题目后没有打乱选项顺序或者打乱得不彻底。解决每道题生成后强制random.shuffle并且在最终组卷时统计一下四个选项作为答案的频次偏差超过5%就重新洗牌。这个细节很小但不做的话题库的效度会打折扣。5. 从题库到能力评估用选择题做知识盲区诊断5.1 错题归因比总分更有价值一套100道选择题如果只用来算总分那就浪费了。我真正看重的是错题的知识点分布。具体做法是每道题在入库时打上知识点标签比如“反向传播-链式法则”“卷积-输出尺寸”“优化器-Adam偏差修正”。考完之后按标签统计错误率生成一张雷达图。如果某人在“归一化”这个域的错误率显著高于其他域那基本可以断定他在这块有系统性盲区而不是粗心。这个诊断结果比总分更能指导后续的学习或培训。5.2 用区分度做题目淘汰用信息量做题目保留除了区分度还有一个指标叫信息量来自项目反应理论。简单说一道题如果高分组和低分组都做对或者都做错那它提供的信息量就接近零。我一般会保留那些“中等水平的人做对概率在0.4到0.6之间”的题因为这些题对能力估计最敏感。具体操作上我会用试测数据拟合一个简单的Logistic模型然后按信息量排序把信息量最低的10%淘汰掉。这个流程走下来题库的评估效度会有明显提升。5.3 动态组卷根据目标调整题目组合同一套题库面向不同场景可以组出不同的卷子。面试初筛的时候我会把难度分布调成易/中/难5:3:2因为要在短时间内快速筛掉明显不合格的人。内部晋升考核的时候我会调成2:5:3因为需要区分出优秀和良好。培训结业考试我会调成3:4:3兼顾信心和区分。实现上就是在题库里给每道题标好难度系数组卷时按目标分布随机抽取。这个技巧让一套题库能覆盖多种评估场景不用重复建设。5.4 一个具体的技巧用“错题重测”验证学习效果如果这套题库是用来做培训的我强烈建议在培训前后各测一次然后对比错题的变化。具体看两个指标一是原来错的题有多少变成了对这叫“修复率”二是原来对的题有多少变成了错这叫“遗忘率”。修复率高且遗忘率低说明培训有效。如果修复率低说明培训内容没覆盖到盲区如果遗忘率高说明培训只是短期记忆没有形成长期理解。这个验证方法比单纯看总分变化要可靠得多我用了两年多基本没翻过车。最后说一个我自己的习惯每次题库更新后我会自己先做一遍把那些让我犹豫超过30秒的题标记出来。这些题要么表述有问题要么干扰项设计得太接近正确答案导致区分度下降。这个“自测”环节帮我拦住了不少后来会被用户投诉的题。希望帮到你。本文还有配套的精品资源点击获取

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑