# `bin` 是什么

在这篇论文的语境中，**bin** 可以翻译为：

* 区间；
* 桶；
* 离散类别；
* 量化单元。

它表示把原本连续的数值空间划分成若干离散区域，每个区域就是一个 **bin**。

论文中的：

> categorical representations of quantized actions

可以译为：

> 将连续动作量化后，用离散类别表示动作。

这里的每一个离散类别，就是一个 action bin。Diffusion Policy 在引言中将这种动作量化方法作为显式策略的一类代表，并引用了 Behavior Transformer（BeT）。([Sage Journals][1])

---

## 1. 最简单的一维例子

假设机器人的连续动作是末端执行器在 (x) 方向上的速度：

[
a\in[-1,1].
]

原本 (a) 可以取任意实数，例如：

[
-0.83,\quad -0.15,\quad 0.34,\quad 0.91.
]

现在把区间 ([-1,1]) 均匀划分为 5 个 bins：

[
\begin{aligned}
B_0&=[-1,-0.6),\
B_1&=[-0.6,-0.2),\
B_2&=[-0.2,0.2),\
B_3&=[0.2,0.6),\
B_4&=[0.6,1].
\end{aligned}
]

若真实动作是：

[
a=0.34,
]

则它落在：

[
B_3=[0.2,0.6)
]

中，于是连续动作 (0.34) 被量化为离散类别：

[
z=3.
]

这就是：

[
\boxed{\text{连续动作}\longrightarrow\text{bin 编号}}
]

或者写成量化函数：

[
Q(a)=z.
]

---

## 2. 为什么称为“桶”

可以把连续动作想象成不同大小的物体，而 bin 是若干桶。

例如：

```text
动作值： -1 -------------------------------------- 1
          | bin 0 | bin 1 | bin 2 | bin 3 | bin 4 |
```

所有落入同一个区间的动作都被放入同一个“桶”中：

[
0.21,\ 0.34,\ 0.57
]

都会属于 (B_3)。

因此，量化过程会丢失一部分精确信息：

[
0.21\neq0.34\neq0.57,
]

但量化后它们都表示为：

[
z=3.
]

---

# 3. 如何用分类网络预测 bin

原本连续动作回归策略直接输出一个数值：

[
\hat a=f_\theta(o).
]

使用 bins 后，策略不再直接预测连续数值，而是输出每一个 bin 的概率：

[
p_\theta(z\mid o)
=================

\operatorname{Softmax}(l_\theta(o)).
]

例如网络输出：

[
p_\theta(z\mid o)
=================

[0.02,\ 0.03,\ 0.10,\ 0.75,\ 0.10].
]

这表示：

[
P(z=3\mid o)=0.75
]

最大，因此可以选择：

[
\hat z=3.
]

然后用该 bin 的中心作为连续动作：

[
c_3=\frac{0.2+0.6}{2}=0.4.
]

最终输出：

[
\hat a=0.4.
]

训练时使用分类交叉熵：

[
\mathcal L_{\mathrm{bin}}
=========================

-\log p_\theta(z^*\mid o),
]

其中 (z^*=Q(a^*)) 是专家动作对应的真实 bin。

---

# 4. 为什么要把连续动作变成 bin

最主要的目的，是把连续回归问题变成离散分类问题。

## 4.1 连续回归容易产生动作平均

假设同一个观测下存在两个有效动作：

[
a=-0.8
]

和：

[
a=0.8.
]

它们可能分别表示：

* 向左绕过障碍物；
* 向右绕过障碍物。

若使用 MSE 回归：

[
\mathcal L
==========

(a-f_\theta(o))^2,
]

最优输出倾向于条件均值：

[
f_\theta^*(o)
=============

\mathbb E[a\mid o].
]

若两种动作等概率，则：

[
\mathbb E[a\mid o]
==================

\frac12(-0.8)+\frac12(0.8)=0.
]

但：

[
a=0
]

可能意味着机器人停下，或者直接朝障碍物移动。也就是说：

[
\text{两个正确动作的平均值}
]

不一定是正确动作。

---

## 4.2 分类可以同时保留两个模式

将动作划分成 bins 后，可以得到类似：

[
p(z=\text{左移}\mid o)=0.5,
]

[
p(z=\text{右移}\mid o)=0.5.
]

策略可以从分类分布中采样：

[
z\sim p_\theta(z\mid o),
]

从而一次选择左侧模式，另一次选择右侧模式，而不是输出二者的平均动作。

这正是动作离散化用于多模态行为克隆的基本动机。BeT 将连续动作转化为离散动作模式，再结合连续修正量，以保留多模态性和动作精度。([arXiv][2])

