lf.wtf
Resoconto di laboratorio 01

Ricerca IA · SmolLM2-135M

Innesti di circuiti

Scritto e prodotto in collaborazione con Claude Opus 5.5

Abbiamo innestato un piccolo circuito nei neuroni di un modello da 135M, senza addestramento con gradiente. Il modello è SmolLM2-135M, e nessuno dei suoi pesi originali è cambiato. Sui problemi riservati e sigillati, il suo punteggio nella moltiplicazione è passato dal 21.3% all'83.1%.

Dove si trova l'innesto in SmolLM2-135MIl testo entra come token, attraversa 30 strati di neuroni e la testa di output sceglie il token successivo. L'innesto è un piccolo circuito aggiunto accanto agli strati. Legge lo strato 20 e aggiunge la sua spinta all'ultimo strato, lo strato 29, subito prima della testa di output. I neuroni originali restano invariati.014202129Strati da 0 a 29. I punti sono un campione di ogni strato, non in scala.Tokenin ingressoTesta dioutputProssimotokenInnestoda 25,270 a 121,198pesi aggiunti,meno dello 0.1%132Neuroni originali, invariatiInnesto, aggiunto accanto agli strati Dove si trova l'innesto in SmolLM2-135MIl testo entra come token, attraversa 30 strati di neuroni e la testa di output sceglie il token successivo. L'innesto è un piccolo circuito aggiunto accanto agli strati. Legge lo strato 20 e aggiunge la sua spinta all'ultimo strato, lo strato 29, subito prima della testa di output. I neuroni originali restano invariati.Token in ingresso014202129Testa di outputProssimo tokenInnestoda 25,270 a 121,198pesi aggiunti,meno dello 0.1%132Neuroni originali, invariatiInnesto, aggiunto accanto agli stratiPunti: un campione per strato, non in scala.
Dove si trova l'innesto. SmolLM2-135M ha 30 strati, ciascuno formato da un blocco di attenzione (9 teste) seguito da un blocco MLP, che lavorano su uno stato nascosto largo 576 numeri, per circa 134.5M pesi in tutto. L'innesto è un piccolo circuito aggiunto accanto agli strati, come un bypass. Nessuno dei neuroni o dei pesi originali cambia.
  1. La lettura ed entrambi gli interruttori prelevano lo stato nascosto all'ingresso dell'MLP dello strato 20, nella posizione in cui il modello sta per scrivere la sua prossima cifra della risposta.
  2. La spinta dell'innesto viene aggiunta all'output dell'MLP dello strato 29, l'ultimo strato, nella stessa posizione, subito prima che la testa di output scelga il token successivo.
  3. Per l'addizione a tre cifre la lettura unisce anche gli strati 14 e 21 (1,728 numeri in tutto). La scrittura entra comunque nell'ultimo strato.
Moltiplicazione, set riservato
21.3% → 83.1%
Pesi originali modificati
0
Innesto più grande, quota del modello
0.09%
Punti di vantaggio su un innesto a gradiente della stessa dimensione
+57.9

Da dove è partito

Una regola può servire molti fatti

Voglio scoprire fin dove si può spingere un piccolo modello aperto verso il livello di frontiera modificando direttamente i suoi pesi e innestandovi parti nuove, senza un pesante ciclo di addestramento. L'addestramento è la strada solita. Fai passare miliardi di domande e risposte attraverso un modello e la discesa del gradiente ricava le regole da sola. Ma possiamo anche aprire un modello, leggere cosa contiene mentre è a metà di un problema e cambiarlo. Allora, alcune di quelle regole si possono scrivere a mano?

La mia ipotesi di lavoro è che gran parte del ragionamento funzioni con insiemi di regole, dove una regola serve molti fatti. Il riporto dell'uno è il caso più semplice. Nessuno memorizza ogni somma, perché una sola regola del riporto le copre tutte, in ogni posizione delle cifre. Nei miei appunti l'ho messa così:

Forse una regola nata da un fatto coinciderebbe con la regola di un altro.

Per un piccolo modello i fatti sono costosi da memorizzare, e le regole costano poco. Il primo circuito di moltiplicazione di questo resoconto è costruito per tutti i problemi da 2 × 10 fino a 9 × 99, ed è di 25,270 pesi.

Le stesse conversazioni hanno fatto emergere una seconda idea che si abbina alla prima: un insieme di regole per l'apprendimento, per imparare qualcosa di nuovo, accanto a regole logiche per applicare ciò che sai già. Questo resoconto riguarda il lato logico.

