学习 VLA 第 2 天:深度学习基础

1. 引言

昨天我们完成了 VLA(Vision-Language-Action,视觉-语言-动作)模型的入门,了解了它是什么、能做什么,以及整个学习路线图。今天正式进入第一块基石------深度学习基础。

VLA 模型本质上是深度学习在「视觉 + 语言 + 机器人控制」三个模态上的综合应用。因此,不把深度学习的基础打牢,后面看 VLA 论文和代码时会处处碰壁。今天的目标很明确:用一天时间,把深度学习最核心的概念、训练流程和常用工具串起来,为后续学习视觉编码器、语言模型和动作解码器做好准备。

2. 深度学习核心概念速览

2.1 神经网络是怎么工作的

深度学习的基础是神经网络。一个最简单的神经网络由三层组成:

  • 输入层:接收数据,比如一张图片的像素值、一段文本的词向量。
  • 隐藏层:对数据进行逐层变换,提取越来越抽象的特征。
  • 输出层:给出最终结果,比如分类概率、回归数值。

每一层由若干「神经元」组成,每个神经元做的事情可以概括为两步:

  1. 对输入做加权求和,再加上一个偏置;
  2. 通过一个非线性激活函数(如 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 学习者的建议
  • 默认选 AdamWlr=1e-4weight_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:批量加载与打乱

DataLoaderDataset 之上做三件关键的事:

  • 批量(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. 今日练习

光看不练等于白学,今天建议完成以下练习:

  1. 用 PyTorch 在 MNIST 数据集上训练一个简单的全连接网络,准确率目标 95% 以上;
  2. 分别用 ReLU 和 GELU 训练同一个模型,对比收敛速度和最终准确率;
  3. 尝试把 batch_size 从 32 改成 128,观察训练速度和 loss 曲线的变化;
  4. 给模型加一层 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 模型

相关推荐
科技小E1 小时前
国标GB28181视频平台EasyGBS监控为什么会“瞎”:视频质量诊断EasyVQD如何揪出黑屏卡顿偏色
大数据·人工智能·音视频
仙女修炼史1 小时前
ultralytics-yolov8的数据增强
人工智能·opencv·yolo
2601_967097221 小时前
接待机器人推荐:2026年主流品牌多场景选型指南
人工智能
具身AGI1 小时前
人类第一视角数据走上评测台:物理AI 人类学习路线
学习
audyxiao0011 小时前
热点快讯│2026年世界机器人大会精彩看点
人工智能·机器人·具身智能·世界机器人大会·wrc2026
南吕十七1 小时前
RAG与Agent_体系
人工智能·机器学习
飞凌嵌入式1 小时前
工业控制+AI视觉齐发,飞凌嵌入式将亮相国际物联网展·深圳站
人工智能·物联网
AI工具测评家1 小时前
硕博论文怎么降低AI检测率?从深层语义改写到专业术语保留全面解析
人工智能·降重·ai检测·查重·降ai