课程目录

第 7 周 · 初阶

第7周:深度学习基础

进入神经网络的世界

周目标:理解神经网络原理,掌握PyTorch基本操作

课程成果:CO3 CO8

已学习 0 / 7 天

本周 7 个学习日

Day 43

神经网络基础

建议时长:75 分钟

本日 CO:CO3 CO8

本日概要

神经网络的基本单元是「线性变换加非线性激活」的堆叠。没有激活函数时,无论堆多少层,整体仍等价于一次线性变换,因此非线性是深度带来表达力的前提。训练依赖两个机制:前向传播计算预测与损失,反向传播沿计算图用链式法则求出每个参数的梯度。PyTorch 的自动微分会在前向时记录操作构成动态计算图,调用反向时沿图回溯累积梯度——注意是累积而非覆盖,所以每个训练步都要先清零,这是初学者最常见的错误来源之一。

听书与视频

本日听书

6 分钟 · MP3 · 双主持人讲解

B 站讲解

【B站最强】3小时跟着TOP级大佬从零开始在FPGA上实现神经网络基础讲解+代码实战!含源码+配套文献—深度学习/人工智能

账号已注销 · 已核验 2026-08-29

在 B 站打开

学习目标

  • 能说明激活函数的必要性,并论证去掉激活后深度为何失去意义
  • 能画出前向传播与反向传播在计算图上的方向,并解释链式法则的作用
  • 能写出训练循环的四个步骤,并说明梯度清零缺失会导致什么现象
  • 能区分训练模式与评估模式,并说明为什么评估时要关闭梯度计算

核心讲解

为什么必须有非线性

一层全连接做的是矩阵乘法加偏置,这是一个线性变换。两个线性变换的复合仍然是线性变换,因此把若干层线性变换直接堆叠,其表达能力与单层完全相同——参数变多了,能拟合的函数族却没有扩大。在每层之间插入非线性激活函数后,网络才能逼近复杂的非线性映射,深度才开始有意义。这是理解「为什么深度学习需要激活函数」最直接的解释,也是设计网络时不能省略的一步。

常用激活函数各有特点。整流线性单元计算简单、在正区间梯度恒定,缓解了深层网络中梯度逐层衰减的问题,但输入为负时梯度为零,可能导致部分神经元长期不更新。带泄漏的变体给负区间保留一个小斜率来缓解这一点。选择激活函数不是玄学,而应结合梯度传播行为与实测收敛曲线来判断,并把对比结果记录下来。

自动微分与训练循环

PyTorch 采用动态计算图:前向传播执行的每个操作都会被记录,形成一张从输入到损失的有向图;调用反向传播时,框架沿这张图从损失出发,用链式法则逐步计算出每个参数的梯度并写入参数的梯度属性。官方文档特别说明梯度是累积的——新计算出的梯度会加到已有值上,而不是替换。这个设计支持梯度累积等技巧,但也意味着常规训练必须在每步开始前显式清零。

标准训练循环有四步:清零梯度、前向计算损失、反向传播求梯度、优化器更新参数。少了清零,梯度会跨批次累加,等效于用一个不断变化的巨大批次训练,表现为损失剧烈震荡或不下降。评估阶段还要做两件事:把模型切到评估模式(影响随机失活与批归一化的行为),以及关闭梯度计算以减少显存占用和加速推理。这两点漏掉不会报错,只会让结果悄悄失真。

实践任务

用 PyTorch 实现一个两层全连接网络完成手写数字分类,手动写出训练循环的四个步骤并解释每一步的作用。

  • 构建一个包含两层全连接与一个激活函数的网络,打印结构并数出可训练参数总量。
  • 实现训练循环的四个步骤,训练若干轮并记录每轮的训练与验证损失。
  • 故意注释掉梯度清零一行,重新训练并记录损失曲线的变化,解释现象成因。
  • 去掉激活函数重新训练,对比准确率与损失曲线;再在评估时忘记切换评估模式与关闭梯度,记录结果差异与显存占用变化。

自测与答案

第 1 题

为什么把多层全连接直接堆叠而不加激活函数是没有意义的?

尚未检查本题。

查看答案与评价要点

参考答案:线性变换的复合仍是线性变换,因此堆叠若干层线性层的表达能力与单层相同,参数增加但可拟合的函数族没有扩大。必须在层间插入非线性激活,网络才能逼近非线性映射,深度才产生额外表达力。

评价要点:指出线性变换复合仍为线性;说明表达能力与单层等价;得出非线性是深度产生意义的前提

第 2 题

训练循环中忘记清零梯度会出现什么现象?为什么框架不默认清零?

尚未检查本题。

查看答案与评价要点

参考答案:梯度会跨批次累加,参数更新方向被历史批次污染,表现为损失剧烈震荡或迟迟不下降。框架不默认清零是因为累积行为本身有用途,例如在显存不足时用多个小批次累积梯度来模拟大批次训练,所以清零时机交由使用者显式控制。

评价要点:描述梯度跨批次累加的后果;指出损失震荡或不收敛的现象;说明梯度累积的正当用途

