タスクベクトルが、効率的なモデルの統合と行動制御をどのように実現するのかを学びましょう。ゼロショット・マルチタスクを実現するために、Ultralytics 重みをどのように操作するかをご紹介します。
タスクベクトルは、新たな機能を獲得するために 微調整の過程でニューラルネットワークの重みに加えられた 具体的な変更を表します。 ファインチューニングされたモデルのパラメータから 基盤となるベースモデルのパラメータを差し引くことで、 研究者は、その特定のタスクに対して学習された挙動を 包含する方向ベクトルを重み空間から抽出することができます。このアプローチにより、開発者はモデルパラメータに対して単純な 算術演算を適用し、 追加のトレーニング計算を必要とせずに、モデルの挙動を誘導、変更、または統合することが可能になります。
転移学習の概念では、 既存の知識を適応させるために新しいデータセットを用いてモデルを順次学習させるのに対し、タスクベクトルは 学習後のモデルの構造的重みに対して直接作用します。 新しいドメインを学習するために勾配を再学習させる代わりに、 タスクベクトルを用いた重み空間補間により、実務者は 独立して学習された複数のモデル間の重みの差を線形に組み合わせることができます。これにより、ゼロショットでの モデル統合が可能となり、単一のモデルが 複数の機能を同時に継承できるようになります。これには、通常の 学習中に生じる計算上のオーバーヘッドが伴いません。
ディープラーニングモデルを代数的に操作できるという特性は、 現代のAIパイプラインにおいて、いくつかの画期的な応用を生み出しています:
タスクベクトルの作成と適用には、 PyTorch 辞書へのアクセスと操作が必要です。 以下の例では、微調整済みのYOLO26モデルからタスクベクトルを抽出し、 特定のスケーリング係数を用いてベースモデルに適用する方法を示します。
from ultralytics import YOLO
# Load the state dictionaries for the base and fine-tuned models
base_weights = YOLO("yolo26n.pt").model.state_dict()
tuned_weights = YOLO("yolo26n-custom.pt").model.state_dict()
# Calculate the task vector (tuned weights minus base weights)
task_vector = {k: tuned_weights[k] - base_weights[k] for k in base_weights.keys()}
# Apply the task vector to the base model using a 0.5 scaling factor
for k in base_weights.keys():
base_weights[k] += 0.5 * task_vector[k]
大規模言語モデルや大規模ビジョントランスフォーマーといったアーキテクチャの パラメータ数が増加するにつれ、些細な調整のたびに再学習を行うことは経済的に現実的ではなくなっています。タスク タスクベクトルは、トレーニング後の モデル最適化において、数学的に洗練された代替手段となります。数ギガバイト規模のモデル全体ではなく、 軽量なタスクベクトルを共有することで、AIコミュニティは AI分野におけるオープンソースの協業を加速させることができます。 独自のタスクベクトルが洗練された後は、Ultralytics その後の モデル展開および監視プロセスが簡素化され、 最適化された重みが、本番環境対応のエンドポイントに直接反映されることが保証されます。
未来の機械学習で、新たな一歩を踏み出しましょう。