1. 引言

昨天我们完成了 VLA(Vision-Language-Action,视觉-语言-动作)模型的入门,了解了它是什么、能做什么,以及整个学习路线图。今天正式进入第一块基石------深度学习基础。
VLA 模型本质上是深度学习在「视觉 + 语言 + 机器人控制」三个模态上的综合应用。因此,不把深度学习的基础打牢,后面看 VLA 论文和代码时会处处碰壁。今天的目标很明确:用一天时间,把深度学习最核心的概念、训练流程和常用工具串起来,为后续学习视觉编码器、语言模型和动作解码器做好准备。
2. 深度学习核心概念速览
2.1 神经网络是怎么工作的
深度学习的基础是神经网络。一个最简单的神经网络由三层组成:
- 输入层:接收数据,比如一张图片的像素值、一段文本的词向量。
- 隐藏层:对数据进行逐层变换,提取越来越抽象的特征。
- 输出层:给出最终结果,比如分类概率、回归数值。
每一层由若干「神经元」组成,每个神经元做的事情可以概括为两步:
- 对输入做加权求和,再加上一个偏置;
- 通过一个非线性激活函数(如 ReLU、GELU)输出结果。
python
import torch
import torch.nn as nn
# 一个简单的两层全连接网络
model = nn.Sequential(
nn.Linear(784, 256), # 输入 784 维,隐藏层 256 维
nn.ReLU(),
nn.Linear(256, 10) # 输出 10 类
)
2.2 激活函数为什么重要
如果没有激活函数,无论堆多少层,整个网络都等价于一个线性变换,表达能力非常有限。激活函数引入非线性,让网络能拟合复杂的函数关系。
常用激活函数:
| 函数 | 公式 | 特点 |
|---|---|---|
| ReLU | max(0, x) | 计算快,缓解梯度消失,最常用 |
| GELU | x · Φ(x) | Transformer 标配,VLA 中大量使用 |
| Sigmoid | 1 / (1 + e⁻ˣ) | 输出 0~1,适合二分类 |
| Tanh | (eˣ - e⁻ˣ) / (eˣ + e⁻ˣ) | 输出 -1~1,适合归一化 |
注意:VLA 模型里几乎清一色用 GELU,因为 Transformer 架构(包括 ViT、BERT、GPT 系列)默认都选它。
下面我们逐个拆解这四种激活函数,看看它们的曲线长什么样、各自适合什么场景。
2.2.1 ReLU:深度学习的主力军
ReLU(Rectified Linear Unit,修正线性单元)是当前最常用的激活函数,公式极其简单:

f(x) = max(0, x)
它的函数曲线如下:
#mermaid-svg-VMN24sj47JLKYawJ{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-VMN24sj47JLKYawJ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-VMN24sj47JLKYawJ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-VMN24sj47JLKYawJ .error-icon{fill:#552222;}#mermaid-svg-VMN24sj47JLKYawJ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-VMN24sj47JLKYawJ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-VMN24sj47JLKYawJ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-VMN24sj47JLKYawJ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-VMN24sj47JLKYawJ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-VMN24sj47JLKYawJ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-VMN24sj47JLKYawJ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-VMN24sj47JLKYawJ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-VMN24sj47JLKYawJ .marker.cross{stroke:#333333;}#mermaid-svg-VMN24sj47JLKYawJ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-VMN24sj47JLKYawJ p{margin:0;}#mermaid-svg-VMN24sj47JLKYawJ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-VMN24sj47JLKYawJ .cluster-label text{fill:#333;}#mermaid-svg-VMN24sj47JLKYawJ .cluster-label span{color:#333;}#mermaid-svg-VMN24sj47JLKYawJ .cluster-label span p{background-color:transparent;}#mermaid-svg-VMN24sj47JLKYawJ .label text,#mermaid-svg-VMN24sj47JLKYawJ span{fill:#333;color:#333;}#mermaid-svg-VMN24sj47JLKYawJ .node rect,#mermaid-svg-VMN24sj47JLKYawJ .node circle,#mermaid-svg-VMN24sj47JLKYawJ .node ellipse,#mermaid-svg-VMN24sj47JLKYawJ .node polygon,#mermaid-svg-VMN24sj47JLKYawJ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-VMN24sj47JLKYawJ .rough-node .label text,#mermaid-svg-VMN24sj47JLKYawJ .node .label text,#mermaid-svg-VMN24sj47JLKYawJ .image-shape .label,#mermaid-svg-VMN24sj47JLKYawJ .icon-shape .label{text-anchor:middle;}#mermaid-svg-VMN24sj47JLKYawJ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-VMN24sj47JLKYawJ .rough-node .label,#mermaid-svg-VMN24sj47JLKYawJ .node .label,#mermaid-svg-VMN24sj47JLKYawJ .image-shape .label,#mermaid-svg-VMN24sj47JLKYawJ .icon-shape .label{text-align:center;}#mermaid-svg-VMN24sj47JLKYawJ .node.clickable{cursor:pointer;}#mermaid-svg-VMN24sj47JLKYawJ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-VMN24sj47JLKYawJ .arrowheadPath{fill:#333333;}#mermaid-svg-VMN24sj47JLKYawJ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-VMN24sj47JLKYawJ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-VMN24sj47JLKYawJ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-VMN24sj47JLKYawJ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-VMN24sj47JLKYawJ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-VMN24sj47JLKYawJ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-VMN24sj47JLKYawJ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-VMN24sj47JLKYawJ .cluster text{fill:#333;}#mermaid-svg-VMN24sj47JLKYawJ .cluster span{color:#333;}#mermaid-svg-VMN24sj47JLKYawJ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-VMN24sj47JLKYawJ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-VMN24sj47JLKYawJ rect.text{fill:none;stroke-width:0;}#mermaid-svg-VMN24sj47JLKYawJ .icon-shape,#mermaid-svg-VMN24sj47JLKYawJ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-VMN24sj47JLKYawJ .icon-shape p,#mermaid-svg-VMN24sj47JLKYawJ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-VMN24sj47JLKYawJ .icon-shape .label rect,#mermaid-svg-VMN24sj47JLKYawJ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-VMN24sj47JLKYawJ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-VMN24sj47JLKYawJ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-VMN24sj47JLKYawJ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} x < 0 时输出恒为 0
x ≥ 0 时输出等于 x
输出范围 [0, +∞)
优点:
- 计算极快:只需一次比较运算,没有指数、对数等复杂计算;
- 缓解梯度消失:在 x > 0 的区域导数为 1,梯度可以顺畅地反向传播,不会像 Sigmoid 那样在两端梯度趋近于 0;
- 稀疏激活:负输入直接置 0,让网络自动产生稀疏表示,有助于提取特征。
缺点:
- 神经元死亡(Dead ReLU):如果某个神经元的所有输入都是负数,它的梯度恒为 0,参数再也无法更新,相当于「死掉」了。实践中常用 Leaky ReLU 缓解。
python
import torch.nn as nn
# PyTorch 中的 ReLU
relu = nn.ReLU()
2.2.2 GELU:Transformer 的标配
GELU(Gaussian Error Linear Unit,高斯误差线性单元)是 VLA 模型里最常用的激活函数,