尚未完成自测。

今日完成标准

  • 提交网络结构、参数量统计与完整训练循环代码
  • 提交去掉梯度清零与去掉激活函数两组对照实验的损失曲线与解释
  • 记录评估模式与梯度关闭对结果和显存的影响,并说明为何不会报错

常见错误与纠正提示

  • 忘记梯度清零,把损失不下降归因于学习率或模型结构
  • 评估时未切换到评估模式,随机失活仍在生效导致结果波动
  • 认为堆更多层一定更强,忽略没有非线性时深度不产生表达力

分层任务

基础任务

在教师提供的骨架上补全训练循环四个步骤,并说出每一步的作用。

标准任务

独立实现网络与训练循环,完成两组对照实验并提交曲线。

挑战任务

实现梯度累积模拟更大批次,验证其与直接使用大批次的等价性与差异。

关联知识点

延伸阅读

学习状态:未学习

Day 44

训练技巧

建议时长:75 分钟

本日 CO:CO3 CO8

本日概要

训练能否收敛,往往取决于优化器、学习率与初始化的配合,而不是模型结构。随机梯度下降沿当前批次的梯度方向更新,加入动量后可以在震荡方向上相互抵消、在一致方向上累积速度;自适应方法为每个参数维护独立的步长,对稀疏梯度与不同尺度的参数更友好,但也可能在某些任务上泛化略差。学习率是影响最大的单个超参数:过大导致发散,过小导致训练缓慢并容易停在较差的位置。判断这些选择的唯一可靠方式是画出损失曲线并对比,而不是照搬别人的配置。

听书与视频

本日听书

6 分钟 · MP3 · 双主持人讲解

B 站讲解

大模型后训练讲解

Wiki爱学习 · 已核验 2026-08-29

在 B 站打开

学习目标

  • 能说明动量如何改变参数更新方向,并解释它为何能缓解震荡
  • 能区分固定步长与自适应步长优化器的适用场景与已知取舍
  • 能通过损失曲线诊断学习率过大或过小,并给出调整方向
  • 能说明批归一化与随机失活在训练与评估阶段行为不同的原因

核心讲解

优化器:方向与步长的两个问题

基础的随机梯度下降只用当前批次的梯度决定更新方向,在损失曲面狭长的区域会反复横跳。动量把历史更新方向按衰减系数累加进来:在方向不断变化的维度上,正负相消抑制了震荡;在方向一致的维度上,速度不断累积,穿越平坦区域更快。这解释了为什么加动量往往比单纯调小学习率更有效。

自适应方法为每个参数维护基于历史梯度平方的缩放因子,使梯度小的参数获得较大步长、梯度大的参数获得较小步长。这在特征尺度差异大或梯度稀疏时很有帮助,通常也让初始调参更容易。代价是引入了额外的状态与超参数,并且在部分视觉任务上其泛化表现不如带动量的随机梯度下降。因此实践建议是:把优化器当作需要实测比较的选项,而不是默认答案。

学习率与两个模式相关的层

学习率过大时,参数越过极小值区域,损失曲线上表现为剧烈跳动甚至变成非数值;过小时损失下降极慢,长时间停在高位。实用的做法是先用一个较大的范围做粗扫,观察损失开始稳定下降的量级,再在该量级附近细调,并配合学习率调度(如按轮次衰减或在验证指标停滞时下调)。所有这些判断都应基于实际曲线,而不是沿用他人配置。

批归一化与随机失活在训练与评估时行为不同,这是两个必须记住的细节。批归一化训练时使用当前批次的统计量并更新全局的滑动平均,评估时使用滑动平均值;随机失活训练时按概率丢弃部分单元,评估时全部保留。若评估时忘记切换模式,前者会让结果依赖批次组成,后者会引入随机性,都会让评估结果不稳定且偏低,而且不会有任何报错提示。

实践任务

在同一个模型与数据上对比至少三种优化器与学习率组合的收敛曲线,并记录出现发散与停滞的具体设置。

  • 固定模型、数据与随机种子,分别用不带动量、带动量的随机梯度下降与一种自适应优化器训练相同轮数,记录损失曲线。
  • 对其中一种优化器扫描至少四个数量级的学习率,记录发散与停滞分别出现在哪个量级。
  • 加入一种学习率调度策略,对比有无调度时的验证指标变化。
  • 在评估阶段分别使用与不使用评估模式各跑一次,记录指标差异,并解释批归一化与随机失活各自造成的影响。

自测与答案

第 1 题

动量为什么能同时抑制震荡并加速穿越平坦区域?

尚未检查本题。

查看答案与评价要点

参考答案:动量把历史更新按衰减系数累加进当前更新。在梯度方向反复变化的维度上,正负分量相互抵消,震荡被抑制;在梯度方向长期一致的维度上,更新量不断累积形成较大步长,因此能更快穿越梯度较小的平坦区域。

评价要点:说明历史更新被累加;解释方向变化维度上的相消;解释方向一致维度上的累积

第 2 题

