Home ← Articles Monograph Services
IT EN ES
hacker:5llm_internal:5wpg:5fine-tuning:5llm:5ai:5tool:5

Merge - Fusione di due modelli

📅 2026-09-23 ⏱ 4 min read logistar.it

Merge - Fusione di due modelli Se per **merge** intendi fondere due modelli linguistici già addestrati per ottenere un unico modello che conservi competenze di entrambi, è assolutamente possibile, soprattutto con modelli piccoli open-weight. La cosa interessante è che **merge e fine-tuning sono operazioni diverse**: nel merge non insegni necessariamente qualcosa di nuovo al modello; combini i parametri di due modelli già esistenti. ### 1. L'idea di base Supponiamo di avere: ```text MODELLO A esperto di programmazione + MODELLO B esperto di sicurezza ↓ MERGE ↓ MODELLO C programmazione + sicurezza ``` In termini molto semplificati, se i due modelli hanno gli stessi parametri e architettura, si può fare una combinazione dei pesi: $$ W_{merge} = alpha W_A + (1-alpha)W_B $$ dove `α` stabilisce quanto il modello finale assomigli ai due modelli di partenza. Per esempio: ```text 70% modello A 30% modello B ``` non significa necessariamente che il risultato possiederà il 70% delle competenze di A e il 30% di B. Il comportamento emergente può essere molto più complesso. --- ## 2. Ma c'è un problema fondamentale I due modelli devono essere **compatibili**. Idealmente: ```text stessa architettura stessa dimensione stesso numero di layer stesse dimensioni degli hidden state stesso tokenizer, o comunque compatibilità gestibile ``` Non puoi prendere arbitrariamente: ```text Llama 3 8B + Mistral 7B ``` e fare semplicemente la media dei file dei pesi. Sono architetture differenti e i tensori non corrispondono necessariamente. È molto più semplice fare: ```text MODELLO BASE │ ┌───┴────┐ ▼ ▼ fine-tune A fine-tune B │ │ └─────┬───────┘ ▼ MERGE ▼ MODELLO EXPERT ``` Questo è uno degli scenari più interessanti. --- # 3. Il caso che secondo me ti interessa di più: specialisti sullo stesso modello base Immagina di partire da un piccolo modello, per esempio un 3B o 7B. Crei due versioni specializzate: ```text MODELLO BASE │ ┌────────┴────────┐ ▼ ▼ Fine-tuning A Fine-tuning B programmazione cybersecurity │ │ └────────┬────────┘ ▼ MERGE │ ▼ EXPERT LLM ``` Il vantaggio è enorme: i due modelli condividono la stessa struttura di partenza. Puoi quindi avere: ```text Base ├── Python expert ├── SQL expert ├── cybersecurity expert ├── matematica expert └── diritto expert ``` e poi sperimentare diverse combinazioni. --- # 4. Merge dei fine-tuning Qui entrano in gioco tecniche più interessanti della semplice media. Una famiglia di metodi molto conosciuta è il **weight merging**. Tra gli approcci utilizzati nella comunità ci sono: * **linear merge** * **SLERP** * **task arithmetic** * **TIES merging** * **DARE** * merge di adapter/LoRA La differenza è importante. ### Linear merge È il metodo concettualmente più semplice: ```text A ──┐ ├── weighted average → C B ──┘ ``` ### SLERP Invece di interpolare linearmente i pesi, utilizza un'interpolazione sferica. Può essere utile quando si vogliono fondere due modelli mantenendo meglio alcune proprietà dei modelli originali. ### TIES È più sofisticato. L'idea generale è evitare che aggiornamenti provenienti dai diversi fine-tuning si annullino o entrino inutilmente in conflitto. ### DARE Riduce selettivamente parte degli aggiornamenti prima del merge, cercando di conservare le informazioni realmente importanti. --- # 5. E qui arriviamo agli “LLM experts” La tua idea può essere sviluppata in modo ancora più interessante. Invece di creare un solo enorme modello specializzato in tutto: ```text MODELLO ENORME │ ┌─────────────────┼─────────────────┐ ▼ ▼ ▼ programmazione medicina diritto ``` puoi avere: ```text MODELLO BASE │ ┌──────────┼──────────┐ ▼ ▼ ▼ Expert A Expert B Expert C │ │ │ └──────────┼──────────┘ ▼ MERGE / ROUTING ``` E qui ci sono **due filosofie diverse**. ### Filosofia A — modello unico Fondi tutto: ```text Python expert + SQL expert + security expert + mathematics expert ↓ UNICO MODELLO ``` Il risultato è un LLM generalista con competenze specialistiche. ### Filosofia B — mixture of experts Non fondi necessariamente tutto. Mantieni specialisti separati: ```text ROUTER │ ┌────────────┼────────────┐ ▼ ▼ ▼ CODING SQL SECURITY EXPERT EXPERT EXPERT ``` Il router decide quale esperto utilizzare. Questa è concettualmente molto vicina alla filosofia **Mixture of Experts (MoE)**. --- # 6. Una cosa ancora più interessante: gli expert LoRA Per modelli piccoli, io guarderei con particolare attenzione agli **adapter LoRA**. Invece di creare: ```text MODELLO BASE → 3 modelli completi ``` puoi avere: ```text BASE │ ┌────────┼────────┐ ▼ ▼ ▼ LoRA A LoRA B LoRA C │ │ │ Python SQL Security ``` Gli adapter sono molto più piccoli del modello completo. Puoi quindi avere, per esempio: ```text base-model + python-lora + sql-lora + security-lora ``` e sperimentare: ```text base + python base + security base + python + security ``` senza dover conservare una copia completa del modello per ogni specializzazione. --- # 7. Attenzione però a una cosa C'è una differenza enorme tra: > **“il modello contiene conoscenza di tre domini”** e: > **“il modello è realmente esperto in tre domini”**. Il merge non garantisce automaticamente la seconda cosa. Potresti ottenere: ```text Python ██████████ Security ██████ SQL ███ ``` oppure, peggio: ```text Python █████ Security █████ SQL █████ coerenza ██ ``` perché i fine-tuning possono entrare in conflitto. Questo è uno dei problemi più interessanti della ricerca sui model merge. --- # 8. Come farei un esperimento concreto Se vuoi sperimentare senza utilizzare modelli enormi, partirei da **due piccoli modelli derivati dallo stesso base model**. Per esempio: ```text BASE 3B │ ├── fine-tune Python │ └── fine-tune cybersecurity ``` Poi: ```text Python model + Security model ↓ TIES / SLERP ↓ Merged model ``` E infine costruirei un piccolo benchmark con tre gruppi di domande: ```text 20 domande Python 20 domande cybersecurity 20 domande generali ``` e confronterei: ```text BASE PYTHON EXPERT SECURITY EXPERT MERGED ``` Così puoi vedere empiricamente cosa è successo. La cosa interessante sarebbe misurare non soltanto se il modello **ha acquisito** la seconda competenza, ma anche se il merge ha **distrutto parte della prima**. --- ## 9. E c'è un esperimento ancora più interessante Potresti creare: ```text BASE │ ├── Expert matematica ├── Expert programmazione ├── Expert sicurezza └── Expert linguistica ``` e poi fare una serie di merge: ```text A = matematica + programmazione B = sicurezza + linguistica C = A + B ``` ottenendo una sorta di: ```text BASE │ ┌─────────┼─────────┐ ▼ ▼ ▼ MATH CODE SECURITY │ │ │ └────┬────┴────┬────┘ ▼ ▼ MERGE 1 MERGE 2 └────┬────┘ ▼ SUPER-EXPERT ``` E a quel punto puoi studiare **quanto le competenze sopravvivono ai merge successivi**. È un esperimento molto più interessante del semplice “facciamo un modello più grande”, perché ti permette di osservare direttamente **interferenza, conservazione e perdita delle competenze**. Se vuoi, nel prossimo passo posso mostrarti **come fare concretamente un merge di due piccoli LLM open-source sul PC, con Hugging Face + `mergekit`, compresa la struttura delle cartelle e un primo esperimento Python/SQL**.