Action Chunking
アクションチャンク化では、ロボットのポリシーが1つの観測から将来の一連のアクションを予測し、誤差の累積を抑えます。ACT、平滑化、VLAについて解説します。
アクションチャンク化はロボット学習の手法で、制御ステップごとに1つのアクションを予測する代わりに、1回の観測から次のk個のアクションの系列、つまりチャンクを予測します。この名称は、複数のアクションを1つの単位にまとめるという心理学や神経科学の概念に由来し、2023年のAction Chunking with Transformers(ACT)でロボット学習に導入されました。ACTは、低価格のALOHAロボットアームを使い、わずか10分のデモンストレーションから、バッテリーをスロットに差し込むなどの繊細な両腕操作を80~90%の成功率で学習しました。現在、チャンク予測は模倣学習や、汎用ロボティクス向けに構築された視覚・言語・行動(VLA)モデルで標準的に使われています。
チャンク予測が有効な理由#
行動クローニングでは、ポリシーが人間によるデモンストレーション内のアクションを模倣するように学習します。小さなミスでもロボットはデモンストレーションで扱われていない状態に移行し、次の予測が悪化するため、長いタスクでは誤差が累積します。1回の予測でk個のアクションを実行するポリシーは、エピソードあたりの判断回数をk分の1に減らします。ACTの著者らはこれを、タスクの実効ホライズンがk分の1になると説明しています。2つのタスクで平均を取ったシミュレーションのアブレーションでは、1回に1つのアクションを予測した場合の成功率は1%でしたが、100アクションのチャンクでは44%に上昇しました。
チャンクは、単一の観測では捉えられないタイミングも表現できます。人間のデモンストレーターは一時停止したりためらったりします。同じ画像を一時停止の前後に見る単一ステップのポリシーでは、待機すべきか動くべきかを判断できませんが、一時停止を含むチャンクなら再現できます。また、デモンストレーションに2通りの有効な方法が示されている場合、系列全体を一度に予測すれば、2つを平均するのではなく、どちらか一方の方法を維持できます。
ロボットはチャンクを実行してから、ポリシーに新しいチャンクを要求します。
チャンク全体の実行後に再計画するとモデル呼び出しが最も少なくなります。Diffusion Policyのようにチャンクの一部を実行した後に再計画すると、モデル予測制御のリシーディングホライズンの考え方に沿って、予期しない事態により速く対応できます。
チャンク間の継ぎ目を滑らかにする#
ロボットはチャンク内ではオープンループで動作し、新しいチャンクは毎回新たな予測から始まるため、チャンクが切り替わる箇所で動作が飛ぶ可能性があります。ACTの時間的アンサンブルでは、各ステップでポリシーに問い合わせ、その時点に対するすべてのチャンクの予測を重み付き平均して実行します。重みはexp(−m·i)で、最も古い予測に最大の重みを与えます。このNumPyの例では、各チャンクに小さな誤差がある代替ポリシーを使い、通常のチャンク化と時間的アンサンブルを比較します。
import numpy as np
rng = np.random.default_rng(0)
k, steps, m = 10, 100, 0.1 # chunk size, episode length, temporal-ensembling decay
target = np.sin(np.linspace(0, np.pi, steps + k)) # the demonstrated joint trajectory
# Stand-in policy: at step t it predicts actions for steps t..t+k-1, each chunk off by its own error
chunks = [target[t : t + k] + rng.normal(0, 0.05) for t in range(steps)]
# Plain chunking: query every k steps and execute each chunk open loop
plain = np.concatenate([chunks[t] for t in range(0, steps, k)])
# Temporal ensembling (ACT): query every step and average all predictions for step t, oldest weighted most
ensembled = []
for t in range(steps):
preds = [chunks[s][t - s] for s in range(max(0, t - k + 1), t + 1)]
weights = np.exp(-m * np.arange(len(preds)))
ensembled.append(np.dot(weights, preds) / weights.sum())
for name, actions in (("plain", plain), ("ensembled", np.array(ensembled))):
print(f"{name}: largest jump between consecutive actions = {np.abs(np.diff(actions)).max():.3f}")
print(f"demonstration: largest jump = {np.abs(np.diff(target[:steps])).max():.3f}")通常のチャンク化では、チャンク間の継ぎ目で発生する最大のステップ間のジャンプは0.085です。これはデモンストレーションの0.029のおよそ3倍です。アンサンブルでは、異なる観測から得た最大10個の予測を各実行アクションで平均するため、ジャンプは0.044に抑えられます。
大規模モデルでは推論が制御ステップより長くかかる場合があるため、継ぎ目を隠すのが難しくなります。Physical Intelligenceのリアルタイムチャンク化では、現在のチャンクを実行している間に次のチャンクを生成し、推論遅延中に実行されるアクションを固定して、残りのアクションをそれに合わせて補完します。この方法により、300ミリ秒を超える遅延があっても、マッチを擦るなどの動的なタスクを継続できました。
現代のロボットポリシーにおけるアクションチャンク化#
- ACT: 条件付き変分オートエンコーダーとして学習されたTransformerで、100個の関節位置目標からなるチャンクを出力します。これは、ALOHAの50 Hz制御レートで2秒間の動きに相当します。
- 拡散ポリシー: アクションシーケンスを反復的にノイズ除去して生成するため、複数の明確に異なる解を含むデモンストレーションを適切に表現できます。
- VLAモデル: Physical Intelligenceのπ0は、ビジョン言語モデルと、フローマッチングで学習され、50個のアクションからなるチャンクを出力するアクションエキスパートを組み合わせ、最大50 Hzで制御します。Hugging FaceのLeRobotライブラリは、ACT、Diffusion Policy、π0のオープンな実装を提供しています。
これらのポリシーの大半は、学習済みバックボーンを使ってカメラ画像をエンコードします。代わりに、検出器から得た物体位置を条件としてポリシーを動作させることもできます。作業セル内の部品でファインチューニングしたUltralytics YOLO26モデルは、各フレームを少数のボックスまたはキーポイントの座標に変換します。チャンク化されたポリシーは、生のピクセルの代わりにこれらの座標を状態として利用します。
アクションチャンク化と関連概念の比較#
- 行動認識: 動画内の動作を特定します。アクションチャンク化では、ロボットが実行するコマンドを生成します。
- モデル予測制御: 各ステップで、動力学モデルに基づいてアクションのシーケンスを最適化します。チャンク化ポリシーはデモンストレーションからシーケンスを学習するため、モデルを必要としません。
- 大規模アクションモデル: クリックやAPI呼び出しを通じてソフトウェアインターフェースを操作するAIエージェントです。アクションチャンク化が扱うのは低レベルのモーターコマンドで、たとえばACTがALOHAの2本のアームについて各ステップで出力する、14次元の関節位置ベクトルが該当します。