评估时忘记切换到评估模式,会分别对批归一化与随机失活造成什么影响?

尚未检查本题。

查看答案与评价要点

参考答案:批归一化会继续使用当前批次的统计量而非训练期累积的滑动平均,使结果依赖于评估批次的组成,批次较小时波动明显;随机失活会继续随机丢弃单元,给推理引入随机性并通常降低指标。两者都不会报错,只会让评估结果不稳定且偏低。

评价要点:说明批归一化改用批次统计量导致结果依赖批次;说明随机失活引入推理随机性;指出不会报错这一隐蔽性

尚未完成自测。

今日完成标准

  • 提交三种优化器在相同种子下的损失曲线对比
  • 提交学习率扫描记录,明确指出发散与停滞出现的量级
  • 提交有无学习率调度、有无评估模式两组对照的指标差异与解释

常见错误与纠正提示

  • 直接照搬他人的优化器与学习率配置,不在本任务上验证
  • 把训练不收敛一律归因于模型结构,不先排查学习率与梯度清零
  • 评估时未切换模式,得到偏低且不稳定的指标却去调整模型

分层任务

基础任务

在教师提供的脚本上完成两种优化器的对比,并读出损失曲线差异。

标准任务

独立完成三种优化器与学习率扫描实验,提交完整曲线与结论。

挑战任务

在同一任务上找出自适应优化器与带动量随机梯度下降在验证指标上的差异,并设计实验说明差异是否稳定。

关联知识点

延伸阅读

学习状态:未学习

Day 45

CNN

建议时长:75 分钟

本日 CO:CO3 CO8

本日概要

卷积网络利用图像的两个先验:局部性——相邻像素相关性更强,因此用小窗口提取局部特征;平移不变性——同一个特征在图像不同位置都应被识别,因此同一组卷积核在整幅图上共享参数。参数共享使卷积层的参数量远小于同等规模的全连接层。池化通过降采样扩大感受野并提供一定的位移容忍。迁移学习是实际项目中最常用的做法:用在大规模数据上预训练好的骨干网络提取通用特征,只训练新的分类头,或在此基础上以较小学习率微调,能在样本很少时取得远好于从零训练的结果。

听书与视频

本日听书

6 分钟 · MP3 · 双主持人讲解

B 站讲解

手把手带你从0开始搭建CNN卷积神经网络,代码逐行按小白角度讲解

DT算法工程师前钰 · 已核验 2026-08-29

在 B 站打开

学习目标

  • 能说明卷积的局部连接与参数共享如何减少参数量并引入平移不变性
  • 能解释感受野的概念,以及层数与池化如何影响它
  • 能区分冻结特征提取与微调两种迁移策略的适用条件
  • 能说明使用预训练权重时必须与训练时保持一致的预处理,并解释不一致的后果

核心讲解

卷积的两个先验

全连接层把输入的每个像素与每个输出单元相连,参数量随图像尺寸迅速膨胀,而且完全没有利用像素的空间关系。卷积层改为在局部窗口内连接,并让同一组权重在整幅图上滑动共享。前者体现了局部性先验,后者体现了平移不变性先验——一个边缘检测器不应该因为边缘出现在图像右下角就失效。参数共享带来的直接好处是参数量大幅下降,同时也提升了对位置变化的鲁棒性。

单层卷积只能看到一个小窗口,但多层堆叠后,深层单元对应的原始图像区域会逐层扩大,这个区域称为感受野。池化通过降采样进一步扩大感受野并压缩空间尺寸,同时提供对小幅位移的容忍。设计网络时需要估算最深层的感受野是否覆盖了目标物体的典型尺寸——感受野过小时,模型无法看到完整对象,增加宽度也无济于事。

迁移学习的两种用法与一个陷阱

冻结特征提取是指保持预训练骨干的权重不变,只训练新加的分类头。它训练快、显存占用低、在样本极少时不容易过拟合,适合目标任务与预训练数据分布接近的情况。微调是指同时更新骨干权重,通常对骨干使用比分类头小得多的学习率,适合目标任务与预训练分布差异较大且有一定样本量的情况。两者不是二选一,常见做法是先冻结训练分类头至收敛,再解冻部分深层做小学习率微调。

一个容易被忽略的陷阱是预处理必须与预训练时一致。预训练权重是在特定的输入尺寸、通道顺序和归一化统计量下学到的,torchvision 的官方模型页面为每套权重提供了对应的预处理变换。如果自行使用了不同的归一化参数,输入分布与骨干期望的分布错位,特征质量会明显下降,而现象往往表现为「迁移学习没有效果」,很难直接联想到预处理。因此使用预训练权重时,应当直接使用其配套的预处理定义。

实践任务

用预训练骨干网络完成一个小样本图像分类任务,对比冻结特征提取与微调两种策略的效果与训练成本。

  • 选择一个小样本图像数据集,记录样本数、类别数与图像尺寸;载入预训练骨干及其配套预处理。
  • 实现冻结特征提取:替换分类头,只训练新层,记录训练时间、显存占用与验证准确率。
  • 实现微调:解冻部分深层,对骨干使用较小学习率,记录同样的三项指标并与上一步对比。
  • 故意改用一组与预训练不一致的归一化参数重跑,记录准确率下降幅度;再从零训练同一结构作为基线对比。

