计科面经(3)——关于一个神经网络项目

简历这样写机器学习,你hold住吗?
有两个老师都盯着我这个项目来问,然后我漏出的破绽如下:
1.ConvNeXt是什么?和CNN的区别?
我:是7*7更大视野。
老师:一定是7*7的大小吗?
我:是的。
老师:错,5*5,,7*7这些都可以,这是一种思路,不是定死了几层。
关键结论:7×7 只是 ConvNeXt 中 depthwise conv 的一个选择,5×5、7×7 甚至 9×9 都可以。这是一种设计思路——用更大的 depthwise 卷积核 + 倒置瓶颈结构,模拟 Transformer 中 self-attention 的全局感受野,而不是"定死了 7×7"。
"ConvNeXt 本质上还是 CNN,但它借鉴了 Vision Transformer 的设计理念来重新设计 CNN 的每个组件。它用更大的 depthwise 卷积核(比如 7×7)来扩大感受野,但 5×5 也可以,关键在于用大核 depthwise 卷积 + 倒置瓶颈结构来模拟 Transformer 的全局建模能力,而不是说必须固定 7×7。整个设计是一个思路,不是一个固定的超参数。"
2.知识蒸馏和迁移学习是同一个概念?这里的知识蒸馏是什么?迁移学习是什么?
我:原模型是ConvNeXt,新模型是ResNet18。
老师:那你知道这两个模型的参数是不同的吧,你有没有下去做一些处理?
我:想过这个问题,但我不知道底层怎么转的。

"不是同一个概念。在我的项目里,知识蒸馏和迁移学习的区分非常清楚:
我的项目只用了知识蒸馏,没有用迁移学习。
证据是:我的 Teacher(ConvNeXt-Tiny)和 Student(ResNet18)代码里都写的是 pretrained=False,两个模型都没有加载
ImageNet 预训练权重,完全是在病害数据集上从零训练的。所以我没有做传统意义上的迁移学习。
知识蒸馏在我的代码里是这样实现的:Task 1 训好的 ConvNeXt-Tiny 作为 Teacher 被冻结,每次前向传播输出 61 维logits;ResNet18 作为 Student,它的损失函数由两部分组成——
- 第一部分是 CE Loss:Student 预测 vs 真实标签(硬标签)
- 第二部分是 KL Loss:Student 的软化 logits vs Teacher 的软化 logits(软标签,温度 T=4)
- 两部分以 α=0.6 的权重合并
区别在于:迁移学习传的是参数(需要模型结构一致),知识蒸馏传的是输出分布/软标签(不要求结构一致)。我的项目做的是后者。"
具体代码就三行:
log_p_s = F.log_softmax(student_logits / T, dim=1) # Student 输出,温度软化
p_t = F.softmax(teacher_logits / T, dim=1) # Teacher 输出,温度软化
kl_loss = F.kl_div(log_p_s, p_t, reduction='batchmean')
内部参数结构完全不需要被触碰——这就是知识蒸馏能跨架构工作的根本原因。‘’
蒸馏通过 KL 散度在输出空间对齐,绕开了参数结构的差异,这正是 KD 相比迁移学习的核心优势
KL 散度衡量的是:当你用分布 Q 去"描述"分布 P 时,信息损失了多少。 它越大,说明 Q 和 P 越不像。具体在我的代码里,Teacher 的 logits 先除以温度 T=4 做软化,Student 也做同样处理,然后计算 KL 散度作为蒸馏损失的一部分,和交叉熵损失以 α=0.6 的权重合并训练。
更多推荐



所有评论(0)