公式为:
f(x) = x · Φ(x)
其中 Φ(x) 是标准正态分布的累积分布函数。它的曲线介于 ReLU 和 Sigmoid 之间,在负区间不是直接置 0,而是平滑地过渡:
#mermaid-svg-6UUMBVWKE9m8WXnx{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-6UUMBVWKE9m8WXnx .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-6UUMBVWKE9m8WXnx .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-6UUMBVWKE9m8WXnx .error-icon{fill:#552222;}#mermaid-svg-6UUMBVWKE9m8WXnx .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-6UUMBVWKE9m8WXnx .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-6UUMBVWKE9m8WXnx .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-6UUMBVWKE9m8WXnx .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-6UUMBVWKE9m8WXnx .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-6UUMBVWKE9m8WXnx .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-6UUMBVWKE9m8WXnx .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-6UUMBVWKE9m8WXnx .marker{fill:#333333;stroke:#333333;}#mermaid-svg-6UUMBVWKE9m8WXnx .marker.cross{stroke:#333333;}#mermaid-svg-6UUMBVWKE9m8WXnx svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-6UUMBVWKE9m8WXnx p{margin:0;}#mermaid-svg-6UUMBVWKE9m8WXnx .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-6UUMBVWKE9m8WXnx .cluster-label text{fill:#333;}#mermaid-svg-6UUMBVWKE9m8WXnx .cluster-label span{color:#333;}#mermaid-svg-6UUMBVWKE9m8WXnx .cluster-label span p{background-color:transparent;}#mermaid-svg-6UUMBVWKE9m8WXnx .label text,#mermaid-svg-6UUMBVWKE9m8WXnx span{fill:#333;color:#333;}#mermaid-svg-6UUMBVWKE9m8WXnx .node rect,#mermaid-svg-6UUMBVWKE9m8WXnx .node circle,#mermaid-svg-6UUMBVWKE9m8WXnx .node ellipse,#mermaid-svg-6UUMBVWKE9m8WXnx .node polygon,#mermaid-svg-6UUMBVWKE9m8WXnx .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-6UUMBVWKE9m8WXnx .rough-node .label text,#mermaid-svg-6UUMBVWKE9m8WXnx .node .label text,#mermaid-svg-6UUMBVWKE9m8WXnx .image-shape .label,#mermaid-svg-6UUMBVWKE9m8WXnx .icon-shape .label{text-anchor:middle;}#mermaid-svg-6UUMBVWKE9m8WXnx .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-6UUMBVWKE9m8WXnx .rough-node .label,#mermaid-svg-6UUMBVWKE9m8WXnx .node .label,#mermaid-svg-6UUMBVWKE9m8WXnx .image-shape .label,#mermaid-svg-6UUMBVWKE9m8WXnx .icon-shape .label{text-align:center;}#mermaid-svg-6UUMBVWKE9m8WXnx .node.clickable{cursor:pointer;}#mermaid-svg-6UUMBVWKE9m8WXnx .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-6UUMBVWKE9m8WXnx .arrowheadPath{fill:#333333;}#mermaid-svg-6UUMBVWKE9m8WXnx .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-6UUMBVWKE9m8WXnx .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-6UUMBVWKE9m8WXnx .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-6UUMBVWKE9m8WXnx .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-6UUMBVWKE9m8WXnx .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-6UUMBVWKE9m8WXnx .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-6UUMBVWKE9m8WXnx .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-6UUMBVWKE9m8WXnx .cluster text{fill:#333;}#mermaid-svg-6UUMBVWKE9m8WXnx .cluster span{color:#333;}#mermaid-svg-6UUMBVWKE9m8WXnx div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-6UUMBVWKE9m8WXnx .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-6UUMBVWKE9m8WXnx rect.text{fill:none;stroke-width:0;}#mermaid-svg-6UUMBVWKE9m8WXnx .icon-shape,#mermaid-svg-6UUMBVWKE9m8WXnx .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-6UUMBVWKE9m8WXnx .icon-shape p,#mermaid-svg-6UUMBVWKE9m8WXnx .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-6UUMBVWKE9m8WXnx .icon-shape .label rect,#mermaid-svg-6UUMBVWKE9m8WXnx .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-6UUMBVWKE9m8WXnx .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-6UUMBVWKE9m8WXnx .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-6UUMBVWKE9m8WXnx :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 负区间平滑过渡,不硬置 0
正区间近似线性
输出范围约 [-0.17, +∞)
为什么 Transformer 选它?
- 平滑性:GELU 处处可导,梯度更稳定,训练更顺滑;
- 概率解释:它按输入值的概率进行「门控」,比 ReLU 的硬截断更符合神经科学直觉;
- 实践验证:ViT、BERT、GPT 系列全部默认使用 GELU,VLA 的视觉编码器和语言模型自然继承了这个选择。
python
import torch.nn as nn
# PyTorch 中的 GELU(默认使用 tanh 近似)
gelu = nn.GELU()
2.2.3 Sigmoid:二分类的经典选择
Sigmoid 把任意实数压缩到 (0, 1) 区间,

公式为:
f(x) = 1 / (1 + e⁻ˣ)
#mermaid-svg-THayYeqbu3Bo1LAR{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-THayYeqbu3Bo1LAR .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-THayYeqbu3Bo1LAR .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-THayYeqbu3Bo1LAR .error-icon{fill:#552222;}#mermaid-svg-THayYeqbu3Bo1LAR .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-THayYeqbu3Bo1LAR .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-THayYeqbu3Bo1LAR .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-THayYeqbu3Bo1LAR .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-THayYeqbu3Bo1LAR .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-THayYeqbu3Bo1LAR .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-THayYeqbu3Bo1LAR .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-THayYeqbu3Bo1LAR .marker{fill:#333333;stroke:#333333;}#mermaid-svg-THayYeqbu3Bo1LAR .marker.cross{stroke:#333333;}#mermaid-svg-THayYeqbu3Bo1LAR svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-THayYeqbu3Bo1LAR p{margin:0;}#mermaid-svg-THayYeqbu3Bo1LAR .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-THayYeqbu3Bo1LAR .cluster-label text{fill:#333;}#mermaid-svg-THayYeqbu3Bo1LAR .cluster-label span{color:#333;}#mermaid-svg-THayYeqbu3Bo1LAR .cluster-label span p{background-color:transparent;}#mermaid-svg-THayYeqbu3Bo1LAR .label text,#mermaid-svg-THayYeqbu3Bo1LAR span{fill:#333;color:#333;}#mermaid-svg-THayYeqbu3Bo1LAR .node rect,#mermaid-svg-THayYeqbu3Bo1LAR .node circle,#mermaid-svg-THayYeqbu3Bo1LAR .node ellipse,#mermaid-svg-THayYeqbu3Bo1LAR .node polygon,#mermaid-svg-THayYeqbu3Bo1LAR .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-THayYeqbu3Bo1LAR .rough-node .label text,#mermaid-svg-THayYeqbu3Bo1LAR .node .label text,#mermaid-svg-THayYeqbu3Bo1LAR .image-shape .label,#mermaid-svg-THayYeqbu3Bo1LAR .icon-shape .label{text-anchor:middle;}#mermaid-svg-THayYeqbu3Bo1LAR .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-THayYeqbu3Bo1LAR .rough-node .label,#mermaid-svg-THayYeqbu3Bo1LAR .node .label,#mermaid-svg-THayYeqbu3Bo1LAR .image-shape .label,#mermaid-svg-THayYeqbu3Bo1LAR .icon-shape .label{text-align:center;}#mermaid-svg-THayYeqbu3Bo1LAR .node.clickable{cursor:pointer;}#mermaid-svg-THayYeqbu3Bo1LAR .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-THayYeqbu3Bo1LAR .arrowheadPath{fill:#333333;}#mermaid-svg-THayYeqbu3Bo1LAR .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-THayYeqbu3Bo1LAR .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-THayYeqbu3Bo1LAR .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-THayYeqbu3Bo1LAR .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-THayYeqbu3Bo1LAR .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-THayYeqbu3Bo1LAR .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-THayYeqbu3Bo1LAR .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-THayYeqbu3Bo1LAR .cluster text{fill:#333;}#mermaid-svg-THayYeqbu3Bo1LAR .cluster span{color:#333;}#mermaid-svg-THayYeqbu3Bo1LAR div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-THayYeqbu3Bo1LAR .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-THayYeqbu3Bo1LAR rect.text{fill:none;stroke-width:0;}#mermaid-svg-THayYeqbu3Bo1LAR .icon-shape,#mermaid-svg-THayYeqbu3Bo1LAR .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-THayYeqbu3Bo1LAR .icon-shape p,#mermaid-svg-THayYeqbu3Bo1LAR .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-THayYeqbu3Bo1LAR .icon-shape .label rect,#mermaid-svg-THayYeqbu3Bo1LAR .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-THayYeqbu3Bo1LAR .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-THayYeqbu3Bo1LAR .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-THayYeqbu3Bo1LAR :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} x → -∞ 时输出趋近 0
x = 0 时输出 0.5
x → +∞ 时输出趋近 1
输出范围 (0, 1)
适用场景:
- 二分类输出层:输出值可以解释为「属于正类的概率」;
- 门控机制:如 LSTM 中的遗忘门、输入门。
缺点:
- 梯度消失严重:在两端(x 很大或很小)导数趋近于 0,深层网络难以训练;
- 输出非零中心:输出恒为正,会导致下一层参数更新时出现「Z 字形」震荡,收敛变慢。
python
import torch.nn as nn
# PyTorch 中的 Sigmoid
sigmoid = nn.Sigmoid()
2.2.4 Tanh:零中心的归一化利器
Tanh(双曲正切)可以看作 Sigmoid 的平移缩放版本,把输出压缩到 (-1, 1):