自测与答案

第 1 题

卷积层相对全连接层的参数量优势来自哪里?这带来了什么额外好处?

尚未检查本题。

查看答案与评价要点

参考答案:来自局部连接与参数共享:每个输出单元只连接输入的一个小窗口,且同一组卷积核在整幅图上滑动复用同一份权重,因此参数量与图像尺寸基本无关。额外好处是引入了平移不变性先验,同一特征出现在不同位置都能被识别,提升了对位置变化的鲁棒性。

评价要点:指出局部连接与参数共享两点;说明参数量与图像尺寸解耦;指出平移不变性带来的鲁棒性

第 2 题

使用预训练权重时,为什么必须采用与预训练一致的输入预处理?

尚未检查本题。

查看答案与评价要点

参考答案:预训练权重是在特定输入尺寸、通道顺序与归一化统计量下学到的,骨干各层对输入分布有隐含期望。预处理不一致会使输入分布与该期望错位,提取到的特征质量显著下降,表现为迁移学习效果不佳,且这种问题不会报错,很难被直接察觉。官方模型页面为每套权重提供了配套的预处理定义,应直接使用。

评价要点:指出权重与输入分布相绑定;说明错位导致特征质量下降;提出使用官方配套预处理

尚未完成自测。

今日完成标准

  • 提交冻结特征提取与微调两种策略的准确率、训练时间与显存占用对比
  • 提交预处理不一致对照实验的准确率下降数据
  • 提交从零训练基线的结果,并据此说明迁移学习的实际收益

常见错误与纠正提示

  • 使用预训练权重却自行设定归一化参数,导致迁移效果不佳且难以定位
  • 在样本极少时直接全网络微调,很快过拟合
  • 不设从零训练基线,无法量化迁移学习带来的收益

分层任务

基础任务

使用教师提供的脚本完成冻结特征提取,并读出与从零训练的准确率差距。

标准任务

独立完成两种迁移策略与预处理对照实验,提交完整对比。

挑战任务

设计分阶段策略(先冻结训练头部再解冻深层微调),验证其相对单一策略的收益并说明代价。

关联知识点

延伸阅读

学习状态:未学习

Day 46

RNN与序列模型

建议时长:75 分钟

本日 CO:CO3 CO8

本日概要

序列数据的特点是顺序本身携带信息。循环网络按时间步依次处理输入并维护一个隐藏状态,把历史信息向后传递。它的结构性困难在于长距离依赖:梯度沿时间步反向传播时会连乘,导致逐步衰减或爆炸,因此难以学到相隔很远的依赖关系。长短期记忆网络引入门控与一条相对畅通的记忆通路来缓解衰减问题,但仍然是顺序计算的——第 t 步必须等第 t-1 步算完,无法在时间维度上并行,这正是后来注意力机制取而代之的主要动因之一。

听书与视频

本日听书

6 分钟 · MP3 · 双主持人讲解

B 站讲解

20分钟掌握RNN与LSTM原理及其结构应用(Seq2Seq & Attention)

阿力阿哩哩 · 已核验 2026-08-29

在 B 站打开

学习目标

  • 能说明循环网络如何通过隐藏状态传递历史信息
  • 能解释梯度沿时间步连乘导致衰减或爆炸的机制
  • 能说明门控结构缓解长距离依赖问题的思路
  • 能指出顺序计算对训练并行度的限制,并把它与后续注意力机制联系起来

核心讲解

隐藏状态与长距离依赖

循环网络在每个时间步接收当前输入与上一步的隐藏状态,输出新的隐藏状态。隐藏状态因此承担了「到目前为止看到了什么」的压缩表示。这个设计天然适合变长序列,参数量也不随序列长度增长。但压缩是有损的:越早的信息经过越多次变换,保留下来的成分越少,模型对开头信息的记忆会随序列变长而快速衰减。

更根本的困难来自梯度传播。反向传播要沿时间步逐级回溯,梯度是一连串因子的乘积;当这些因子普遍小于一时,连乘结果指数级趋近于零,早期时间步几乎收不到有效梯度,模型学不到长距离依赖;当因子普遍大于一时则会爆炸,训练发散。梯度裁剪可以处理爆炸,衰减则要靠结构改进。门控网络通过一条加性的记忆通路让信息能够较少衰减地跨越多个时间步,从而在一定程度上缓解这一问题。

顺序计算的代价

即使解决了梯度衰减,循环结构还有一个无法绕开的限制:第 t 步的计算依赖第 t-1 步的结果,因此同一条序列内部无法并行。批次维度可以并行,但序列长度方向必须逐步推进。当序列很长时,训练时间与序列长度基本成正比,这在现代硬件的大规模并行能力面前是明显的浪费。