Cosa ha già il modello

Le cifre ci sono

Prima di costruire qualsiasi cosa, abbiamo guardato cosa contiene SmolLM2 nel momento in cui inizia a scrivere una risposta. Una lettura lineare del suo stato nascosto nella posizione della risposta, adattata con i minimi quadrati, estrae le cifre di entrambi i numeri in modo quasi perfetto. Per l'addizione a tre cifre un solo strato non bastava, ma unendo gli strati 14, 20 e 21 si legge ogni cifra al 99% su problemi nuovi.

Dove si trovano le cifre

Addizione a tre cifre. Quota di problemi nuovi in cui una lettura lineare indovina tutte e sei le cifre dei due numeri, leggendo uno strato alla volta, poi gli strati 14, 20 e 21 uniti. Ogni lettura è adattata su 1,500 problemi.

76.6% Miglior strato singolo, strato 21

11.8% Ultimo strato, strato 29

97.9% Strati 14, 20 e 21 uniti, e 99.2% quando quella lettura è adattata su 3,000 problemi

Tutti i 30 strati in tabella
StratoTutte e sei le cifre giuste
00.0%
14.3%
226.0%
350.1%
452.2%
547.1%
631.4%
720.4%
818.8%
918.2%
1027.1%
1127.9%
1239.1%
1347.2%
1474.8%
1570.1%
1664.0%
1763.0%
1864.2%
1963.5%
2072.9%
2176.6%
2271.5%
2362.9%
2448.8%
2530.5%
2619.0%
2713.9%
2811.7%
2911.8%

Quindi il modello ha letto la domanda. Quello che non sa fare in modo affidabile è combinare le cifre: il riporto, il prestito, le tabelline. Quel passaggio di combinazione è la parte che forniamo noi.

Come funziona un innesto

Quattro parti, nessuna addestrata con la discesa del gradiente

  1. LetturaUna lettura lineare per ogni cifra dei due numeri, presa dallo stato nascosto del modello stesso.
  2. RegoleUna piccola tabella di consultazione per ogni cifra della risposta. La cifra delle unità deriva dalle due cifre delle unità; la cifra delle decine deriva dalle cifre delle decine più il riporto, e così via.
  3. ScritturaUna spinta verso il token della cifra giusta nell'ultimo strato del modello. Il modello scrive comunque la sua risposta da solo. L'innesto fa solo pendere la bilancia su quale cifra viene dopo.
  4. InterruttoriDue interruttori adattati decidono quando l'innesto è attivo. Sono adattati per scattare solo mentre il modello scrive la risposta a questo tipo di problema, e per restare spenti su altra matematica, problemi descritti a parole, codice e testo normale.

Le letture e gli interruttori sono adattati con i minimi quadrati in forma chiusa, e le tabelle di regole sono scritte da un programma (a mano, per il primo innesto di moltiplicazione). Il file del modello di base non viene mai toccato. Ogni innesto viene aggiunto accanto.

Dentro l'innesto, per 38 + 47Leggere le cifre, applicare le regole, spingere la cifra giusta e lasciare che i due interruttori decidano quando la spinta è attiva. La spinta viene aggiunta allo strato 29 e il modello scrive 85.1Letturaprimo numero: 3, 8secondo numero: 4, 7cifre da scrivere: 22Regoleunità: 8 + 7 = 15scrivo 5, riporto 1decine: 3 + 4 + 1 = 83Scrittura1ª cifra della risposta:spinge 82ª cifra della risposta:spinge 54Interruttorispinta × interruttorion: in questa rispostaoff: altro testoVa allo strato 29. Il modello scrive 85. Dentro l'innesto, per 38 + 47Leggere le cifre, applicare le regole, spingere la cifra giusta e lasciare che i due interruttori decidano quando la spinta è attiva. La spinta viene aggiunta allo strato 29 e il modello scrive 85.1Letturaprimo numero: 3, 8secondo numero: 4, 7cifre da scrivere: 22Regoleunità: 8 + 7 = 15scrivo 5, riporto 1decine: 3 + 4 + 1 = 83Scrittura1ª cifra della risposta: spinge 82ª cifra della risposta: spinge 54Interruttorispinta × interruttorion: in questa rispostaoff: altro testoVa allo strato 29. Il modello scrive 85.
Dentro l'innesto, con 38 + 47 come esempio. La lettura trova 3, 8, 4 e 7, e che restano due cifre della risposta. Le regole danno 8 + 7 = 15, quindi la cifra delle unità è 5 con un riporto di 1, e la cifra delle decine è 3 + 4 + 1 = 8. Nella prima posizione della risposta l'innesto spinge 8, e in quella successiva spinge 5. La spinta è scalata per ogni posizione delle cifre. Due interruttori moltiplicano la spinta, così è attiva solo mentre il modello scrive la risposta a questo tipo di problema. Il modello scrive comunque la sua risposta da solo.