---

# 5. bin 不一定是均匀数值区间

前面的例子采用均匀区间：

[
[-1,-0.6),[-0.6,-0.2),\ldots
]

但在机器人学习中，bin 还可以由数据聚类得到。

例如机器人二维动作是：

[
a=
\begin{bmatrix}
v_x\
v_y
\end{bmatrix}.
]

示范数据中可能存在以下动作模式：

* 向左移动；
* 向右移动；
* 向前移动；
* 停止。

使用 (k)-means 聚类，可以得到 (K=4) 个动作中心：

[
c_1=
\begin{bmatrix}
-0.8\0
\end{bmatrix},
\quad
c_2=
\begin{bmatrix}
0.8\0
\end{bmatrix},
\quad
c_3=
\begin{bmatrix}
0\0.8
\end{bmatrix},
\quad
c_4=
\begin{bmatrix}
0\0
\end{bmatrix}.
]

每个聚类就是一个 bin：

[
B_1,B_2,B_3,B_4.
]

对专家动作 (a)，其 bin 编号由最近的聚类中心决定：

[
z(a)
====

\arg\min_{j\in{1,\ldots,K}}
|a-c_j|_2^2.
]

因此这里的 bin 不是规则的矩形区间，而是动作空间中的一个 **Voronoi 区域**：

[
B_j
===

\left{
a:
|a-c_j|
\leq
|a-c_i|,\ \forall i
\right}.
]

BeT 采用的正是这种思路：先使用 (k)-means 将连续动作聚类成离散 bins，再让 Transformer 预测动作属于哪个 bin。([submission0.github.io][3])

---

# 6. BeT 中的 bin：离散模式加连续偏移

只使用 bin 中心会产生量化误差。

假设某个 bin 的中心为：

[
c_z=0.4,
]

真实动作是：

[
a=0.34.
]

若直接输出中心，则误差为：

[
a-c_z=0.34-0.4=-0.06.
]

因此 BeT 不仅预测离散 bin，还预测一个连续偏移量：

[
\delta a=a-c_z.
]

最终动作恢复为：

[
\hat a
======

c_{\hat z}
+
\widehat{\delta a}.
]

也就是：

[
\boxed{
\text{连续动作}
===========

\text{离散动作模式}
+
\text{模式内部的连续修正}
}
]

训练时一般有两个目标：

[
\mathcal L
==========

\mathcal L_{\mathrm{class}}
+
\lambda\mathcal L_{\mathrm{offset}},
]

其中：

[
\mathcal L_{\mathrm{class}}
===========================

-\log p_\theta(z^*\mid o)
]

负责预测属于哪个 bin，而：

[
\mathcal L_{\mathrm{offset}}
============================

|\delta a^*-\widehat{\delta a}|^2
]

负责恢复 bin 内的精确动作。

BeT 的论文将其描述为“离散动作模式预测器”和“连续动作偏移修正器”的组合。([arXiv][2])

---

## 7. 一个完整例子

假设示范动作是：

[
a=
\begin{bmatrix}
0.72\
-0.14
\end{bmatrix}.
]

最近的聚类中心为：

[
c_5=
\begin{bmatrix}
0.8\
0
\end{bmatrix}.
]

于是动作的 bin 是：

[
z=5.
]

连续偏移量为：

[
\delta a
========

# a-c_5

\begin{bmatrix}
0.72\
-0.14
\end{bmatrix}
-------------

\begin{bmatrix}
0.8\
0
\end{bmatrix}
=============

\begin{bmatrix}
-0.08\
-0.14
\end{bmatrix}.
]

模型预测：

[
\hat z=5,
\qquad
\widehat{\delta a}
==================

\begin{bmatrix}
-0.07\
-0.13
\end{bmatrix}.
]

最终动作是：

[
\hat a
======

# c_5+\widehat{\delta a}

\begin{bmatrix}
0.73\
-0.13
\end{bmatrix}.
]

因此：

* bin (5) 表示粗粒度动作模式“向右移动”；
* offset 表示该模式内部更精确的方向和幅度。

---

# 8. bin、class、cluster 和 token 的关系

这些术语在此处经常指向同一个离散变量，但侧重点不同。

| 术语      | 强调的含义                   |
| ------- | ----------------------- |
| bin     | 连续空间被划分出的一个区域           |
| cluster | 通过聚类算法得到的一组相似动作         |
| class   | 分类网络需要预测的类别             |
| token   | 输入或输出 Transformer 的离散符号 |
| code    | 量化后的离散编码                |

例如某组动作经过 (k)-means 聚类后：

[
\text{cluster }7
]

就是动作空间中的：

[
\text{bin }7,
]