这正是注意力机制的动因之一:它让每个位置直接与序列中所有位置建立关联,计算可以在序列维度上并行展开,长距离依赖也不必经过多次传递。代价是计算量随序列长度平方增长,且需要额外的位置编码来补回被放弃的顺序信息——因为完全并行的注意力本身不知道谁在前谁在后。理解这一组取舍,是理解下一节 Transformer 的关键铺垫。

实践任务

用循环网络完成一个短文本分类任务,观察序列长度增加时的效果变化,并解释顺序依赖对训练速度的影响。

  • 准备一个短文本分类数据集,完成分词与序列长度统计,记录长度分布的分位数。
  • 实现一个循环网络分类器,训练并记录准确率,同时记录每轮训练耗时。
  • 把输入序列截断为不同长度(如原长的四分之一、二分之一、全长),对比准确率与训练耗时随长度的变化。
  • 记录训练中是否出现梯度爆炸,加入梯度裁剪后重跑并对比;写出顺序计算限制并行度的具体表现。

自测与答案

第 1 题

为什么循环网络难以学到长距离依赖?梯度裁剪能解决这个问题吗?

尚未检查本题。

查看答案与评价要点

参考答案:梯度沿时间步反向传播时是一连串因子的连乘,因子普遍小于一时结果指数衰减,早期时间步几乎收不到有效梯度。梯度裁剪只处理梯度过大导致的发散,对衰减无效;缓解衰减需要结构改进,例如引入门控与加性的记忆通路。

评价要点:说明梯度连乘导致指数衰减;指出早期时间步收不到有效梯度;明确梯度裁剪只解决爆炸不解决衰减

第 2 题

循环网络的顺序计算限制体现在哪里?注意力机制用什么代价换取了并行?

尚未检查本题。

查看答案与评价要点

参考答案:第 t 步依赖第 t-1 步的隐藏状态,同一条序列内部无法在时间维度并行,训练耗时随序列长度线性增长。注意力让每个位置直接关联所有位置,序列维度可并行,代价是计算量随序列长度平方增长,并且需要额外的位置编码来补回顺序信息。

评价要点:指出时间步之间的依赖阻碍并行;说明注意力可在序列维度并行;指出平方复杂度与位置编码两项代价

尚未完成自测。

今日完成标准

  • 提交序列长度分布统计与不同截断长度下的准确率、耗时对比
  • 记录训练过程中的梯度异常现象与梯度裁剪前后的对比
  • 用自己的话写出顺序计算对并行度的限制,并说明它如何引出注意力机制

常见错误与纠正提示

  • 把长序列效果差一律归因于数据量不足,忽略梯度衰减这一结构性原因
  • 用梯度裁剪去解决梯度衰减问题
  • 只比较准确率不记录训练耗时,看不到顺序计算的代价

分层任务

基础任务

在教师提供的脚本上运行两种序列长度的对比,并读出准确率与耗时差异。

标准任务

独立完成分类器实现与三种长度的对比实验,提交完整记录。

挑战任务

构造一个需要跨越很长距离才能判断的合成任务,验证循环结构在其上的失败,并解释失败机制。

关联知识点

延伸阅读

学习状态:未学习

Day 47

Transformer初探

建议时长:75 分钟

本日 CO:CO3 CO8

本日概要

注意力机制把每个位置的表示拆成查询、键、值三个角色:用查询与所有键计算相似度得到一组权重,再用这组权重对值加权求和。这样任意两个位置之间只需一步就能建立关联,不必像循环网络那样逐步传递。缩放点积注意力在计算相似度后除以维度的平方根,目的是避免维度较大时点积数值过大、经归一化后梯度过小。多头机制把表示切分成若干子空间并行做注意力,让模型在不同子空间关注不同类型的关系。由于注意力对位置是对称的,必须显式加入位置编码,否则打乱词序不会改变输出。

听书与视频

本日听书

6 分钟 · MP3 · 双主持人讲解

B 站讲解

ALL in Transformer | 全网最清晰、最易懂的transformer讲解(上)编码器层 | 一次性讲清楚transformer架构

Hi_王汉三 · 已核验 2026-08-29

在 B 站打开

学习目标

  • 能说明查询、键、值三者的角色,并手工完成一次小规模注意力计算
  • 能解释缩放因子的作用,以及缺少缩放在高维时会造成什么问题
  • 能说明多头机制的目的,并区分它与增大单头维度的差异
  • 能论证位置编码的必要性,并用实验验证注意力本身对顺序不敏感

核心讲解

查询、键、值与缩放

注意力的直观理解是「按相关程度取信息」。每个位置生成一个查询向量表示它想要什么,同时生成键向量表示它能提供什么样的匹配依据,以及值向量表示它实际携带的内容。查询与所有键做点积得到相似度分数,经归一化后成为一组和为一的权重,再用这组权重对所有值加权求和,得到该位置的输出。整个过程是可微的矩阵运算,因此可以高效地在硬件上并行执行。

