Negli articoli di ricerca sui modelli GIT, è stato spiegato che viene utilizzato un potente codificatore di visione e che vengono adottati parametri casuali per il modello linguistico. Questa volta, poiché l'obiettivo finale è utilizzare un modello linguistico di classe 7B, al modello linguistico verrà applicato un modello pre-addestrato. I seguenti moduli saranno esaminati per la messa a punto. IL Proiezione GIT, essendo un modulo inizializzato, è sempre incluso. Alcune combinazioni possono sembrare ridondanti, ma vengono esplorate senza troppa preoccupazione per questa sperimentazione.
Ai moduli impostati per la formazione vengono assegnati gradienti, mentre il resto viene modificato per non avere gradienti.
# Specificare i parametri da addestrare (addestrarli tutti aumenterebbe l'utilizzo della memoria)
per nome, p in model.model.named_parameters():
if np.any([k nel nome per k in keys_finetune]):
p.requires_grad = Vero
altro:
p.requires_grad = Falso
Il Vision Encoder e l'LLM utilizzati per questo esame sono:
- openai/clip-vit-base-patch16
- facebook/opt-350m
La formazione utilizza il set di dati COCO e dura 5 epoche.
Ecco i moduli target addestrati durante ciascun esperimento:
- Progetto: Proiezione GIT. Inizializzato in modo casuale, quindi è sempre addestrato.
- LoRA: Sono stati applicati la query, la chiave e il valore dell'attenzione al sé nel modello linguistico.
- OPTARE: Tutti gli strati sono stati addestrati.
- ViT: Tutti gli strati sono stati addestrati.
- Testa: È stato addestrato l'ultimo lm_head di OPT.
(Nota: sebbene LoRA possa essere applicato a ViT, ma per evitare di rendere gli esperimenti troppo complicati, questa volta non è stato incluso.)
Come mostrato nel grafico delle perdite di formazione, è evidente che alcuni gruppi non stanno ottenendo buoni risultati. Questo è stato il caso in cui l'OPT è stato incluso nella formazione. Sebbene tutti gli esperimenti siano stati condotti in condizioni abbastanza simili, potrebbero essere necessari aggiustamenti più dettagliati, come il tasso di apprendimento, durante la messa a punto del modello linguistico. Successivamente verranno esaminati i risultati, escludendo i modelli in cui l'OPT è incluso nella formazione.
Sia la formazione che la convalida. La perdita è diminuita maggiormente con il Proiezione+LoRA modello. Finale di messa a punto Testa strato ha mostrato risultati quasi identici. Se viene allenato anche ViT, la perdita appare leggermente più alta e i risultati sembrano instabili. Anche aggiungendo LoRA durante la formazione ViT, la perdita tende comunque ad essere elevata. Per mettere a punto questi dati, sembra che l’utilizzo di un modello ViT pre-addestrato senza aggiornarne i parametri produca risultati più stabili. L'efficacia di LoRA è stata riconosciuta in vari luoghi ed è evidente da questo esperimento che l'aggiunta di LoRA al LLM ha migliorato sia la perdita di formazione che quella di convalida.
Revisione dei risultati dell'inferenza su alcuni dati di test:
Quando si addestra lo stesso OPT, i risultati sono scarsi quanto il risultato della perdita, rendendo il modello senza parole. Inoltre, durante l'addestramento di ViT, l'output ha un senso semantico, ma descrive qualcosa di completamente diverso dall'immagine data. Tuttavia, gli altri risultati sembrano catturare in una certa misura le caratteristiche delle immagini. Ad esempio, la prima immagine menziona “gatto” e “banana”, mentre la seconda identifica “segnale stradale”. Confrontando i risultati con e senza LoRA, quest'ultimo tende a utilizzare ripetutamente parole simili, ma l'utilizzo di LoRA sembra renderlo leggermente più naturale. Addestrare il Testa si ottengono risultati intriganti, come usare "giocare" invece di "mangiare" per la prima immagine. Sebbene siano presenti alcuni elementi innaturali in questi risultati, si può dedurre che la formazione ha avuto successo nel catturare le caratteristiche dell'immagine.
Per la messa a punto delle condizioni negli esperimenti precedenti, è stato utilizzato un modello linguistico leggermente più piccolo, OPT-350m. Ora l’intenzione è quella di passare dal modello linguistico al modello 7B. Non si limiteranno all'OPT, ma verranno introdotti anche LLM più forti, LLaMA e MPT.
L'integrazione di questi due modelli può essere eseguita in modo simile all'OPT. Facendo riferimento alle funzioni di inoltro del Modello lama E Modello MPT, combina i vettori dell'immagine proiettata con i token di testo e modifica la maschera da Maschera di attenzione causale A La maschera di attenzione di GIT. Una cosa da notare: per MPT, la maschera non è (0, -inf), ma (False, True). I processi successivi possono essere implementati in modo simile.
Per utilizzare il modello di classe 7B con OPT, è sufficiente modificare il nome del modello da facebook/opt-350m a facebook/opt-6.7b.
Per LLaMA, con la disponibilità di LLaMA2, quello sarà il modello prescelto. Per utilizzare questo modello pre-addestrato, sono necessarie le approvazioni sia di Meta che di Hugging Face. Per Hugging Face è necessario un account, quindi assicurati di configurarlo. Le approvazioni in genere arrivano entro poche ore. Successivamente, accedi a Hugging Face sul terminale in cui viene eseguito l'addestramento.
login-huggingface-cli
Puoi accedere utilizzando il token creato nell'account Hugging Face → Impostazioni → Token di accesso.
I parametri di allenamento rimangono coerenti, utilizzando il set di dati COCO e durando per 3 epoche. Sulla base dei risultati dell'esperimento 1, i moduli impostati per la messa a punto erano Proiezione + LoRA.
Diamo un'occhiata ai risultati.
Analizzando la perdita, è evidente che i modelli che utilizzano LLaMA2 e MPT come LLM mostrano una riduzione più soddisfacente. Osserviamo anche i risultati dell'inferenza.
Per quanto riguarda la prima immagine, per tutti i modelli le espressioni sembrano più naturali rispetto all'OPT-350m. Non esistono espressioni bizzarre come “una banana con una banana”, a sottolineare la forza del LLM. Per la seconda immagine c'è ancora qualche difficoltà con frasi come “un semaforo” o “un edificio”. Per immagini così complesse, potrebbe essere necessario prendere in considerazione l’aggiornamento del modello ViT.
Infine, eseguiamo l'inferenza sulle immagini diventate popolari con GPT-4.
Sebbene si prevedessero risposte fluide da quando è in uso il LLM, i risultati sono abbastanza semplici. Ciò potrebbe essere dovuto al fatto che il modello è stato addestrato esclusivamente su COCO.
Considerati i risultati deludenti dell’esperimento precedente, si è deciso di incorporare dati diversi dai COCO per la formazione. Il set di dati M3IT attualmente in uso è abbastanza completo e può gestire una quantità significativa di dati nello stesso formato di COCO.
Si intende utilizzare i dati provenienti da questa fonte escludendo le categorie "Cinese" e "Video". Originariamente, il set di dati di addestramento COCO conteneva 566.747 dati. Combinandolo con ulteriori fonti, questo è aumentato a 1.361.650. Sebbene le dimensioni siano quasi raddoppiate, si ritiene che il set di dati sia diventato di qualità superiore a causa della maggiore diversità dei compiti.
La gestione di più set di dati Pytorch può essere facilmente ottenuta utilizzando il file ConcatDataset.
elenco_dataset = [
datasets.load_dataset("MMInstruction/M3IT", i) per i in m3it_name_list
]
train_dataset = torch.utils.data.ConcatDataset([d["train"] for d in dataset_list])
L'addestramento è stato condotto per 1 epoca e il modello LLaMA2 è stato utilizzato per la messa a punto Proiezione e LoRA, analogamente all'esperimento 2.
Poiché non vi è alcuna perdita da confrontare con questa volta, tuffiamoci direttamente nei risultati dell'inferenza.
Oltre a risolvere problemi semplici, il modello ora gestisce sfide più complesse. Aggiungendo set di dati per attività più complesse dei semplici sottotitoli, le funzionalità si sono ampliate in modo significativo. Raggiungere questo livello di precisione con solo 1 epoca di allenamento è stato sorprendente.
Proviamolo con la seguente immagine di esempio. Data la maggiore varietà dei dati, il modo in cui sono state presentate le domande è stato leggermente modificato.
Sebbene la descrizione di "Umbrella" fosse ancora cablata, sembra che stia migliorando. Per migliorare ulteriormente, è necessario aumentare il numero di periodi di addestramento, aggiungere più tipi o volumi di set di dati e sfruttare ViT o LLM più potenti. Tuttavia, è impressionante che un modello del genere possa essere sviluppato in solo mezza giornata, date le risorse computazionali e di dati.
lascia un commento