网络把它看作：

[
\text{class }7,
]

送入 Transformer 时又可以表示为：

[
\text{token }7.
]

它们并不一定是四种不同的东西，而可能是同一个离散动作编号在不同处理阶段的不同称呼。

---

# 9. bin 的数量意味着什么

设动作被划分成 (K) 个 bins。

## bin 太少

每个 bin 覆盖范围太大：

[
K\downarrow
\quad\Rightarrow\quad
\text{量化误差增大}.
]

例如只把动作分成：

* 左；
* 右；

就无法精确表示移动速度和细微方向。

## bin 太多

每个 bin 中的数据变少：

[
K\uparrow
\quad\Rightarrow\quad
\text{分类难度和数据需求增加}.
]

还可能出现：

* 很多 bin 几乎没有训练样本；
* 相近动作被人为划入不同类别；
* 分类错误导致较大的动作跳变；
* 聚类结果对初始化敏感。

因此 (K) 控制着：

[
\boxed{
\text{表示精度}
\quad\leftrightarrow\quad
\text{分类难度与数据效率}
}
]

---

# 10. 高维动作中 bin 为什么困难

假设每个动作维度分别划分为 (B) 个 bins，动作维度为 (d)。

如果把各维度的组合看作一个联合类别，则可能的组合数量为：

[
B^d.
]

例如：

[
B=10,\qquad d=7,
]

则组合数量为：

[
10^7=10,000,000.
]

若每个维度使用 256 个量化值，7 维动作的理论组合数为：

[
256^7.
]

这就是维数灾难。

可以独立预测各动作维度的 bin，但这样又会弱化维度之间的相关性。例如末端位置、姿态和夹爪状态通常不是彼此独立的。

BeT 通过对**完整动作向量**执行 (k)-means 聚类，避免显式枚举每个维度的笛卡尔积；但随着动作维度或动作序列长度增加，固定数量的聚类中心仍可能难以充分覆盖复杂分布。后续 VQ-BeT 工作也明确指出，普通 (k)-means 动作离散化在高维动作和长动作序列上存在扩展困难。([Proceedings of Machine Learning Research][4])

---

# 11. Diffusion Policy 为什么不使用 bins

Diffusion Policy 引言中提到 bins，是为了对比已有动作表示方法。

BeT 的思路是：

[
a
\longrightarrow
(z,\delta a),
]

即先将连续动作变成离散模式，再恢复连续偏移。

Diffusion Policy 则直接在连续动作序列空间中建模：

[
p(A\mid O),
]

并通过连续去噪过程生成：

[
A^K
\rightarrow A^{K-1}
\rightarrow\cdots
\rightarrow A^0.
]

因此它不需要：

* 预先指定 bin 数量；
* 使用 (k)-means 划分动作模式；
* 将连续动作强制映射到固定类别；
* 为每个模式设计一个离散中心。

这使 Diffusion Policy 可以在连续高维动作空间中表示复杂分布，而不受固定离散类别数量的直接限制。论文正是将“量化动作的类别表示”与“连续动作扩散”作为两种不同的策略表示方式进行比较。([Sage Journals][1])

---

## 核心概括

在本文语境中：

[
\boxed{
\text{bin}
==========

\text{连续动作空间中的一个离散区域或动作类别}
}
]

量化过程为：

[
a\in\mathbb R^d
\quad\longrightarrow\quad
z\in{1,\ldots,K}.
]

BeT 进一步写成：

[
a=c_z+\delta a,
]

其中：

* (z)：动作属于哪个 bin，表示粗粒度行为模式；
* (c_z)：该 bin 的中心动作；
* (\delta a)：相对于中心的连续精细修正。

因此，bin 的主要作用是把难以直接处理的连续、多模态动作预测问题，转化成：

[
\boxed{
\text{先选择离散动作模式，再预测模式内部的连续动作}
}
]

[1]: https://journals.sagepub.com/doi/full/10.1177/02783649241273668?utm_source=chatgpt.com "Diffusion policy: Visuomotor policy learning via action diffusion - Cheng Chi, Zhenjia Xu, Siyuan Feng, Eric Cousineau, Yilun Du, Benjamin Burchfiel, Russ Tedrake, Shuran Song, 2025"
[2]: https://arxiv.org/abs/2206.11251?utm_source=chatgpt.com "Behavior Transformers: Cloning $k$ modes with one stone"
[3]: https://submission0.github.io/?utm_source=chatgpt.com "Behavior Transformers: Cloning k modes with one stone"
[4]: https://proceedings.mlr.press/v235/lee24y.html?utm_source=chatgpt.com "Behavior Generation with Latent Actions"