缩放因子的作用常被忽略。当向量维度较大时,随机初始化下的点积数值会随维度增长而变大,归一化函数的输入落入饱和区,输出接近独热分布,反向传播时梯度极小,训练难以进行。除以维度的平方根把点积的数值范围拉回合适区间,使权重分布不至于过早极化。这是一个纯粹出于数值稳定考虑的设计,理解它有助于判断其他类似结构中的缩放选择。

多头与位置编码

多头注意力把表示切分成若干较低维的子空间,在每个子空间独立计算注意力,最后把结果拼接并做一次线性变换。它与「单头但维度更大」的差别在于:多头允许不同的头学到不同类型的关联——有的头可能关注相邻词,有的关注句法上远距离的搭配——而单个大头只能给出一组权重。代价是每个头的维度变小,单头能表达的细粒度信息减少,因此头数与每头维度是一组需要权衡的超参数。

注意力对输入位置是对称的:如果把序列中的元素打乱顺序,每个位置计算出的注意力权重集合不变,输出只是随之重排,模型无法感知谁在前谁在后。因此必须显式注入位置信息,常见做法是给每个位置加上一个与位置相关的编码向量。这一点可以直接用实验验证——去掉位置编码后打乱词序,模型输出的集合不变,这个实验比任何文字解释都更能说明位置编码的必要性。

实践任务

手工计算一个小规模注意力矩阵的完整过程,并用框架实现验证结果,同时验证去掉位置编码后词序被忽略。

  • 取一个长度为三、维度为四的小例子,手工写出查询、键、值矩阵,逐步计算点积、缩放、归一化与加权求和的中间结果。
  • 用框架的注意力实现计算同一组输入,对比手工结果,确认二者一致。
  • 去掉缩放因子并把维度增大,观察归一化后的权重分布如何变得极化,记录数值。
  • 构造一段输入并打乱顺序,在没有位置编码的情况下对比输出集合是否改变;再加入位置编码重复实验并记录差异。

自测与答案

第 1 题

缩放点积注意力中的缩放因子解决了什么问题?去掉它在高维情况下会发生什么?

尚未检查本题。

查看答案与评价要点

参考答案:它解决点积数值随维度增大而变大的问题。去掉缩放时,高维下的点积方差较大,归一化函数输入进入饱和区,输出接近独热分布,反向传播时梯度极小,训练难以推进。除以维度的平方根把数值范围拉回合适区间,使权重分布不过早极化。

评价要点:指出点积数值随维度增大;说明归一化饱和导致梯度过小;指出缩放使权重分布不过早极化

第 2 题

为什么 Transformer 必须显式加入位置编码?如何用实验证明?

尚未检查本题。

查看答案与评价要点

参考答案:注意力对位置是对称的,打乱序列顺序后各位置计算出的权重集合不变,输出只是随之重排,模型无法感知顺序。可以设计实验:在不加位置编码的情况下,把输入序列打乱后比较输出集合,若集合不变即证明模型忽略词序;加入位置编码后重复,输出会随顺序变化。

评价要点:指出注意力对位置对称;说明打乱后输出集合不变;给出可执行的对照实验设计

尚未完成自测。

今日完成标准

  • 提交手工计算的完整中间结果,并与框架实现的输出一致
  • 提交去掉缩放后权重分布极化的数值记录
  • 提交位置编码有无两种情况下打乱词序的输出对比

常见错误与纠正提示

  • 把注意力理解为「模型自己会关注重点」的隐喻,说不出查询、键、值的具体计算
  • 认为多头等价于把单头维度增大,忽略不同头可学到不同关系
  • 忘记位置编码,模型对词序完全不敏感却难以定位原因

分层任务

基础任务

在教师给出的数值上完成手工注意力计算,并核对每一步中间结果。

标准任务

独立完成手工计算、框架验证与两组对照实验。

挑战任务

实现一个简化的多头注意力,验证不同头在同一输入上学到的权重模式差异并给出可视化。

关联知识点

延伸阅读

学习状态:未学习

Day 48

PyTorch实战

建议时长:75 分钟

本日 CO:CO3 CO8

本日概要

从能跑通到能复现,中间隔着一整套工程习惯。可复现的最低要求是:固定随机种子、记录框架与驱动版本、记录数据版本与划分方式、保存完整的超参数配置。使用加速设备时还要注意数据在设备之间的搬运往往是瓶颈——数据加载线程数、批大小与显存占用需要一起调。混合精度可以显著提升吞吐并降低显存占用,但要确认结果的精度损失在可接受范围内。最重要的一条是:每次实验只改一个变量,否则得到的差异无法归因。

听书与视频

本日听书

6 分钟 · MP3 · 双主持人讲解

B 站讲解

【深度学习入门】深度学习框架PyTorch 图像分类CIFAR-10

中南大学夏老师 · 已核验 2026-08-29

在 B 站打开

学习目标

  • 能列出一次深度学习实验可复现所必需的记录项
  • 能诊断训练瓶颈在数据加载还是在计算,并给出对应的调整方向
  • 能说明批大小、显存占用与学习率之间的相互影响
  • 能设计单变量对照实验,使观察到的差异可以被正确归因

