Découvrez comment les vecteurs de tâches permettent de fusionner efficacement les modèles et d'orienter leur comportement. Apprenez à manipuler les poids Ultralytics pour le multitâche « zero-shot ».
Les vecteurs de tâches représentent les modifications spécifiques apportées aux poids d'un réseau neuronal lors du réglage fin afin d' obtenir une nouvelle capacité. En soustrayant les paramètres d'un modèle de base de ceux d'un modèle ajusté, les chercheurs peuvent isoler un vecteur directionnel dans l'espace des poids qui encapsule le comportement appris pour cette tâche spécifique. Cette approche permet aux développeurs d'appliquer desimples opérations arithmétiques aux paramètres du modèle pour orienter, modifier ou fusionner les comportements du modèle sans nécessiter de calculs d'entraînement supplémentaires.
Alors que le concept d'apprentissage par transfert consiste à entraîner un modèle de manière séquentielle sur un nouvel ensemble de données afin d'adapter ses connaissances existantes, les vecteurs de tâche agissent directement sur les poids structurels du modèle après l'entraînement. Au lieu de réentraîner les gradients pour apprendre un nouveau domaine, l'interpolation de l'espace des poids à l'aide de vecteurs de tâches permet aux praticiens de combiner linéairement les différences de poids provenant de plusieurs modèles entraînés indépendamment. Cela permet une fusion de modèles « zero-shot », permettant à un seul modèle d'hériter de multiples capacités simultanément sans la charge de calcul habituelle lors de l'entraînement.
La possibilité de manipuler les modèles d'apprentissage profond de manière algébrique a donné lieu à plusieurs applications majeures dans les pipelines d'IA modernes :
La création et l'application d'un vecteur de tâches nécessitent d'accéder au dictionnairePyTorch et de le manipuler. L' exemple suivant montre comment extraire un vecteur de tâches d'un modèle YOLO26 finement ajusté et le réappliquer au modèle de base avec un facteur d'échelle spécifique.
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]
À mesure que les architectures telles que les grands modèles linguistiques et les transformateurs de vision à grande échelle voient leur nombre de paramètres augmenter, leur réentraînement à chaque ajustement mineur devient économiquement irréalisable. Les vecteurs de tâches offrent une alternative mathématiquement élégante pour l'optimisation des modèles après l'entraînement . En partageant des vecteurs de tâches légers plutôt que des modèles entiers de plusieurs gigaoctets, la communauté de l'IA peut accélérer la collaboration open source dans le domaine de l'IA. Une fois que vos vecteurs de tâches personnalisés sont affinés, l'utilisation de la Ultralytics simplifie les processus ultérieurs de déploiement et de surveillance des modèles, garantissant que vos poids optimisés se traduisent directement en terminaux prêts pour la production.
Commencez votre parcours avec l'avenir de l'apprentissage automatique