资讯动态

深度学习系统复习:从反向传播到Transformer的完整知识梳理

发布时间:2026/10/14 17:42:16 来源:尧图企业网站定制
最近一段时间我把手头一个视觉项目收尾之后做了一件其实早该做的事——对深度学习来一次系统性的复习。说“复习”而不说“学习”是因为这些概念、公式、网络结构我大多都见过、用过甚至在项目里调过参、改过损失函数但真到了要给别人讲清楚“为什么这个模块要放在这里”“为什么这个优化器在这个任务上更稳”的时候发现自己其实是处于一种“会调但说不透”的状态。这种状态在平时写代码的时候没什么影响毕竟跑个模型看指标能出结果就行。但一旦涉及方案评审、技术选型、带新人甚至只是自己想往更深的方向走一步就立刻露馅了。所以我决定把脑子里那些碎片化的深度学习知识重新串一遍不只是看理论而是结合自己真正跑过的实验、踩过的坑、对比过的方案把整个知识体系打散重组。这篇内容本质上是我这轮复习的完整记录适合已经在用深度学习做项目、但感觉知识不成体系的人也适合准备面试、需要把概念讲清楚的人当然如果你刚学完基础理论想看看一个实际从业者是怎么把这些知识落地的这篇内容也能给你一个清晰的参照。1. 这轮复习要解决什么问题碎片知识不成网的三个典型症状动手复习之前我先把“不知道自己不知道什么”这件事想清楚了。深度学习的知识面实在太宽如果没有一个明确的问题清单很容易陷入“看了两天文章、觉得自己懂了、实际还是原样”的假复习。1.1 症状一能跑通模型但解释不出每个组件的必要性这是最普遍的问题。很多人跟我一样用现成框架搭模型ResNet、Transformer、某个预训练权重拿过来就能跑。但如果你问自己几个问题可能一下子就卡住了为什么卷积网络里要堆BatchNorm去掉它会怎样Transformer里为什么要用LayerNorm而不是BatchNorm深度可分离卷积到底省了多少参数为什么MobileNet能跑在手机上为什么同样是分类任务有些模型收敛快、有些慢仅仅是因为网络更深吗这些问题的答案其实都能在基础理论里找到但平时工作里很少会有人追着问你这些。一旦被问住你才会意识到能跑通模型靠的是框架帮你屏蔽了细节而不是你真的理解了这个模型。1.2 症状二调参靠直觉缺乏明确的诊断逻辑我见过不少同学调模型路径是改学习率、换优化器、加数据增强、叠正则化来回试看loss曲线变化行就保留、不行就回滚。本质上是个盲搜。我自己也干过不少这种事。比如有一次做细粒度图像分类模型在训练集上loss降得挺好验证集却一直上不去。当时我的第一反应是加Dropout、加权重衰减试了一圈没好多少。后来重新分析才发现问题根本不在过拟合而是数据标注里有不少错标样本模型在“硬学”那些错误标签。换了个针对性的清洗策略后指标立刻就上来了。这就是典型的“没有诊断只有试错”。深度学习复习的价值恰恰在这里当你真正理解了过拟合、欠拟合、数据分布、损失函数形态之间的关系之后你就能在动手调参之前先定位问题的性质再决定改哪里。1.3 症状三新论文能看懂但放不进自己的知识体系Transformer出来了看一遍Multi-Head Attention的图觉得懂了但问自己它和CNN在特征提取上本质的区别是什么为什么它在序列任务里能碾压RNN为什么后来连视觉任务也要用Transformer结构如果这些问题没法回答那看再多新论文也只是在收集“知识点”而不是在构建“知识网”。网状的深度学习知识比线性的、点状的更有用。复习的核心目标就是把散落的点连成线、把线织成网。2. 深度学习的底层组件复习时最容易高估自己的部分这一轮复习我最深刻的体会是真正值钱的不是那些花哨的新结构而是对底层组件的准确理解。不少人在复习时喜欢直奔大模型、注意力机制、扩散模型反而把最基础的东西略过。但恰恰是这些基础组件决定了你对一个模型的理解深度。2.1 反向传播不只是会算链式法则而是要理解信息流动反向传播是整个深度学习的发动机。复习的时候别只停在“链式法则”四个字上要理解它为什么能让几十亿参数的模型训练起来。我复习时重新推导了一遍全连接网络的反向传播过程。这个过程给我的一个关键启发是梯度消失和梯度爆炸不是抽象概念而是可以通过数值计算真实感受到的现象——尤其在网络层数加深时每一层梯度乘以权重矩阵后数值量级会发生怎样的变化用手推一遍就能理解为什么激活函数的选择那么重要。再往深想一层BatchNorm为什么能加速收敛、LSTM为什么比普通RNN稳定根源都在于它们改变了梯度在时间或空间上的传播路径。理解了这一点你才能明白为什么那些结构会发明出来而不是死记每个block的组成。2.2 常用激活函数的适用边界很多人在选激活函数时就是“默认ReLU除非要输出概率才用Softmax”。这个习惯本身没错但复习时要往前多问一步。ReLU的好处是计算简单、缓解梯度消失但它的“死神经元”问题我一直觉得被低估了。我做过一次对比实验同一个模型用ReLU和LeakyReLU在某个训练集规模较小、初始化不太理想的任务上ReLU出现了明显的神经元死亡现象——训练到一半loss不再下降换成LeakyReLU后收敛恢复正常。这说明一个很实际的问题没有“绝对最好”的激活函数只有“在什么条件下最合适”的激活函数。建议有时间的人可以自己写个小脚本对比ReLU族、Sigmoid/Tanh、Swish/GELU在不同深度、不同初始化方式下的表现这方面的直观感受比看十篇论文都管用。2.3 正则化的本质从“限制模型复杂度”到“对人类先验的编码”复习正则化时我给自己换了一个视角正则化并不只是“防止过拟合的技术手段”它本质上是把人类对任务的先验知识编码到训练过程中。L2正则化相当于假设权重服从高斯分布的先验Dropout相当于训练多个共享参数的子网络的集成数据增强则相当于告诉模型“这些变换不影响语义标签”Label Smoothing相当于告诉模型“真实的类别边界不是那么绝对”。当你从这个角度去理解正则化时你就能针对具体的任务去选择方案。比如在图像分类里数据增强往往比L2正则有用的多因为你掌握的先验是“平移、翻转、色彩抖动不影响物体类别”而在特征极其稀疏的推荐系统场景里L2正则对防止某些特征权重爆炸可能更关键。3. 从经典架构到注意力机制模型的演进逻辑是复习的主线复习模型结构时我最忌讳的就是“按时间线背模型”。我的方式是把架构的演进当成一部“解决问题的历史”来读——每个新结构出来都是为了解决上一个结构的某类问题。3.1 卷积网络为什么它天生适合图像CNN的演进线非常适合梳理“为什么”LeNet确立卷积池化全连接的基本框架AlexNet更大、更深、用ReLU和Dropout展示了深度学习的爆发力VGG用连续小卷积核替代大卷积核感受野不变但参数更少、非线性更强GoogLeNetInception多尺度卷积核并行解决“该用多大卷积核”的问题ResNet引入残差连接解决深度网络的退化问题DenseNet更激进的密集连接让梯度流动达到极致这条线你能看到模型设计每一次变动都是为了解决一个非常具体的问题。比如ResNet的残差连接真正解决的其实不是梯度消失——至少不完全是。它的高明之处在于让网络在初始状态下近似一个恒等映射使得“增加深度”这件事变得至少不会变差从而让训练更深网络成为可能。从一个实践者的角度看这个理解对你有用吗非常有用的地方在于当你面对一个“网络越深效果反而越差”的问题时你会第一时间想到是否缺少了残差结构而不是盲目去调学习率。3.2 从RNN到Transformer序列建模的关键转折RNN家族RNN、LSTM、GRU解决的是“可变长度的序列怎么建模”的问题。它们的共同特点是在时间维度上共享参数、逐步传递隐状态。但RNN有一个致命弱点顺序计算导致并行性差且长距离依赖问题始终存在。LSTM用门控机制缓解了后者但并行度的问题依然是硬伤。Transformer的登场把“注意力机制”变成了核心而不是辅助组件。Self-Attention可以直接建模任意两个位置之间的依赖关系而且计算可以高度并行。复习时我把整个流程手推了一遍Query、Key、Value的线性投影点积相似度除以sqrt(d)做缩放Softmax得到注意力权重加权求和得到输出。为什么除以sqrt(d)因为当维度d增大时点积的数值方差会变大Softmax会进入饱和区梯度会非常小。这是一个小细节但很多人在面试时连这层都答不上来而正是这类细节区分了“读过”和“理解”。3.3 视觉Transformer为什么它能取代CNN的一部分位置ViT把Transformer用在图像上核心是把图像切成patch拉直成序列然后当成NLP的token来建模。这个想法在当时看起来非常大胆但它成功的地方在于证明了“只要数据足够多、计算量足够大简单的结构也能学到非常好的视觉表征”。但ViT也并非全面碾压CNN。它的问题包括需要大量训练数据、优化难度更高、局部细节建模可能不如CNN直接。后来Swim Transformer引入窗口注意力就是为了在保持全局建模能力的同时降低计算复杂度、增强局部性。复习到这里我对“模型结构之间不是替代关系而是互补关系”这件事体会特别深。实际工程中现在非常常见的做法是CNN与Transformer混合——用CNN提取低层特征再用Transformer建模全局关系这也是很多高精度模型选用的方案。4. 训练模型的实战认知数据的处理逻辑比网络设计更影响结果复习过程中我反复提醒自己深度学习不止是搭网络。训练一个好的模型数据层面的处理往往比网络结构调整更能带来实打实的提升。4.1 数据质量对模型影响的量化认知我自己的项目经验里数据问题导致的模型效果差比模型结构问题多得多。比如标签噪声分类任务里1%-2%的错标就足以让模型精度明显下降类别不均衡某些小众类别的样本量如果只有主流类别的十分之一模型几乎会忽略它们分布偏移训练集与推理时的真实数据分布不一致是模型上线后效果衰减的最常见原因。复习时我建议每个人都建立一张“数据问题-现象-方案”的对照表。比如遇到“训练loss偏高”时先看是否标签错了遇到“验证集比训练集好”这种异常情况时检查数据划分是否存在泄漏遇到“训练loss降不下去”时先看特征是否在有效范围。这种诊断思路的价值在于它能让你在动手改模型之前先排除掉最大概率的“元凶”。4.2 数据增强不是越多越好需要有语义边界数据增强的本质是“对训练样本施加不影响语义的变换”。但“不影响语义”这件事需要具体问题具体分析。比如在图像分类中旋转90度通常不影响“这是只猫”的判断但在文本方向识别或医学影像里旋转90度可能完全改变图像的含义。在目标检测任务里翻转、缩放这类增强需要注意边界框的同步变换如果增强过度模型看到的样本会与真实场景明显不同反而会伤害性能。我在复习时给自己定了一个原则每次新增一种增强策略都要问自己“这个变换保留了什么样的语义不变性”。这个原则听起来很朴素但我发现它能有效避免盲目套用增强策略。4.3 小样本项目的应对策略大部分实际项目其实并没有海量数据。数据量有限时最有效的几个方向是用预训练模型做迁移学习而不是从零训练做精细的数据清洗把有限样本的质量提到最高使用更强、更稳的优化策略如余弦退火、较大的批次配合适当正则考虑数据合成或半监督思路把未标注数据也用起来。别一上来就想着上大模型、加大算力。对小数据场景来说把已有数据处理好、把预训练权重用好性价比远高于追求更大的模型。5. 损失函数、优化器与调参逻辑实验验证过的选择标准这一部分是我复习过程中最花时间的也是我认为对实际训练帮助最大的。很多项目训练效果不佳其实问题不是网络结构而是损失函数与优化器选得不对或者学习率策略不够精细。5.1 从任务目标倒推损失函数的设计逻辑选择损失函数的核心原则其实一句话损失函数是任务目标的数学翻译。你希望模型在哪方面表现好就应该让损失函数在那些方面更敏感。回归任务MSE优化的是平均误差但对离群点非常敏感如果你更关心相对误差可以试试log-cosh或Huber Loss。分类任务CrossEntropy是默认选择但当类别极不平衡时加Class Weight或改用Focal Loss往往更有效。检测任务回归框和分类头共用网络时损失权重的配比很影响最终性能。多标签任务判断“哪些类别必须互斥”是选择Binary Cross Entropy和Categorical Cross Entropy的先决条件。有一次我在做细粒度分类时发现模型总是把两个外观极像的类别搞混。简单调结构没用后来把损失函数换成加了“类别间相似度惩罚项”的自定义损失模型才开始学会区分类别间的细微差异。这就是从任务出发设计损失的价值。5.2 优化器选择的性价比排序优化器是另一个被低估的因素。我的经验排序是如果项目从零开始、计算资源有限SGDMomentum往往是收敛稳定的底线选择如果希望更快收敛、对超参数不太敏感AdamW或Adam是工程里最省心的如果追求极致的泛化性能且算力充足SGD的最终精度经常优于Adam但需要更仔细地调学习率和batch size。一个值得注意的高阶组合是“先Adam快速热身再切SGD精调”的阶段式优化策略。我在某个项目里实践过收敛速度和最终指标都有提升。不过这类策略需要训练流程支持优化器热切换工程上要稍微花点功夫。5.3 学习率策略从固定值到WarmupCosine学习率是深度学习训练中最需要细调的超参数。复习时我把常见的学习率策略全部梳理了一遍固定学习率简单但不够高效Step Decay每隔一段epoch降一次简单有效但需要人为判断拐点Exponential Decay平滑衰减适合长期训练Cosine Annealing自动降速、没有硬性拐点非常实用OneCycle先升后降训练速度快且效果不错Warmup先小后大再小让训练前期稳定尤其对Transformer这种结构很重要。实际训练视觉模型时我通常采用“Warmup Cosine”组合效果稳定。要注意的是warmup步数与总训练步数的比例要合理过长的warmup会浪费训练时间过短则起不到稳定作用。5.4 批量大小与学习率的联动关系批量大小这个超参数也值得单独拿出来说。很多人只把它当成“显存允许就尽量大”忽略了它对训练动态的影响。大batch的好处是梯度估计更稳定可以配合更大的学习率加速训练坏处是可能陷入尖锐局部极小值泛化性有时会下降。小batch则恰好相反——梯度噪声大但有时反而能逃出不好的局部极小点。一个常用的实践经验是在学习率调整时batch变大k倍学习率也相应调大sqrt(k)倍左右。这个规则并不绝对但作为起点非常实用。线性缩放规则在大batch场景的某些文献里也被推荐过具体要结合你用的优化器和任务来定。6. 高效推理与工程化落地被很多人跳过但绕不开的部分很多人的深度学习复习止步于“模型训练好了”但我认为对真实项目来说“如何把模型高效地用起来”同样重要甚至更靠近生产力。这一轮我也系统复习了模型压缩与推理优化的常见路径。6.1 模型压缩的常见手段与取舍压缩目标是把模型变得更小、更快、更省资源常见手段主要有剪枝去掉冗余的权重或神经元但需要评估精度影响的平衡点量化把FP32权重换成INT8甚至更低精度推理速度大幅提升可能带来几个百分点的精度损失蒸馏用大模型指导小模型训练让小模型逼近大模型的效果低秩分解将大矩阵分解为若干小矩阵相乘适合某些全连接层。这些手段可以组合使用。一个典型的落地路径是先用蒸馏训练一个小模型再做剪枝最后做INT8量化压缩率可以非常可观而且精度损失能控制在可接受范围内。6.2 推理速度的瓶颈分析做工程优化时先别急着上压缩技术先用性能分析工具看看时间到底花在哪。推理瓶颈通常分为几类计算密集主要受算力限制通常发生在卷积大层或大矩阵乘法中访存密集数据搬运比计算更耗时常见于某些逐元素运算层算子启动开销小模型在GPU上推理时频繁的kernel启动可能比计算本身还慢CPU上的线程调度与缓存不友好导致算力无法充分释放。定位瓶颈之后再做针对性优化会高效得多。比如小模型在GPU上推理慢很多时候不是因为算力不够而是模型太小、算子调度开销占比过高——这种情况下减少层数或合并算子比单纯的模型压缩更有效。6.3 部署推断时的数据通路问题最后提醒一个常见容易翻车的问题训练时和部署时的数据预处理必须严格一致。比如训练时用双线性插值resize部署时却用了最近邻训练时做归一化减去ImageNet均值部署时忘了做——这类不一致会导致模型精度在部署后大幅下降非常隐蔽。我现在做项目会在推理代码里写一个“数据通路对齐测试”把训练前的预处理结果和部署推理的结果做对比确保完全一致后再上线。这个习惯帮我提前挡下了好几次线上事故。7. 大模型时代的复习侧重点旧知识不仅没过时反而是理解新知识的基石现在聊深度学习绕不开大模型这个方向。我的看法是大模型的创新点更多是基于已有基础模块的重新组合与规模化扩展而不是凭空创造了一整套全新机制。所以基础理论的复习不仅没有过时反而是理解大模型的必要条件。7.1 规模化的威力与其背后的相对朴素的思想GPT系列、LLaMA这类模型之所以强大一个重要原因是参数量巨大、训练数据海量。但单看架构它们的核心依然是Transformer的堆叠。那些让我们惊艳的涌现能力很大程度上是规模和数据堆出来的“质变”。复习时我们要理解“这个质变是怎么发生的”更大的模型容量能记住更多模式更多的数据让模型见过更多的语义场景更长的上下文窗口让它能利用更大范围的信息RLHF进一步将模型行为与人类偏好对齐。在这里旧知识里的优化器、学习率、正则化、数据分布这些概念在大模型训练中依然成立只是被放大到了新的量级。7.2 视觉-语言多模态把多个模态映射到同一个语义空间多模态模型的基本思路可以这样理解把图像、文本等不同模态的数据通过各自的编码器转换成特征向量再通过对齐机制让它们映射到同一个语义空间。CLIP就是一个经典例子——它让图像和文本的特征在空间里距离更近。这些东西看起来非常前沿但拆解到最后还是特征提取、相似度学习、编码器设计这些基础知识的组合。7.3 考试与面试导向基础与前沿的比例控制如果这轮复习还带着应对面试或考核的诉求我的建议是七三分成七成投入在基础反向传播、优化算法、正则化、模型结构演进、训练机制三成投入在对前沿工作的原理级理解。基础题目答得稳前沿问题聊得出深度远比每个方向都“知道一点”要强得多。面试里常见的一个问题是“讲讲你最近读的论文”很多人会流利地复述论文的方法却很难讲清楚“这篇论文解决了什么问题、为什么这个问题重要、它和以前的方法比有什么本质区别”。要回答好这类问题靠的恰恰是基础理论带来的判断力。8. 复习方法复盘哪些做法有效哪些浪费了时间最后总结一下我这轮复习的方法论给需要的人一个参考。以下这些都是我亲身验证过有效或踩过坑的经验。8.1 有效的复习动作亲手推导一遍核心公式。反向传播、注意力机制的梯度流、BatchNorm的归一化过程手感完全不同。画模型结构图并标注张量形状。这个过程中你会发现自己对每个维度变化的细节是否真的清楚。用实验验证直觉。对某个结论有怀疑时写个小实验跑一下结论会记得更牢。对读过的论文做“一页纸笔记”包括问题、方法、与旧方法的差异、我的评估。笔记是为了建立自己的框架。8.2 浪费时间的典型做法只看论文不做实验。眼睛觉得会了动手一秒回到原点。沉迷于繁杂的“新名词”而跳过基础推导。凑了一堆大词却没有支撑它们的根。收藏数十篇教程却没有一次完整阅读和消化。囤积素材不会产生知识。在细节上过度纠缠比如精确到小数点后四位的超参值反而忽略了核心逻辑。深度学习复习搞懂为什么、为了什么远比背住某个具体取值更持久。复习这件事没有“完成”的状态。深度学习领域变化快旧知识会不断被新表达方式覆盖新思想又会不断落到旧框架里。每个阶段回头重看一遍都会有新的理解。我自己已经把“深度学习复习”这件事列成了周期性任务。如果你也有类似的感受——平时忙于项目追着新模型跑却感觉自己基础并不那么牢——建议你也给自己留出一段时间把知识重新串一遍。这种投资收益可能比多做两个实验更长远。

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

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

免费获取报价 →
↑