核心讲解

可复现是一份清单

深度学习实验的不可复现,多数不是因为框架的随机性无法控制,而是因为记录不全。一份最低限度的记录清单包括:随机种子、框架与加速库版本、数据集版本与划分方式(含划分所用的种子)、完整超参数配置、以及硬件型号。缺任何一项,几周后想重现同一个结果都会变得困难,更不用说让别人验证。把这份清单写进实验脚本的输出里,比事后凭记忆补写可靠得多。

需要说明的是,即使记录完整,某些加速库的算子实现本身可能是非确定性的,多次运行会有细微差异。这不是问题,只要在报告中说明「同一配置下重复三次的指标范围」,读者就能判断某个改进是真实提升还是落在波动范围内。用单次运行的小幅提升论证一个改动有效,是深度学习实验中最常见的不严谨之处。

瓶颈定位与单变量原则

训练慢不一定是算力不足。如果加速设备的利用率长期偏低,瓶颈往往在数据侧:磁盘读取、解码、增强都在处理器上完成,跟不上设备的消耗速度。此时增加数据加载的工作线程数、使用更高效的图像解码、把数据预先转成更紧凑的格式,收益通常远大于换更好的设备。反之,若设备利用率已经很高,则应从批大小、混合精度或模型结构上想办法。先测利用率再动手,是避免无效优化的基本纪律。

批大小的调整会牵动其他参数。增大批大小会提高显存占用与单步吞吐,但每轮的参数更新次数减少,通常需要相应调整学习率;同时较大批次的梯度噪声更小,这既可能加速收敛也可能影响泛化。因此把批大小从三十二改到二百五十六的同时又改了学习率和优化器,得到的结果无法归因于任何单项。单变量原则说起来简单,但在追求「先跑出一个好结果」的压力下最容易被放弃。

实践任务

在加速设备上训练一个图像分类器,记录完整的可复现配置,并做一次单变量对照实验说明某项改动的实际收益。

  • 编写训练脚本,让它在启动时打印并保存完整的可复现配置清单(种子、版本、数据划分、超参数、硬件)。
  • 训练过程中记录加速设备利用率,判断瓶颈在数据加载还是计算,并写出判断依据。
  • 针对判定的瓶颈做一次单变量改动(如调整数据加载线程数或开启混合精度),记录改动前后的每轮耗时与最终指标。
  • 在同一配置下重复训练三次,记录指标的波动范围,并据此判断上一步的改动是否为真实提升。

自测与答案

第 1 题

训练很慢但加速设备利用率很低,应优先排查什么?为什么换更强的设备通常无效?

尚未检查本题。

查看答案与评价要点

参考答案:应优先排查数据侧:磁盘读取、解码与数据增强是否跟不上设备消耗速度,可从增加数据加载工作线程、使用更高效的解码或预先转换为紧凑格式入手。设备利用率低说明计算并非瓶颈,换更强设备只会让空转时间占比更高,实际训练耗时改善有限。

评价要点:指出瓶颈在数据加载侧;给出至少两种数据侧优化方向;解释利用率低时换设备无效的原因

第 2 题

为什么用单次运行的小幅指标提升论证一个改动有效是不严谨的?

尚未检查本题。

查看答案与评价要点

参考答案:同一配置多次运行本身存在波动,部分算子实现是非确定性的。若提升幅度落在重复运行的波动范围内,就无法区分是真实改进还是随机波动。严谨做法是报告同一配置下重复多次的指标范围,并说明改进幅度是否超出该范围。

评价要点:指出同配置重复运行存在波动;说明小幅提升可能落在波动范围内;提出报告重复运行的指标范围

尚未完成自测。

今日完成标准

  • 提交完整的可复现配置清单,他人依此可重跑实验
  • 提交瓶颈判断依据与单变量改动前后的耗时与指标对比
  • 提交同配置重复三次的指标范围,并据此判断改动是否为真实提升

常见错误与纠正提示

  • 一次实验改动多个变量,结果差异无法归因
  • 未记录数据划分种子,重跑时得到不同划分而误以为模型不稳定
  • 在设备利用率很低时投入精力优化模型结构

分层任务

基础任务

在教师提供的脚本上补齐配置记录项,并读出设备利用率判断瓶颈。

标准任务

独立完成配置清单、瓶颈定位与单变量对照实验。

挑战任务

对比开启与关闭混合精度的吞吐、显存与指标差异,并判断精度损失是否在可接受范围内。

关联知识点

延伸阅读

学习状态:未学习

Day 49

周末复盘

建议时长:75 分钟

本日 CO:CO3 CO8

本日概要

本周收尾把结构演进串成一条有内在逻辑的线:全连接不利用任何结构先验,参数量大且难以扩展到高维输入;卷积引入局部性与平移不变性,用参数共享换来效率与鲁棒性;循环网络引入时间维度的状态传递以处理变长序列,但受制于梯度衰减与顺序计算;注意力放弃顺序递推,让任意两个位置直接关联,换来并行能力与长距离建模,代价是平方复杂度与需要显式位置信息。理解每一步「解决了什么、引入了什么新代价」,比记住每种结构的公式更重要,也是判断新模型是否适合自己任务的基础。