Come è cresciuto

Da un innesto a una pipeline

  1. Innesto di neuroniIl primo tentativo ha aggiunto 24 nuovi neuroni all'ultimo strato per fornire il riporto nell'addizione a due cifre. Ha retto sui problemi sigillati, +19.7 punti. Funzionava influenzando leggermente l'aritmetica del modello stesso, quindi il passo successivo era fare direttamente l'aritmetica.
  2. Circuito cablato a manoPer la moltiplicazione abbiamo scritto a mano le tabelle di regole e le abbiamo alimentate con le letture delle cifre fatte dal modello stesso. La prima versione ha ottenuto l'83.5% sui problemi riservati e sigillati, partendo dal 21.3%. Una seconda versione con interruttori migliori ha ottenuto l'83.1%, e il suo peggior cambiamento su altra matematica è stato di −0.75 punti.
  3. Regole trovate da un programmaUn programma di ricerca di regole ha ricevuto 340 problemi risolti, sotto forma di cifre e risposte. Per ogni cifra della risposta ha cercato il più piccolo insieme di input che la determina. Ha trovato da solo il riporto dell'addizione, il prestito della sottrazione e la catena di riporti della moltiplicazione. Ha anche scoperto che la cifra delle decine è la regola delle unità riusata sulle cifre delle decine, più un passaggio di riporto: una regola che serve più cifre, che è l'idea da cui tutto è partito. Il suo circuito di moltiplicazione ha ottenuto l'82.7% sul set riservato, a meno di mezzo punto da quello cablato a mano.
  4. Stessa pipeline, nuove abilitàLa sottrazione e l'addizione a due cifre sono passate per lo stesso script, con impostazioni copiate dalla moltiplicazione e nessuna regolazione. L'addizione a tre cifre ha richiesto tre correzioni, ognuna testata prima di aprire il suo set riservato: la lettura unita da tre strati, un secondo interruttore e una forza della spinta fissata per ogni posizione delle cifre.
Come funziona il programma di ricerca di regoleEntrano 340 problemi risolti. Per ogni cifra della risposta il programma trova il più piccolo insieme di input che la determina, scopre che la cifra delle decine riusa la regola delle unità più un riporto e compila le regole in tabelle di consultazione.340 problemi risolti38 + 47 = 8516 + 29 = 4552 + 31 = 83...Input minimi per cifra della rispostaunità ← le due cifre delle unitàdecine ← le due cifre delle decine+ riporto dalle unitàRegola delle unità, riusata un posto più suTabelle di consultazione8, 7 → 5, riporto 16, 9 → 5, riporto 12, 1 → 3, riporto 0... Come funziona il programma di ricerca di regoleEntrano 340 problemi risolti. Per ogni cifra della risposta il programma trova il più piccolo insieme di input che la determina, scopre che la cifra delle decine riusa la regola delle unità più un riporto e compila le regole in tabelle di consultazione.340 problemi risolti38 + 47 = 8516 + 29 = 4552 + 31 = 83...Input minimi per cifra della rispostaunità ← le due cifre delle unitàdecine ← le due cifre delle decine+ riporto dalle unitàRegola delle unità, riusata un posto più suTabelle di consultazione8, 7 → 5, riporto 16, 9 → 5, riporto 12, 1 → 3, riporto 0...
Il programma di ricerca di regole. Riceve 340 problemi risolti, sotto forma di cifre e risposte. Per ogni cifra della risposta trova il più piccolo insieme di input che la determina: la cifra delle unità dipende solo dalle due cifre delle unità. Scopre che la cifra delle decine riusa la regola delle unità più un riporto, e compila le regole in tabelle di consultazione. Le righe di esempio sono a scopo illustrativo.

Perché ha funzionato

Perché il programma ha potuto trovare le regole