f(x) = (eˣ - e⁻ˣ) / (eˣ + e⁻ˣ)
#mermaid-svg-eJUcS48UGF4s9An8{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-eJUcS48UGF4s9An8 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-eJUcS48UGF4s9An8 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-eJUcS48UGF4s9An8 .error-icon{fill:#552222;}#mermaid-svg-eJUcS48UGF4s9An8 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-eJUcS48UGF4s9An8 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-eJUcS48UGF4s9An8 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-eJUcS48UGF4s9An8 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-eJUcS48UGF4s9An8 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-eJUcS48UGF4s9An8 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-eJUcS48UGF4s9An8 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-eJUcS48UGF4s9An8 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-eJUcS48UGF4s9An8 .marker.cross{stroke:#333333;}#mermaid-svg-eJUcS48UGF4s9An8 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-eJUcS48UGF4s9An8 p{margin:0;}#mermaid-svg-eJUcS48UGF4s9An8 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-eJUcS48UGF4s9An8 .cluster-label text{fill:#333;}#mermaid-svg-eJUcS48UGF4s9An8 .cluster-label span{color:#333;}#mermaid-svg-eJUcS48UGF4s9An8 .cluster-label span p{background-color:transparent;}#mermaid-svg-eJUcS48UGF4s9An8 .label text,#mermaid-svg-eJUcS48UGF4s9An8 span{fill:#333;color:#333;}#mermaid-svg-eJUcS48UGF4s9An8 .node rect,#mermaid-svg-eJUcS48UGF4s9An8 .node circle,#mermaid-svg-eJUcS48UGF4s9An8 .node ellipse,#mermaid-svg-eJUcS48UGF4s9An8 .node polygon,#mermaid-svg-eJUcS48UGF4s9An8 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-eJUcS48UGF4s9An8 .rough-node .label text,#mermaid-svg-eJUcS48UGF4s9An8 .node .label text,#mermaid-svg-eJUcS48UGF4s9An8 .image-shape .label,#mermaid-svg-eJUcS48UGF4s9An8 .icon-shape .label{text-anchor:middle;}#mermaid-svg-eJUcS48UGF4s9An8 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-eJUcS48UGF4s9An8 .rough-node .label,#mermaid-svg-eJUcS48UGF4s9An8 .node .label,#mermaid-svg-eJUcS48UGF4s9An8 .image-shape .label,#mermaid-svg-eJUcS48UGF4s9An8 .icon-shape .label{text-align:center;}#mermaid-svg-eJUcS48UGF4s9An8 .node.clickable{cursor:pointer;}#mermaid-svg-eJUcS48UGF4s9An8 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-eJUcS48UGF4s9An8 .arrowheadPath{fill:#333333;}#mermaid-svg-eJUcS48UGF4s9An8 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-eJUcS48UGF4s9An8 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-eJUcS48UGF4s9An8 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-eJUcS48UGF4s9An8 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-eJUcS48UGF4s9An8 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-eJUcS48UGF4s9An8 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-eJUcS48UGF4s9An8 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-eJUcS48UGF4s9An8 .cluster text{fill:#333;}#mermaid-svg-eJUcS48UGF4s9An8 .cluster span{color:#333;}#mermaid-svg-eJUcS48UGF4s9An8 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-eJUcS48UGF4s9An8 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-eJUcS48UGF4s9An8 rect.text{fill:none;stroke-width:0;}#mermaid-svg-eJUcS48UGF4s9An8 .icon-shape,#mermaid-svg-eJUcS48UGF4s9An8 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-eJUcS48UGF4s9An8 .icon-shape p,#mermaid-svg-eJUcS48UGF4s9An8 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-eJUcS48UGF4s9An8 .icon-shape .label rect,#mermaid-svg-eJUcS48UGF4s9An8 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-eJUcS48UGF4s9An8 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-eJUcS48UGF4s9An8 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-eJUcS48UGF4s9An8 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} x → -∞ 时输出趋近 -1
x = 0 时输出 0
x → +∞ 时输出趋近 1
输出范围 (-1, 1)
优点:
- 零中心输出:输出有正有负,下一层参数更新更平稳,收敛通常比 Sigmoid 快;
- 更强的表达能力:相比 Sigmoid,负区间也能传递信息。
缺点:
- 两端依然存在梯度消失问题;
- 计算涉及指数运算,比 ReLU 慢。
python
import torch.nn as nn
# PyTorch 中的 Tanh
tanh = nn.Tanh()
2.2.5 四种激活函数对比与 VLA 选型建议
| 函数 | 输出范围 | 梯度特性 | 典型用途 | VLA 中的角色 |
|---|---|---|---|---|
| ReLU | [0, +∞) | 正区间梯度恒为 1 | 隐藏层主力 | 早期 CNN 视觉特征提取 |
| GELU | 约 [-0.17, +∞) | 平滑、处处可导 | Transformer 隐藏层 | ViT 编码器、LLM 主干 |
| Sigmoid | (0, 1) | 两端梯度趋近 0 | 二分类输出、门控 | 动作概率输出(可选) |
| Tanh | (-1, 1) | 两端梯度趋近 0 | 归一化、RNN 隐藏层 | 动作值归一化(可选) |
给 VLA 学习者的建议:
- 视觉编码器(ViT)和语言模型(LLM)内部几乎全是 GELU,理解它的平滑特性即可;
- 动作预测头如果建模为二分类(如「是否抓取」),输出层可以用 Sigmoid;
- 如果动作是连续值(如关节角度),输出层通常不加激活函数,直接回归。
python
import torch.nn as nn
# VLA 中常见的激活函数组合示例
vision_encoder = nn.Sequential(
nn.Linear(768, 1024),
nn.GELU(), # 视觉编码器用 GELU
nn.Linear(1024, 768)
)
action_head = nn.Sequential(
nn.Linear(768, 256),
nn.ReLU(), # 动作头隐藏层用 ReLU
nn.Linear(256, 7) # 输出 7 维关节角度,不加激活
)
2.3 损失函数:模型学习的「标尺」
损失函数衡量模型预测和真实答案之间的差距,训练就是不断减小这个差距。
- 交叉熵损失(CrossEntropyLoss):分类任务标配,VLA 的动作预测常被建模为分类问题。
- 均方误差(MSE):回归任务常用,适合连续值预测。
- 对比损失(Contrastive Loss):VLA 中连接视觉和语言模态的关键,让匹配的图文对距离更近。
python
# 分类任务示例
loss_fn = nn.CrossEntropyLoss()
logits = model(image_tensor) # 模型输出
loss = loss_fn(logits, label_tensor) # 计算损失
下面是深度学习核心概念的整体关系图:
#mermaid-svg-Xzhl5BXHZk4XHzUx{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Xzhl5BXHZk4XHzUx .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Xzhl5BXHZk4XHzUx .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Xzhl5BXHZk4XHzUx .error-icon{fill:#552222;}#mermaid-svg-Xzhl5BXHZk4XHzUx .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Xzhl5BXHZk4XHzUx .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Xzhl5BXHZk4XHzUx .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Xzhl5BXHZk4XHzUx .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Xzhl5BXHZk4XHzUx .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Xzhl5BXHZk4XHzUx .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Xzhl5BXHZk4XHzUx .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Xzhl5BXHZk4XHzUx .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Xzhl5BXHZk4XHzUx .marker.cross{stroke:#333333;}#mermaid-svg-Xzhl5BXHZk4XHzUx svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Xzhl5BXHZk4XHzUx p{margin:0;}#mermaid-svg-Xzhl5BXHZk4XHzUx .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Xzhl5BXHZk4XHzUx .cluster-label text{fill:#333;}#mermaid-svg-Xzhl5BXHZk4XHzUx .cluster-label span{color:#333;}#mermaid-svg-Xzhl5BXHZk4XHzUx .cluster-label span p{background-color:transparent;}#mermaid-svg-Xzhl5BXHZk4XHzUx .label text,#mermaid-svg-Xzhl5BXHZk4XHzUx span{fill:#333;color:#333;}#mermaid-svg-Xzhl5BXHZk4XHzUx .node rect,#mermaid-svg-Xzhl5BXHZk4XHzUx .node circle,#mermaid-svg-Xzhl5BXHZk4XHzUx .node ellipse,#mermaid-svg-Xzhl5BXHZk4XHzUx .node polygon,#mermaid-svg-Xzhl5BXHZk4XHzUx .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Xzhl5BXHZk4XHzUx .rough-node .label text,#mermaid-svg-Xzhl5BXHZk4XHzUx .node .label text,#mermaid-svg-Xzhl5BXHZk4XHzUx .image-shape .label,#mermaid-svg-Xzhl5BXHZk4XHzUx .icon-shape .label{text-anchor:middle;}#mermaid-svg-Xzhl5BXHZk4XHzUx .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Xzhl5BXHZk4XHzUx .rough-node .label,#mermaid-svg-Xzhl5BXHZk4XHzUx .node .label,#mermaid-svg-Xzhl5BXHZk4XHzUx .image-shape .label,#mermaid-svg-Xzhl5BXHZk4XHzUx .icon-shape .label{text-align:center;}#mermaid-svg-Xzhl5BXHZk4XHzUx .node.clickable{cursor:pointer;}#mermaid-svg-Xzhl5BXHZk4XHzUx .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Xzhl5BXHZk4XHzUx .arrowheadPath{fill:#333333;}#mermaid-svg-Xzhl5BXHZk4XHzUx .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Xzhl5BXHZk4XHzUx .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Xzhl5BXHZk4XHzUx .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Xzhl5BXHZk4XHzUx .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Xzhl5BXHZk4XHzUx .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Xzhl5BXHZk4XHzUx .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Xzhl5BXHZk4XHzUx .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Xzhl5BXHZk4XHzUx .cluster text{fill:#333;}#mermaid-svg-Xzhl5BXHZk4XHzUx .cluster span{color:#333;}#mermaid-svg-Xzhl5BXHZk4XHzUx div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Xzhl5BXHZk4XHzUx .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Xzhl5BXHZk4XHzUx rect.text{fill:none;stroke-width:0;}#mermaid-svg-Xzhl5BXHZk4XHzUx .icon-shape,#mermaid-svg-Xzhl5BXHZk4XHzUx .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Xzhl5BXHZk4XHzUx .icon-shape p,#mermaid-svg-Xzhl5BXHZk4XHzUx .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Xzhl5BXHZk4XHzUx .icon-shape .label rect,#mermaid-svg-Xzhl5BXHZk4XHzUx .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Xzhl5BXHZk4XHzUx .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Xzhl5BXHZk4XHzUx .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Xzhl5BXHZk4XHzUx :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 输入数据
神经网络
激活函数
损失函数
优化器更新参数
3. 训练流程:前向传播与反向传播
3.1 前向传播
数据从输入层流向输出层,逐层计算,最终得到预测结果和损失值。这个过程叫前向传播(Forward Pass)。
3.2 反向传播
反向传播(Backpropagation)是深度学习的核心算法。它利用链式法则,从损失函数出发,从后往前逐层计算每个参数的梯度,告诉模型「每个参数该往哪个方向调、调多少」。
python
optimizer.zero_grad() # 清空上一轮梯度
loss.backward() # 反向传播,计算梯度
optimizer.step() # 更新参数
3.3 优化器
优化器决定参数如何更新。反向传播算出梯度后,优化器负责回答「每个参数该往哪个方向走、走多远」。最常用的是 Adam 和 AdamW(带权重衰减的 Adam),VLA 训练基本都用 AdamW。
3.3.1 从 SGD 到 Adam:优化器的进化
最朴素的优化器是 SGD(随机梯度下降),它直接沿梯度反方向更新参数:
python
# SGD 的更新规则
param = param - lr * grad
但 SGD 有两个痛点:一是收敛慢,容易在陡峭方向来回震荡;二是对学习率非常敏感,调参困难。于是研究者引入了动量(Momentum),让更新方向带上「惯性」,减少震荡、加速收敛。
Adam (Adaptive Moment Estimation)在动量基础上更进一步,为每个参数维护一阶矩(均值)和二阶矩(方差),实现「每个参数自适应学习率」:
- 更新频繁的参数,学习率自动变小;
- 更新稀疏的参数,学习率自动变大。
这让 Adam 在大多数任务上开箱即用,几乎不用手动调学习率,成为深度学习的事实标准。
3.3.2 AdamW:Adam + 解耦权重衰减
权重衰减(Weight Decay) 是一种正则化手段,本质是在损失函数里加一项 λ·||w||²,惩罚过大的权重,防止过拟合。
传统 Adam 把权重衰减和梯度更新耦合 在一起,效果不理想。AdamW 的关键改进是解耦(Decoupled):把权重衰减从梯度计算中拆出来,在参数更新时单独执行。
python
# AdamW 的更新逻辑(示意)
param = param - lr * (momentum_update + weight_decay * param)
这样权重衰减更干净、更可控,训练更稳定,泛化能力也更好。这也是为什么 VLA 训练基本都用 AdamW------大模型(ViT、LLM)几乎清一色选择它。
3.3.3 PyTorch 中的用法
python
import torch
# 最常用的写法:AdamW + 权重衰减
optimizer = torch.optim.AdamW(
model.parameters(),
lr=1e-4, # 学习率,VLA 常用 1e-4 ~ 3e-4
weight_decay=0.01 # 权重衰减系数,常用 0.01 ~ 0.1
)
# 训练循环中的标准三步
optimizer.zero_grad() # 1. 清空上一轮梯度
loss.backward() # 2. 反向传播,计算梯度
optimizer.step() # 3. 优化器更新参数
3.3.4 常用优化器对比
| 优化器 | 核心思想 | 优点 | 缺点 | VLA 中的使用 |
|---|---|---|---|---|
| SGD | 沿梯度反方向更新 | 简单、泛化好 | 收敛慢、调参难 | 很少用 |
| SGD + Momentum | 引入惯性 | 减少震荡、加速收敛 | 仍需调学习率 | 较少用 |
| Adam | 自适应学习率 | 开箱即用、收敛快 | 可能过拟合 | 早期 VLA 用过 |
| AdamW | Adam + 解耦权重衰减 | 稳定、泛化好 | 多一个超参 | 主流选择 |
3.3.5 给 VLA 学习者的建议
- 默认选 AdamW :
lr=1e-4、weight_decay=0.01是 VLA 训练最常见的起点; - 不要盲目调参:先跑通一个 baseline,再根据 loss 曲线微调学习率;
- 关注 loss 曲线:如果 loss 震荡剧烈,先降低学习率;如果收敛太慢,再适当调大。
#mermaid-svg-wjtgvXoAYLweNIUs{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-wjtgvXoAYLweNIUs .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-wjtgvXoAYLweNIUs .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-wjtgvXoAYLweNIUs .error-icon{fill:#552222;}#mermaid-svg-wjtgvXoAYLweNIUs .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-wjtgvXoAYLweNIUs .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-wjtgvXoAYLweNIUs .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-wjtgvXoAYLweNIUs .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-wjtgvXoAYLweNIUs .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-wjtgvXoAYLweNIUs .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-wjtgvXoAYLweNIUs .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-wjtgvXoAYLweNIUs .marker{fill:#333333;stroke:#333333;}#mermaid-svg-wjtgvXoAYLweNIUs .marker.cross{stroke:#333333;}#mermaid-svg-wjtgvXoAYLweNIUs svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-wjtgvXoAYLweNIUs p{margin:0;}#mermaid-svg-wjtgvXoAYLweNIUs .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-wjtgvXoAYLweNIUs .cluster-label text{fill:#333;}#mermaid-svg-wjtgvXoAYLweNIUs .cluster-label span{color:#333;}#mermaid-svg-wjtgvXoAYLweNIUs .cluster-label span p{background-color:transparent;}#mermaid-svg-wjtgvXoAYLweNIUs .label text,#mermaid-svg-wjtgvXoAYLweNIUs span{fill:#333;color:#333;}#mermaid-svg-wjtgvXoAYLweNIUs .node rect,#mermaid-svg-wjtgvXoAYLweNIUs .node circle,#mermaid-svg-wjtgvXoAYLweNIUs .node ellipse,#mermaid-svg-wjtgvXoAYLweNIUs .node polygon,#mermaid-svg-wjtgvXoAYLweNIUs .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-wjtgvXoAYLweNIUs .rough-node .label text,#mermaid-svg-wjtgvXoAYLweNIUs .node .label text,#mermaid-svg-wjtgvXoAYLweNIUs .image-shape .label,#mermaid-svg-wjtgvXoAYLweNIUs .icon-shape .label{text-anchor:middle;}#mermaid-svg-wjtgvXoAYLweNIUs .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-wjtgvXoAYLweNIUs .rough-node .label,#mermaid-svg-wjtgvXoAYLweNIUs .node .label,#mermaid-svg-wjtgvXoAYLweNIUs .image-shape .label,#mermaid-svg-wjtgvXoAYLweNIUs .icon-shape .label{text-align:center;}#mermaid-svg-wjtgvXoAYLweNIUs .node.clickable{cursor:pointer;}#mermaid-svg-wjtgvXoAYLweNIUs .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-wjtgvXoAYLweNIUs .arrowheadPath{fill:#333333;}#mermaid-svg-wjtgvXoAYLweNIUs .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-wjtgvXoAYLweNIUs .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-wjtgvXoAYLweNIUs .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wjtgvXoAYLweNIUs .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-wjtgvXoAYLweNIUs .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wjtgvXoAYLweNIUs .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-wjtgvXoAYLweNIUs .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-wjtgvXoAYLweNIUs .cluster text{fill:#333;}#mermaid-svg-wjtgvXoAYLweNIUs .cluster span{color:#333;}#mermaid-svg-wjtgvXoAYLweNIUs div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-wjtgvXoAYLweNIUs .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-wjtgvXoAYLweNIUs rect.text{fill:none;stroke-width:0;}#mermaid-svg-wjtgvXoAYLweNIUs .icon-shape,#mermaid-svg-wjtgvXoAYLweNIUs .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-wjtgvXoAYLweNIUs .icon-shape p,#mermaid-svg-wjtgvXoAYLweNIUs .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-wjtgvXoAYLweNIUs .icon-shape .label rect,#mermaid-svg-wjtgvXoAYLweNIUs .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-wjtgvXoAYLweNIUs .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-wjtgvXoAYLweNIUs .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-wjtgvXoAYLweNIUs :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 反向传播算出梯度
优化器决定更新方向
AdamW
自适应学习率 + 权重衰减
更新模型参数
进入下一个 batch
3.4 学习率与调度
学习率(learning rate)控制每次参数更新的步长。太大会震荡不收敛,太小则收敛极慢。实践中常用:
- 预热(Warmup):先从小学习率线性升到目标值,稳定训练;
- 余弦退火(Cosine Decay):训练后期逐步降低学习率,精细收敛。
下面是完整训练流程的示意图:
#mermaid-svg-fNCEAtSFoZ9mW5Op{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-fNCEAtSFoZ9mW5Op .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-fNCEAtSFoZ9mW5Op .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-fNCEAtSFoZ9mW5Op .error-icon{fill:#552222;}#mermaid-svg-fNCEAtSFoZ9mW5Op .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-fNCEAtSFoZ9mW5Op .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-fNCEAtSFoZ9mW5Op .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-fNCEAtSFoZ9mW5Op .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-fNCEAtSFoZ9mW5Op .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-fNCEAtSFoZ9mW5Op .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-fNCEAtSFoZ9mW5Op .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-fNCEAtSFoZ9mW5Op .marker{fill:#333333;stroke:#333333;}#mermaid-svg-fNCEAtSFoZ9mW5Op .marker.cross{stroke:#333333;}#mermaid-svg-fNCEAtSFoZ9mW5Op svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-fNCEAtSFoZ9mW5Op p{margin:0;}#mermaid-svg-fNCEAtSFoZ9mW5Op .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-fNCEAtSFoZ9mW5Op .cluster-label text{fill:#333;}#mermaid-svg-fNCEAtSFoZ9mW5Op .cluster-label span{color:#333;}#mermaid-svg-fNCEAtSFoZ9mW5Op .cluster-label span p{background-color:transparent;}#mermaid-svg-fNCEAtSFoZ9mW5Op .label text,#mermaid-svg-fNCEAtSFoZ9mW5Op span{fill:#333;color:#333;}#mermaid-svg-fNCEAtSFoZ9mW5Op .node rect,#mermaid-svg-fNCEAtSFoZ9mW5Op .node circle,#mermaid-svg-fNCEAtSFoZ9mW5Op .node ellipse,#mermaid-svg-fNCEAtSFoZ9mW5Op .node polygon,#mermaid-svg-fNCEAtSFoZ9mW5Op .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-fNCEAtSFoZ9mW5Op .rough-node .label text,#mermaid-svg-fNCEAtSFoZ9mW5Op .node .label text,#mermaid-svg-fNCEAtSFoZ9mW5Op .image-shape .label,#mermaid-svg-fNCEAtSFoZ9mW5Op .icon-shape .label{text-anchor:middle;}#mermaid-svg-fNCEAtSFoZ9mW5Op .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-fNCEAtSFoZ9mW5Op .rough-node .label,#mermaid-svg-fNCEAtSFoZ9mW5Op .node .label,#mermaid-svg-fNCEAtSFoZ9mW5Op .image-shape .label,#mermaid-svg-fNCEAtSFoZ9mW5Op .icon-shape .label{text-align:center;}#mermaid-svg-fNCEAtSFoZ9mW5Op .node.clickable{cursor:pointer;}#mermaid-svg-fNCEAtSFoZ9mW5Op .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-fNCEAtSFoZ9mW5Op .arrowheadPath{fill:#333333;}#mermaid-svg-fNCEAtSFoZ9mW5Op .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-fNCEAtSFoZ9mW5Op .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-fNCEAtSFoZ9mW5Op .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-fNCEAtSFoZ9mW5Op .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-fNCEAtSFoZ9mW5Op .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-fNCEAtSFoZ9mW5Op .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-fNCEAtSFoZ9mW5Op .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-fNCEAtSFoZ9mW5Op .cluster text{fill:#333;}#mermaid-svg-fNCEAtSFoZ9mW5Op .cluster span{color:#333;}#mermaid-svg-fNCEAtSFoZ9mW5Op div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-fNCEAtSFoZ9mW5Op .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-fNCEAtSFoZ9mW5Op rect.text{fill:none;stroke-width:0;}#mermaid-svg-fNCEAtSFoZ9mW5Op .icon-shape,#mermaid-svg-fNCEAtSFoZ9mW5Op .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-fNCEAtSFoZ9mW5Op .icon-shape p,#mermaid-svg-fNCEAtSFoZ9mW5Op .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-fNCEAtSFoZ9mW5Op .icon-shape .label rect,#mermaid-svg-fNCEAtSFoZ9mW5Op .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-fNCEAtSFoZ9mW5Op .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-fNCEAtSFoZ9mW5Op .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-fNCEAtSFoZ9mW5Op :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否
是
数据加载 DataLoader
前向传播 Forward
计算损失 Loss
反向传播 Backward
优化器更新 Optimizer.step
是否达到 epoch 数?
训练完成
4. 训练/验证/测试:三个数据集的分工
| 数据集 | 作用 | 注意事项 |
|---|---|---|
| 训练集 | 更新模型参数 | 数据量最大 |
| 验证集 | 调超参、选模型、监控过拟合 | 每轮训练后评估 |
| 测试集 | 最终评估模型泛化能力 | 训练过程中绝不使用 |
过拟合是新手最容易踩的坑:模型在训练集上表现很好,但在新数据上表现很差。应对方法包括数据增强、正则化(Dropout、权重衰减)、早停等。
下面是三个数据集在训练流程中的分工示意图:
#mermaid-svg-irDgct8b114KUWyu{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-irDgct8b114KUWyu .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-irDgct8b114KUWyu .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-irDgct8b114KUWyu .error-icon{fill:#552222;}#mermaid-svg-irDgct8b114KUWyu .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-irDgct8b114KUWyu .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-irDgct8b114KUWyu .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-irDgct8b114KUWyu .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-irDgct8b114KUWyu .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-irDgct8b114KUWyu .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-irDgct8b114KUWyu .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-irDgct8b114KUWyu .marker{fill:#333333;stroke:#333333;}#mermaid-svg-irDgct8b114KUWyu .marker.cross{stroke:#333333;}#mermaid-svg-irDgct8b114KUWyu svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-irDgct8b114KUWyu p{margin:0;}#mermaid-svg-irDgct8b114KUWyu .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-irDgct8b114KUWyu .cluster-label text{fill:#333;}#mermaid-svg-irDgct8b114KUWyu .cluster-label span{color:#333;}#mermaid-svg-irDgct8b114KUWyu .cluster-label span p{background-color:transparent;}#mermaid-svg-irDgct8b114KUWyu .label text,#mermaid-svg-irDgct8b114KUWyu span{fill:#333;color:#333;}#mermaid-svg-irDgct8b114KUWyu .node rect,#mermaid-svg-irDgct8b114KUWyu .node circle,#mermaid-svg-irDgct8b114KUWyu .node ellipse,#mermaid-svg-irDgct8b114KUWyu .node polygon,#mermaid-svg-irDgct8b114KUWyu .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-irDgct8b114KUWyu .rough-node .label text,#mermaid-svg-irDgct8b114KUWyu .node .label text,#mermaid-svg-irDgct8b114KUWyu .image-shape .label,#mermaid-svg-irDgct8b114KUWyu .icon-shape .label{text-anchor:middle;}#mermaid-svg-irDgct8b114KUWyu .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-irDgct8b114KUWyu .rough-node .label,#mermaid-svg-irDgct8b114KUWyu .node .label,#mermaid-svg-irDgct8b114KUWyu .image-shape .label,#mermaid-svg-irDgct8b114KUWyu .icon-shape .label{text-align:center;}#mermaid-svg-irDgct8b114KUWyu .node.clickable{cursor:pointer;}#mermaid-svg-irDgct8b114KUWyu .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-irDgct8b114KUWyu .arrowheadPath{fill:#333333;}#mermaid-svg-irDgct8b114KUWyu .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-irDgct8b114KUWyu .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-irDgct8b114KUWyu .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-irDgct8b114KUWyu .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-irDgct8b114KUWyu .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-irDgct8b114KUWyu .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-irDgct8b114KUWyu .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-irDgct8b114KUWyu .cluster text{fill:#333;}#mermaid-svg-irDgct8b114KUWyu .cluster span{color:#333;}#mermaid-svg-irDgct8b114KUWyu div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-irDgct8b114KUWyu .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-irDgct8b114KUWyu rect.text{fill:none;stroke-width:0;}#mermaid-svg-irDgct8b114KUWyu .icon-shape,#mermaid-svg-irDgct8b114KUWyu .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-irDgct8b114KUWyu .icon-shape p,#mermaid-svg-irDgct8b114KUWyu .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-irDgct8b114KUWyu .icon-shape .label rect,#mermaid-svg-irDgct8b114KUWyu .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-irDgct8b114KUWyu .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-irDgct8b114KUWyu .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-irDgct8b114KUWyu :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 测试阶段
验证阶段
训练阶段
训练集
更新模型参数
验证集
调超参 / 选模型
测试集
最终评估泛化能力
5. 深度学习框架:PyTorch 快速上手
VLA 领域几乎全部使用 PyTorch,所以今天必须把 PyTorch 的基本操作练熟。
5.1 张量(Tensor)
张量是 PyTorch 的核心数据结构,可以理解为「带 GPU 加速的多维数组」。
python
import torch
# 创建张量
x = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
y = torch.randn(3, 224, 224) # 模拟一张 224x224 的 3 通道图片
# 基本运算
z = x @ x.T # 矩阵乘法
print(x.shape) # torch.Size([2, 2])
print(x.device) # cpu
5.2 GPU 加速
python
device = "cuda" if torch.cuda.is_available() else "cpu"
model = model.to(device)
data = data.to(device)
5.3 Dataset 与 DataLoader
数据加载是训练的第一步,PyTorch 用 Dataset 定义数据,用 DataLoader 批量加载。两者分工明确:Dataset 负责「怎么取一条数据」,DataLoader 负责「怎么把数据打包成批次喂给模型」。
5.3.1 Dataset:定义数据从哪里来
Dataset 是一个抽象类,只需要实现三个方法:
__init__:初始化数据,比如读取文件、加载标签;__len__:返回数据集的总样本数;__getitem__:根据索引idx返回第idx个样本(数据和标签)。
python
from torch.utils.data import Dataset
class MyDataset(Dataset):
def __init__(self, data, labels):
self.data = data
self.labels = labels
def __len__(self):
return len(self.data)
def __getitem__(self, idx):
return self.data[idx], self.labels[idx]
注意:
__getitem__返回的可以是单个样本,也可以是一组样本(比如一张图片 + 它的标签)。PyTorch 会自动把多个样本堆叠成 batch。
5.3.2 DataLoader:批量加载与打乱
DataLoader 在 Dataset 之上做三件关键的事:
- 批量(batch):把多个样本打包成一个 batch,一次喂给模型;
- 打乱(shuffle):每个 epoch 开始前打乱数据顺序,避免模型学到样本顺序的假规律;
- 多进程加载(num_workers):用多个子进程并行读数据,加快加载速度。
python
from torch.utils.data import DataLoader
dataloader = DataLoader(
dataset,
batch_size=32, # 每个 batch 32 个样本
shuffle=True, # 每个 epoch 打乱顺序
num_workers=4 # 4 个子进程并行加载
)
5.3.3 常用参数详解
| 参数 | 作用 | 建议值 |
|---|---|---|
batch_size |
每个 batch 的样本数 | 32 / 64 / 128,视显存而定 |
shuffle |
是否打乱数据 | 训练集 True,验证/测试集 False |
num_workers |
并行加载数据的进程数 | 4~8,Windows 上建议 0 |
drop_last |
最后不足一个 batch 是否丢弃 | 训练集可设 True,避免梯度抖动 |
pin_memory |
是否锁页内存加速 GPU 拷贝 | GPU 训练时设 True |
python
# 训练集打乱,验证集不打乱
train_loader = DataLoader(train_dataset, batch_size=64, shuffle=True)
val_loader = DataLoader(val_dataset, batch_size=64, shuffle=False)
5.3.4 遍历 DataLoader 的两种方式
python
# 方式一:for 循环(最常用)
for batch_data, batch_labels in dataloader:
# batch_data: [batch_size, ...]
# batch_labels: [batch_size]
pass
# 方式二:迭代器
it = iter(dataloader)
batch_data, batch_labels = next(it)
5.3.5 一个完整的实战示例:图片分类数据加载
python
import torch
from torch.utils.data import Dataset, DataLoader
from torchvision import transforms
from PIL import Image
# 1. 定义数据变换:把图片转成张量并归一化
transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor(), # 像素值 0~255 -> 0~1
transforms.Normalize(mean=[0.485, 0.456, 0.406],
std=[0.229, 0.224, 0.225])
])
# 2. 自定义 Dataset:从文件夹读取图片
class ImageDataset(Dataset):
def __init__(self, image_paths, labels, transform=None):
self.image_paths = image_paths
self.labels = labels
self.transform = transform
def __len__(self):
return len(self.image_paths)
def __getitem__(self, idx):
image = Image.open(self.image_paths[idx]).convert("RGB")
if self.transform:
image = self.transform(image)
return image, self.labels[idx]
# 3. 创建 Dataset 和 DataLoader
dataset = ImageDataset(image_paths, labels, transform=transform)
dataloader = DataLoader(dataset, batch_size=32, shuffle=True, num_workers=4)
# 4. 取一个 batch 看看形状
for images, labels in dataloader:
print(images.shape) # torch.Size([32, 3, 224, 224])
print(labels.shape) # torch.Size([32])
break
5.3.6 Dataset 与 DataLoader 的数据流
#mermaid-svg-GJDBY9m3TPtS7eCZ{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-GJDBY9m3TPtS7eCZ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-GJDBY9m3TPtS7eCZ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-GJDBY9m3TPtS7eCZ .error-icon{fill:#552222;}#mermaid-svg-GJDBY9m3TPtS7eCZ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-GJDBY9m3TPtS7eCZ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-GJDBY9m3TPtS7eCZ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-GJDBY9m3TPtS7eCZ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-GJDBY9m3TPtS7eCZ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-GJDBY9m3TPtS7eCZ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-GJDBY9m3TPtS7eCZ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-GJDBY9m3TPtS7eCZ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-GJDBY9m3TPtS7eCZ .marker.cross{stroke:#333333;}#mermaid-svg-GJDBY9m3TPtS7eCZ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-GJDBY9m3TPtS7eCZ p{margin:0;}#mermaid-svg-GJDBY9m3TPtS7eCZ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-GJDBY9m3TPtS7eCZ .cluster-label text{fill:#333;}#mermaid-svg-GJDBY9m3TPtS7eCZ .cluster-label span{color:#333;}#mermaid-svg-GJDBY9m3TPtS7eCZ .cluster-label span p{background-color:transparent;}#mermaid-svg-GJDBY9m3TPtS7eCZ .label text,#mermaid-svg-GJDBY9m3TPtS7eCZ span{fill:#333;color:#333;}#mermaid-svg-GJDBY9m3TPtS7eCZ .node rect,#mermaid-svg-GJDBY9m3TPtS7eCZ .node circle,#mermaid-svg-GJDBY9m3TPtS7eCZ .node ellipse,#mermaid-svg-GJDBY9m3TPtS7eCZ .node polygon,#mermaid-svg-GJDBY9m3TPtS7eCZ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-GJDBY9m3TPtS7eCZ .rough-node .label text,#mermaid-svg-GJDBY9m3TPtS7eCZ .node .label text,#mermaid-svg-GJDBY9m3TPtS7eCZ .image-shape .label,#mermaid-svg-GJDBY9m3TPtS7eCZ .icon-shape .label{text-anchor:middle;}#mermaid-svg-GJDBY9m3TPtS7eCZ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-GJDBY9m3TPtS7eCZ .rough-node .label,#mermaid-svg-GJDBY9m3TPtS7eCZ .node .label,#mermaid-svg-GJDBY9m3TPtS7eCZ .image-shape .label,#mermaid-svg-GJDBY9m3TPtS7eCZ .icon-shape .label{text-align:center;}#mermaid-svg-GJDBY9m3TPtS7eCZ .node.clickable{cursor:pointer;}#mermaid-svg-GJDBY9m3TPtS7eCZ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-GJDBY9m3TPtS7eCZ .arrowheadPath{fill:#333333;}#mermaid-svg-GJDBY9m3TPtS7eCZ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-GJDBY9m3TPtS7eCZ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-GJDBY9m3TPtS7eCZ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-GJDBY9m3TPtS7eCZ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-GJDBY9m3TPtS7eCZ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-GJDBY9m3TPtS7eCZ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-GJDBY9m3TPtS7eCZ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-GJDBY9m3TPtS7eCZ .cluster text{fill:#333;}#mermaid-svg-GJDBY9m3TPtS7eCZ .cluster span{color:#333;}#mermaid-svg-GJDBY9m3TPtS7eCZ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-GJDBY9m3TPtS7eCZ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-GJDBY9m3TPtS7eCZ rect.text{fill:none;stroke-width:0;}#mermaid-svg-GJDBY9m3TPtS7eCZ .icon-shape,#mermaid-svg-GJDBY9m3TPtS7eCZ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-GJDBY9m3TPtS7eCZ .icon-shape p,#mermaid-svg-GJDBY9m3TPtS7eCZ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-GJDBY9m3TPtS7eCZ .icon-shape .label rect,#mermaid-svg-GJDBY9m3TPtS7eCZ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-GJDBY9m3TPtS7eCZ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-GJDBY9m3TPtS7eCZ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-GJDBY9m3TPtS7eCZ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 原始数据
图片 / 文本 / 标签
Dataset
定义取数逻辑
DataLoader
批量 + 打乱 + 多进程
batch 张量
batch_size, ...
模型前向传播
小结 :Dataset 解决「数据怎么读」,DataLoader 解决「数据怎么喂」。把两者分开设计的好处是------换数据集时只需重写 Dataset,训练循环完全不用改。
5.4 一个完整的训练循环
python
for epoch in range(num_epochs):
for batch_data, batch_labels in dataloader:
batch_data = batch_data.to(device)
batch_labels = batch_labels.to(device)
logits = model(batch_data)
loss = loss_fn(logits, batch_labels)
optimizer.zero_grad()
loss.backward()
optimizer.step()
print(f"Epoch {epoch}: loss = {loss.item():.4f}")
下面是 PyTorch 训练一个模型的标准数据流:
#mermaid-svg-h7gBYIERVWL8wODJ{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-h7gBYIERVWL8wODJ .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-h7gBYIERVWL8wODJ .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-h7gBYIERVWL8wODJ .error-icon{fill:#552222;}#mermaid-svg-h7gBYIERVWL8wODJ .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-h7gBYIERVWL8wODJ .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-h7gBYIERVWL8wODJ .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-h7gBYIERVWL8wODJ .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-h7gBYIERVWL8wODJ .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-h7gBYIERVWL8wODJ .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-h7gBYIERVWL8wODJ .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-h7gBYIERVWL8wODJ .marker{fill:#333333;stroke:#333333;}#mermaid-svg-h7gBYIERVWL8wODJ .marker.cross{stroke:#333333;}#mermaid-svg-h7gBYIERVWL8wODJ svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-h7gBYIERVWL8wODJ p{margin:0;}#mermaid-svg-h7gBYIERVWL8wODJ .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-h7gBYIERVWL8wODJ .cluster-label text{fill:#333;}#mermaid-svg-h7gBYIERVWL8wODJ .cluster-label span{color:#333;}#mermaid-svg-h7gBYIERVWL8wODJ .cluster-label span p{background-color:transparent;}#mermaid-svg-h7gBYIERVWL8wODJ .label text,#mermaid-svg-h7gBYIERVWL8wODJ span{fill:#333;color:#333;}#mermaid-svg-h7gBYIERVWL8wODJ .node rect,#mermaid-svg-h7gBYIERVWL8wODJ .node circle,#mermaid-svg-h7gBYIERVWL8wODJ .node ellipse,#mermaid-svg-h7gBYIERVWL8wODJ .node polygon,#mermaid-svg-h7gBYIERVWL8wODJ .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-h7gBYIERVWL8wODJ .rough-node .label text,#mermaid-svg-h7gBYIERVWL8wODJ .node .label text,#mermaid-svg-h7gBYIERVWL8wODJ .image-shape .label,#mermaid-svg-h7gBYIERVWL8wODJ .icon-shape .label{text-anchor:middle;}#mermaid-svg-h7gBYIERVWL8wODJ .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-h7gBYIERVWL8wODJ .rough-node .label,#mermaid-svg-h7gBYIERVWL8wODJ .node .label,#mermaid-svg-h7gBYIERVWL8wODJ .image-shape .label,#mermaid-svg-h7gBYIERVWL8wODJ .icon-shape .label{text-align:center;}#mermaid-svg-h7gBYIERVWL8wODJ .node.clickable{cursor:pointer;}#mermaid-svg-h7gBYIERVWL8wODJ .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-h7gBYIERVWL8wODJ .arrowheadPath{fill:#333333;}#mermaid-svg-h7gBYIERVWL8wODJ .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-h7gBYIERVWL8wODJ .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-h7gBYIERVWL8wODJ .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-h7gBYIERVWL8wODJ .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-h7gBYIERVWL8wODJ .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-h7gBYIERVWL8wODJ .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-h7gBYIERVWL8wODJ .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-h7gBYIERVWL8wODJ .cluster text{fill:#333;}#mermaid-svg-h7gBYIERVWL8wODJ .cluster span{color:#333;}#mermaid-svg-h7gBYIERVWL8wODJ div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-h7gBYIERVWL8wODJ .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-h7gBYIERVWL8wODJ rect.text{fill:none;stroke-width:0;}#mermaid-svg-h7gBYIERVWL8wODJ .icon-shape,#mermaid-svg-h7gBYIERVWL8wODJ .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-h7gBYIERVWL8wODJ .icon-shape p,#mermaid-svg-h7gBYIERVWL8wODJ .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-h7gBYIERVWL8wODJ .icon-shape .label rect,#mermaid-svg-h7gBYIERVWL8wODJ .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-h7gBYIERVWL8wODJ .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-h7gBYIERVWL8wODJ .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-h7gBYIERVWL8wODJ :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 是
否
Dataset 定义数据
DataLoader 批量加载
张量迁移到 GPU
模型前向传播
计算损失
反向传播求梯度
优化器更新参数
是否还有 batch?
完成一个 epoch
6. 从深度学习到 VLA:今天的内容如何衔接
学完基础,我们来建立和 VLA 的关联,这样学起来更有方向感。
- 视觉编码器(如 ViT):本质是一个深度神经网络,负责把图片变成特征向量------这就是今天学的「前向传播」。
- 语言模型(如 LLM):同样是 Transformer 堆叠,靠交叉熵损失训练------今天学的损失函数直接适用。
- 动作预测头:VLA 把机器人的动作预测建模为分类或回归问题------今天学的损失函数和优化器就是训练它的工具。
- 多模态对齐:VLA 用对比损失把视觉特征和语言特征拉近------这是今天损失函数知识的延伸。
#mermaid-svg-rD7YJNXhyEEzrlCX{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-rD7YJNXhyEEzrlCX .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-rD7YJNXhyEEzrlCX .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-rD7YJNXhyEEzrlCX .error-icon{fill:#552222;}#mermaid-svg-rD7YJNXhyEEzrlCX .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-rD7YJNXhyEEzrlCX .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-rD7YJNXhyEEzrlCX .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-rD7YJNXhyEEzrlCX .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-rD7YJNXhyEEzrlCX .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-rD7YJNXhyEEzrlCX .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-rD7YJNXhyEEzrlCX .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-rD7YJNXhyEEzrlCX .marker{fill:#333333;stroke:#333333;}#mermaid-svg-rD7YJNXhyEEzrlCX .marker.cross{stroke:#333333;}#mermaid-svg-rD7YJNXhyEEzrlCX svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-rD7YJNXhyEEzrlCX p{margin:0;}#mermaid-svg-rD7YJNXhyEEzrlCX .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-rD7YJNXhyEEzrlCX .cluster-label text{fill:#333;}#mermaid-svg-rD7YJNXhyEEzrlCX .cluster-label span{color:#333;}#mermaid-svg-rD7YJNXhyEEzrlCX .cluster-label span p{background-color:transparent;}#mermaid-svg-rD7YJNXhyEEzrlCX .label text,#mermaid-svg-rD7YJNXhyEEzrlCX span{fill:#333;color:#333;}#mermaid-svg-rD7YJNXhyEEzrlCX .node rect,#mermaid-svg-rD7YJNXhyEEzrlCX .node circle,#mermaid-svg-rD7YJNXhyEEzrlCX .node ellipse,#mermaid-svg-rD7YJNXhyEEzrlCX .node polygon,#mermaid-svg-rD7YJNXhyEEzrlCX .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-rD7YJNXhyEEzrlCX .rough-node .label text,#mermaid-svg-rD7YJNXhyEEzrlCX .node .label text,#mermaid-svg-rD7YJNXhyEEzrlCX .image-shape .label,#mermaid-svg-rD7YJNXhyEEzrlCX .icon-shape .label{text-anchor:middle;}#mermaid-svg-rD7YJNXhyEEzrlCX .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-rD7YJNXhyEEzrlCX .rough-node .label,#mermaid-svg-rD7YJNXhyEEzrlCX .node .label,#mermaid-svg-rD7YJNXhyEEzrlCX .image-shape .label,#mermaid-svg-rD7YJNXhyEEzrlCX .icon-shape .label{text-align:center;}#mermaid-svg-rD7YJNXhyEEzrlCX .node.clickable{cursor:pointer;}#mermaid-svg-rD7YJNXhyEEzrlCX .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-rD7YJNXhyEEzrlCX .arrowheadPath{fill:#333333;}#mermaid-svg-rD7YJNXhyEEzrlCX .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-rD7YJNXhyEEzrlCX .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-rD7YJNXhyEEzrlCX .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-rD7YJNXhyEEzrlCX .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-rD7YJNXhyEEzrlCX .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-rD7YJNXhyEEzrlCX .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-rD7YJNXhyEEzrlCX .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-rD7YJNXhyEEzrlCX .cluster text{fill:#333;}#mermaid-svg-rD7YJNXhyEEzrlCX .cluster span{color:#333;}#mermaid-svg-rD7YJNXhyEEzrlCX div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-rD7YJNXhyEEzrlCX .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-rD7YJNXhyEEzrlCX rect.text{fill:none;stroke-width:0;}#mermaid-svg-rD7YJNXhyEEzrlCX .icon-shape,#mermaid-svg-rD7YJNXhyEEzrlCX .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-rD7YJNXhyEEzrlCX .icon-shape p,#mermaid-svg-rD7YJNXhyEEzrlCX .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-rD7YJNXhyEEzrlCX .icon-shape .label rect,#mermaid-svg-rD7YJNXhyEEzrlCX .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-rD7YJNXhyEEzrlCX .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-rD7YJNXhyEEzrlCX .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-rD7YJNXhyEEzrlCX :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 深度学习基础
视觉编码器 ViT
语言模型 LLM
动作解码器
VLA 模型
机器人控制
7. 今日练习
光看不练等于白学,今天建议完成以下练习:
- 用 PyTorch 在 MNIST 数据集上训练一个简单的全连接网络,准确率目标 95% 以上;
- 分别用 ReLU 和 GELU 训练同一个模型,对比收敛速度和最终准确率;
- 尝试把 batch_size 从 32 改成 128,观察训练速度和 loss 曲线的变化;
- 给模型加一层 Dropout,观察过拟合是否缓解。
8. 总结
今天我们把深度学习的核心骨架过了一遍:神经网络结构、激活函数、损失函数、前向/反向传播、优化器、训练流程,以及 PyTorch 的基本用法。这些内容看起来基础,但它们是理解 VLA 一切细节的前提。
明天我们将进入视觉部分,学习卷积神经网络(CNN)和 Vision Transformer(ViT),看看模型是如何「看懂」图片的。到时候你会发现,今天的每一个概念都会反复出现。
下面是今天学习内容的完整知识地图:
#mermaid-svg-9p3Sdb88uzzhU1eI{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-9p3Sdb88uzzhU1eI .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-9p3Sdb88uzzhU1eI .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-9p3Sdb88uzzhU1eI .error-icon{fill:#552222;}#mermaid-svg-9p3Sdb88uzzhU1eI .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-9p3Sdb88uzzhU1eI .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-9p3Sdb88uzzhU1eI .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-9p3Sdb88uzzhU1eI .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-9p3Sdb88uzzhU1eI .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-9p3Sdb88uzzhU1eI .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-9p3Sdb88uzzhU1eI .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-9p3Sdb88uzzhU1eI .marker{fill:#333333;stroke:#333333;}#mermaid-svg-9p3Sdb88uzzhU1eI .marker.cross{stroke:#333333;}#mermaid-svg-9p3Sdb88uzzhU1eI svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-9p3Sdb88uzzhU1eI p{margin:0;}#mermaid-svg-9p3Sdb88uzzhU1eI .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-9p3Sdb88uzzhU1eI .cluster-label text{fill:#333;}#mermaid-svg-9p3Sdb88uzzhU1eI .cluster-label span{color:#333;}#mermaid-svg-9p3Sdb88uzzhU1eI .cluster-label span p{background-color:transparent;}#mermaid-svg-9p3Sdb88uzzhU1eI .label text,#mermaid-svg-9p3Sdb88uzzhU1eI span{fill:#333;color:#333;}#mermaid-svg-9p3Sdb88uzzhU1eI .node rect,#mermaid-svg-9p3Sdb88uzzhU1eI .node circle,#mermaid-svg-9p3Sdb88uzzhU1eI .node ellipse,#mermaid-svg-9p3Sdb88uzzhU1eI .node polygon,#mermaid-svg-9p3Sdb88uzzhU1eI .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-9p3Sdb88uzzhU1eI .rough-node .label text,#mermaid-svg-9p3Sdb88uzzhU1eI .node .label text,#mermaid-svg-9p3Sdb88uzzhU1eI .image-shape .label,#mermaid-svg-9p3Sdb88uzzhU1eI .icon-shape .label{text-anchor:middle;}#mermaid-svg-9p3Sdb88uzzhU1eI .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-9p3Sdb88uzzhU1eI .rough-node .label,#mermaid-svg-9p3Sdb88uzzhU1eI .node .label,#mermaid-svg-9p3Sdb88uzzhU1eI .image-shape .label,#mermaid-svg-9p3Sdb88uzzhU1eI .icon-shape .label{text-align:center;}#mermaid-svg-9p3Sdb88uzzhU1eI .node.clickable{cursor:pointer;}#mermaid-svg-9p3Sdb88uzzhU1eI .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-9p3Sdb88uzzhU1eI .arrowheadPath{fill:#333333;}#mermaid-svg-9p3Sdb88uzzhU1eI .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-9p3Sdb88uzzhU1eI .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-9p3Sdb88uzzhU1eI .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-9p3Sdb88uzzhU1eI .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-9p3Sdb88uzzhU1eI .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-9p3Sdb88uzzhU1eI .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-9p3Sdb88uzzhU1eI .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-9p3Sdb88uzzhU1eI .cluster text{fill:#333;}#mermaid-svg-9p3Sdb88uzzhU1eI .cluster span{color:#333;}#mermaid-svg-9p3Sdb88uzzhU1eI div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-9p3Sdb88uzzhU1eI .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-9p3Sdb88uzzhU1eI rect.text{fill:none;stroke-width:0;}#mermaid-svg-9p3Sdb88uzzhU1eI .icon-shape,#mermaid-svg-9p3Sdb88uzzhU1eI .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-9p3Sdb88uzzhU1eI .icon-shape p,#mermaid-svg-9p3Sdb88uzzhU1eI .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-9p3Sdb88uzzhU1eI .icon-shape .label rect,#mermaid-svg-9p3Sdb88uzzhU1eI .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-9p3Sdb88uzzhU1eI .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-9p3Sdb88uzzhU1eI .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-9p3Sdb88uzzhU1eI :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 深度学习基础
神经网络结构
激活函数
损失函数
前向 / 反向传播
优化器与学习率
PyTorch 实战
VLA 视觉编码器
VLA 语言模型
VLA 动作预测
VLA 多模态对齐
VLA 模型