听书与视频

本日听书

6 分钟 · MP3 · 双主持人讲解

B 站讲解

手推Transformer(3)架构图解

会点AI的刘海儿 · 已核验 2026-08-29

在 B 站打开

学习目标

  • 能按「引入的先验—解决的问题—新增的代价」三要素描述每一次结构演进
  • 能为图像、序列与长文本三类任务分别选择合适的结构并说明理由
  • 能说明为什么结构选择要与数据量、序列长度和算力预算一起考虑
  • 能整理出一份深度学习实验的个人检查清单

核心讲解

每一步都是取舍

全连接层不做任何结构假设,因此通用,但参数量随输入维度线性增长,对图像这种高维输入既低效又容易过拟合。卷积用局部性与平移不变性两个先验换来了参数共享,代价是这两个先验必须成立——对于本身不具备平移不变性的数据(如表格特征),卷积并不合适。这说明先验不是免费的:它在合适的数据上是效率,在不合适的数据上是偏差。

循环网络为序列引入了状态传递,解决了变长输入的建模问题,代价是梯度沿时间连乘带来的衰减与无法并行的顺序计算。注意力放弃递推,让任意两个位置一步关联,同时解决了长距离依赖与并行度两个问题,但引入了随序列长度平方增长的计算量,并且必须显式补回位置信息。把这条线索完整讲出来,就能理解后续各种高效注意力变体在优化的是哪一项代价。

从结构选择到实验纪律

选择结构时,除了任务类型还要看三个现实约束:数据量决定能否支撑从零训练还是必须迁移学习;序列长度决定注意力的平方复杂度是否可承受;算力预算决定单次实验的迭代速度,进而决定能做多少次对照。一个在论文中效果最好的结构,如果在自己的数据量与算力下无法收敛或无法迭代,就不是好选择。把这三个约束写在方案开头,能避免大量走弯路。

本周的工程纪律可以压缩成一份清单:训练循环是否清零梯度、评估是否切换模式并关闭梯度、预处理是否与预训练权重匹配、随机种子与版本是否记录、瓶颈是否先测再优化、每次实验是否只改一个变量、结论是否给出重复运行的波动范围。这份清单适用于本周所有实验,也适用于后续的大模型微调与部署环节。

实践任务

画出从全连接到注意力的结构演进图,为每一步标注引入的先验、解决的问题与新增的代价,并据此为三个任务各选一种结构。

  • 画出从全连接到卷积、循环、注意力的演进图,为每一步标注引入的先验、解决的问题与新增代价。
  • 为图像分类、短文本分类、长文档理解三个任务各选一种结构,写出选择理由与被放弃方案的原因。
  • 为每个选择补充数据量、序列长度与算力预算三个现实约束的评估,并说明约束变化时选择会如何改变。
  • 整理本周的个人实验检查清单,逐条写出「不做会发生什么」,并至少举一个本周实验中亲历的例子。

自测与答案

第 1 题

为什么说卷积引入的先验「不是免费的」?请举一个不适合使用卷积的例子。

尚未检查本题。

查看答案与评价要点

参考答案:局部性与平移不变性是关于数据的假设,只有在假设成立时才带来效率与鲁棒性;假设不成立时它就是一种偏差,会限制模型表达。例如一般的表格型特征,各列之间没有空间上的邻近关系,也不存在平移不变性,对其使用卷积会引入无依据的结构约束。

评价要点:指出先验是关于数据的假设;说明假设不成立时先验变成偏差;给出表格数据等具体反例

第 2 题

注意力相对循环网络解决了哪两个问题?各自引入了什么新代价?

尚未检查本题。

查看答案与评价要点

参考答案:解决了长距离依赖(任意两位置一步关联,不必逐步传递)与并行度(序列维度可并行计算)两个问题。新代价是计算量与显存随序列长度平方增长,以及必须显式加入位置编码来补回被放弃的顺序信息。

评价要点:指出长距离依赖与并行度两个问题;指出平方复杂度代价;指出需要显式位置编码

尚未完成自测。

今日完成标准

  • 提交演进图,每一步三要素齐全
  • 三个任务各有结构选择、理由、放弃原因与三项现实约束评估
  • 提交个人检查清单,每条附「不做会发生什么」与一个亲历例子

常见错误与纠正提示

  • 只记住各种结构的公式,说不出每一步解决了什么问题、引入了什么代价
  • 选择结构时只看任务类型,不评估数据量、序列长度与算力预算
  • 把论文中的最优结构直接套用到自己的小数据集上

分层任务

基础任务

在教师给出的演进图骨架上补齐每一步的先验与代价。

标准任务

独立完成演进图、三个任务的选择与个人检查清单。

挑战任务

针对长文档场景调研一种降低注意力复杂度的思路,说明它优化的是哪一项代价以及引入了什么新的限制。

关联知识点

延伸阅读

学习状态:未学习