Le regole non sono venute dal modello. Le ha trovate un programma separato, fuori dal modello, da 340 esempi risolti. Il compito del modello è fornire i numeri, che l'innesto legge dal suo stato nascosto. Quattro cose l'hanno reso possibile.

  1. Spezzare i problemi in cifreCome numeri interi, 7 × 48 = 336 è un fatto tra 720 problemi possibili. Spezzato in cifre, emerge uno schema: l'ultima cifra della risposta dipende solo dal 7 e dall'8. È stata la scelta più importante, e si adatta a SmolLM2, che memorizza ogni cifra come un token a sé.
  2. Cercare la spiegazione più semplicePer ogni cifra della risposta, il programma cerca il più piccolo insieme di cifre in ingresso che la determina sempre, e tiene una regola solo se vale su ogni esempio. Una regola basata su due cifre ha circa 100 voci possibili, e 340 esempi le riempiono quasi tutte, quindi funziona su problemi nuovi che riusano le stesse coppie. Memorizzare vorrebbe dire basarsi su ogni cifra in ingresso, con molte più combinazioni di quante 340 esempi possano coprire.
  3. Riusare ciò che aveva già trovatoPer la cifra successiva, riprova la regola delle unità e controlla se un segnale in più spiega ciò che resta. Quel segnale si è rivelato il riporto. Nessuno ha dato la parola al programma; ha trovato la variabile perché i dati ne avevano bisogno. Ripetere il passo per la cifra delle centinaia dà la catena dei riporti.
  4. Verificare su problemi mai vistiLe regole sono state provate su problemi che non avevano visto, poi compilate in tabelle di consultazione dentro l'innesto.

L'addestramento con gradiente non ha una spinta incorporata verso la spiegazione più semplice, e con pochi esempi ha memorizzato. Nella moltiplicazione, l'innesto a gradiente della stessa dimensione ha ottenuto il 72.7% sui propri problemi di addestramento e il 25.1% sui 140 problemi di sviluppo. Il circuito ha ottenuto il 94.7% sui problemi da cui è stato costruito e l'88.7% sugli stessi problemi di sviluppo.

La scomposizione in cifre l'abbiamo decisa noi, e il programma trova le regole al suo interno. Il prossimo passo verso abilità oltre l'aritmetica è un programma che trovi anche il modo giusto di scomporre un problema.

Risultati

Cinque abilità, su problemi su cui nessuno ha fatto regolazioni

I problemi riservati di ogni abilità sono stati messi da parte prima di costruire qualsiasi cosa, e niente è stato regolato su di essi. Ogni punteggio è su due seed e quattro esecuzioni per problema, con le stesse impostazioni di campionamento per il modello da solo e con l'innesto. Il set della moltiplicazione è stato aperto una volta per la prima versione cablata a mano, poi un'altra volta per le due finali.

Precisione sul set riservato, SmolLM2-135M

Quota di problemi con risposta esattamente giusta. 140 problemi per la moltiplicazione, 500 per gli altri.

  • Solo SmolLM2
  • Con l'innesto
  • Stesso innesto, collegamenti rimescolati
Moltiplicazione7 × 48, regole cablate a mano
21.3% → 83.1%+61.8
Moltiplicazione7 × 48, regole trovate da un programma
21.3% → 82.7%+61.3
Sottrazione, due cifre83 − 27, regole trovate da un programma
11.3% → 68.3%+57.1
Addizione, due cifre38 + 47, regole trovate da un programma
49.7% → 86.5%+36.8
Addizione, tre cifre347 + 285, regole trovate da un programma
26.1% → 83.7%+57.6
Gli stessi risultati in tabella
AbilitàProblemiSolo SmolLM2Con l'innestoGuadagno, punti (limite inferiore 95%)Collegamenti rimescolatiPesi aggiunti
Moltiplicazione, regole cablate a mano7 × 4814021.3%83.1%+61.8 (+56.1)2.4%25,2700.019%
Moltiplicazione, regole trovate da un programma7 × 4814021.3%82.7%+61.3 (+55.5)6.3%32,5190.024%
Sottrazione, due cifre83 − 2750011.3%68.3%+57.1 (+54.0)7.8%32,4460.024%
Addizione, due cifre38 + 4750049.7%86.5%+36.8 (+33.8)16.7%32,4760.024%
Addizione, tre cifre347 + 28550026.1%83.7%+57.6 (+54.6)21.4%121,1980.090%
  • Nessun peso originale è cambiato e non c'è stato addestramento con gradiente. Ogni innesto aggiunge da 25,270 a 121,198 pesi, dallo 0.019% allo 0.090% del modello. Il limite che ci eravamo dati era lo 0.1%.
  • Il controllo con collegamenti rimescolati è lo stesso innesto con i collegamenti mescolati a caso. Ha ottenuto un punteggio pari o inferiore al modello da solo in ogni abilità, dal 2.4% al 21.4%, quindi i pesi in più non fanno nulla senza le regole giuste.
  • I tre innesti a due cifre (moltiplicazione, sottrazione e addizione) funzionano anche insieme in un unico modello, 92,496 pesi in tutto. Ognuno ha mantenuto il suo guadagno sui problemi di sviluppo. Il peggior cambiamento su altra matematica è stato di −0.25 punti, e 200 prompt non correlati su 200 hanno dato la stessa risposta di prima.

I guadagni sono appaiati per problema, con un limite inferiore bootstrap unilaterale al 95%. Il controllo degli effetti collaterali copre altri otto set di aritmetica e di problemi descritti a parole, più GSM8K e codice. I prompt non correlati sono 200 prompt di IFEval, con risposte in decodifica greedy. Le regole e le previsioni di ogni esecuzione sono state messe per iscritto prima del suo risultato.

Contro l'addestramento con gradiente

Tre scontri diretti

L'addestramento con gradiente è il modo standard per aggiungere un'abilità, quindi l'abbiamo usato come concorrente. Ogni innesto a gradiente è stato regolato su una griglia di impostazioni prima del suo test.

Moltiplicazione, set riservato sigillato

140 problemi, 2 seed, 4 esecuzioni ciascuno. Il primo circuito cablato a mano contro due innesti addestrati con gradiente e regolati.

Solo SmolLM2
21.3%
Innesto a gradiente, stessa dimensione14 neuroni
25.6%
Innesto a gradiente al limite dello 0.1%77 neuroni
23.7%
Innesto di circuito25,270 pesi, senza gradiente
83.5%

Il circuito era avanti di 57.9 e 59.8 punti.

Moltiplicazione contro il fine-tuning LoRA

140 problemi di sviluppo, 2 seed, 4 esecuzioni ciascuno. LoRA ha usato la migliore impostazione trovata con una ricerca a griglia.

Solo SmolLM2
28.5%
Fine-tuning LoRA115,200 pesi addestrati
39.4%
Innesto di circuito25,270 pesi, senza gradiente
88.7%

49.3 punti di vantaggio, con un limite inferiore al 95% di +42.8, usando meno di un quarto dei pesi.

Sottrazione a due cifre

500 problemi di sviluppo, 2 seed, 4 esecuzioni ciascuno. Le impostazioni del circuito sono state copiate dalla moltiplicazione, senza regolazione.

Solo SmolLM2
11.35%
Innesto a gradiente, 14 neuroni
48.15%
Innesto a gradiente, 77 neuroni133,056 pesi, regolato
65.0%
Innesto di circuito32,446 pesi, nessuna regolazione
64.98%

Un pareggio con un innesto a gradiente grande quattro volte tanto, e circa 17 punti di vantaggio su quello da 14 neuroni.

Le regole di sottrazione del circuito sono venute da 340 problemi. Gli innesti a gradiente sono stati addestrati su 1,500, gli stessi 1,500 su cui sono state adattate le letture delle cifre del circuito.

Ancora in corso

Trapianti da modelli più grandi

Stiamo anche cercando di trasferire abilità da modelli più grandi. Nella nostra verifica Qwen3.5-4B ha risolto correttamente 300 su 300 di questi problemi di moltiplicazione, quindi abbiamo provato a tradurre un insieme dei suoi neuroni in SmolLM2. Separatamente, abbiamo mappato un segnale di correzione da Qwen3.5-4B a Qwen3.5-0.8B su problemi di aritmetica scolastici descritti a parole. Nessuno dei due ha ancora funzionato, ed entrambi restano aperti. Finora il modello più grande è stato utile soprattutto come guida per capire dove quello piccolo cede.

Cos'è un innesto

Una calcolatrice alimentata dalla lettura del modello stesso

L'innesto fa i calcoli da sé, partendo da numeri che il modello contiene già. SmolLM2 non impara a moltiplicare. L'innesto funziona sulla forma semplice della domanda ("Quanto fa 347 + 285?"), e gli interruttori lo tengono spento di proposito sui problemi descritti a parole. Per ora tutto questo riguarda un solo modello.

Il metodo si trasferisce a nuove abilità. Le regole vengono trovate da un programma a partire da 340 esempi, compilate in tabelle e inserite con le stesse impostazioni per ogni abilità. Il prossimo passo è il lato dell'apprendimento: far usare a SmolLM2 un fatto che gli viene dato nel prompt.