La domanda era proprio cosa significa programmare con tecniche statistiche.
Significa utilizzare tecniche statistiche (raccolta dati, regressioni lineari, medie, analisi delle frequenze, analisi dei cluster, riduzioni della dimensionalità, etc...) per produrre un software eseguibile da una specifica macchina. La programmazione classica consiste nell'esprimere un algoritmo in una forma eseguibile dalla macchina. Un tempo si foravano le schede, oggi si esprime l'algoritmo in un linguaggio sufficientemente rigoroso da poter essere tradotto meccanicamente nella forma eseguibile dalla macchina. La sostanza non cambia. La programmazione statistica funziona diversamente. Ad esempio, per programmare una Vector Reducing Machine (quella che tu chiami "rete neurale artificiale") la cui topologia permette di mappare una matrice N-dimensionale verso una M-dimensionale - si raccoglie il dataset sorgente - ne si codifica gli elementi come vettori numerici attraverso una analisi statistica - si riduce la dimensionalità del dataset sorgente (selezionando e/o sintetizzando le feature da utilizzare attraverso tecniche statistiche) fino ad ottenere le N dimensioni da utilizzare in input (e le M dimensioni con cui confrontare l'output) - si carica nella VRM un programma che può essere - casuale quando si inizializzano le matrici per la prima volta - noto, se si decide di partire da un eseguibile "pre-trained" E' utile notare che a questo punto la VRM è già in grado di eseguire il programma (quello che tu chiami impropriamente "modello"), mappando i record N-dimensionali del dataset in record M-dimensionali. Tipicamente però questi record output sono inutili o poco utili per cui inizia una fase di compilazione del dataset: si utilizzano iterativamente le righe del dataset per alterare i valori nelle matrici riducendo pian piano l'errore statistico fra il risultato M dimensionale ottenuto dando in input alla VRM ogni record e quello desiderato, attraverso un processo di ottimizzazione statistica chiamato backpropagation. Alla fine del processo la VRM mappa i vettori N dimensionali di ingresso nei vettori M dimensionali di interesse entro un errore accettato. A quel punto si salva l'eseguibile codificato dalle matrici della VRM così da poterlo successivamente rieseguire con qualsiasi VRM che implementi la stessa topologia. Le matrici che tu chiami "modello" codificano un'eseguibile che tutte (e solo) le VRM con quella determinata topologia possono eseguire e nessuno può interpretare. Tale eseguibile è una codifica compressa con perdita di informazione del dataset sorgente che è stato compilato per produrlo, esattamente come i l'eseguibile di un kernel è una codifica compressa con perdita di informazione dei testi sorgente che sono stati compilati per produrlo.
I parametri del modello (i contrnuti delle matrici), vengono calcolati attraverso l’ottimizzazione della loss function sui dati di apprendimento (sempre dati sono).
La distinzione fra software e dato non ha fondamento informatico. Ogni dato è software eseguibile da almeno una macchina programmabile. Puoi infatti facilmente costruire una macchina programmabile che avanza il proprio program counter se riceve in input il byte corrente del proprio programma e si ferma altrimenti. Caricando su questa macchina i byte di un qualsiasi eseguibile x86, questa inizierà ad eseguirlo e fintanto che gli fornirai in input esattamente quegli stessi byte, in ordine, uno alla volta, mentre si fermerà altrimenti. Ma se gli carichi i byte di una foto, sostituendo il suo programma, e poi provi a passargli in input i byte dell'eseguibile x86 usato in precedenza, quella si fermerà, perché è cambiato il suo programma. Se invece gli passi in input i byte della foto, in ordine e uno alla volta, lei continuerà a lavorare come da programma. Caricagli sopra un film o un testo, e farà la stessa cosa con i rispettivi byte. La foto, il film e il testo diventano infatti software eseguibili per questa ipotetica macchina. E non credo di doverti dimostrare che per qualsiasi dato esistono infinite macchine programmabili in grado di eseguire tale dato. Dunque, dimostrato che ogni dato è codifica un eseguibile per infinite macchine virtuali, non dovrebbe sorprenderti che quella che tu chiami "rete neurale artificiale" altro non sia che una macchina in grado di eseguire determinati programmi, codificati sotto forma di matrici numeriche di dimensionalità compatibile.
La rete neurale implementa il modello direttamente, non in due fasi.
Il problema è che ciò che tu chiami "rete neurale artificiale" in realtà è la composizione di due software che vengono implementati e distribuiti separatamente. Il primo software, la macchina virtuale in grado di eseguire qualsiasi insieme di matrici che rispettino le dimensionalità previste dalla topologia scelta, viene programmata esplicitamente, in un linguaggio di programmazione come C, Python, R etc... ed eseguita da un hardware noto (che a sua volta può essere virtuale, come la JVM, o virtualizzato come avviene con QEMU, per intenderci). Il secondo software, è codificato dalle matrici programmate statisticamente con il processo che ho grossolanamente descritto sopra e viene eseguito dal primo software (la macchina virtuale). Il fatto che siano software diversi, oltre che ovvio, è evidente dal fatto che possono essere versionati e distribuiti separatamente nonché sviluppati da gruppi distinti ed indipendenti. Le Vector Reducing Machines sono macchine programmabili estremamente flessibili, in grado di mappare approssimativamente spazi vettoriali qualsiasi indipendentemente dal loro significato, dall'esistenza di una relazione reale etc... Ma il discorso vale per qualsiasi software programmato statisticamente, come ha già mostrato Antonio in questo thread con llama.cpp https://server-nexa.polito.it/pipermail/nexa/2024-September/053196.html Finché continueremo a con-fonderli (conflating) saremo costretti a descrizioni fantasiose e antropomorfe come "intelligenza artificiale" e crederemo che "apprendano" (subendo una inquietante alienazione), mentre le stiamo semplicemente programmando tramite tanti esempi.
Certo, intendevo chi li allena non usa tecniche statistiche perché non fa assunzioni statistiche sulla struttura dei dati da cui poter estrarre un campione rappresentativo: utilizza tutti i dati disponibili indistintamente. [...]
Non proprio, non viene fatta una scelta basata su criteri statistici.
Questo non è vero in generale per le Vector Reducing Machines (già la semplice scelta delle dimensioni rilevanti esprime assunzioni statistiche) ed è veramente ingenuo crederlo per le AI generative commerciali. Prendi banalmente GitHub CopyALot: pensi davvero che misure statistiche come il conteggio delle issue o il conteggio dei fork non abbiano avuto rilevanza del processo di programmazione statistica? Che il kernel di Linux abbia lo stesso peso del codice C scritto da migliaia di studenti alle prime armi?
Per i LARGE LM si usano quanti più dati possibile, al massimo si fa una deduplicazione.
Che è una analisi statistica, così come lo è l'analisi utilizzata per determinare i token da usare nel vocabolario, etc...
Infatti una calcolatrice non impara: non saprebbe fare altre operazioni oltre a quelle per cui è stata programmata.
Neanche una Vector Reducing Machine sa fare altre operazioni oltre alla mappatura fra spazi vettoriali codificata nelle matrici risultanti dal processo di programmazione statistica. Nelle intenzioni di chi la programma, quella mappatura dovrebbe approssima una funzione esistente fra dominio e codominio. Ma il fatto che riesca a fornirci un output a fronte di input non presenti nel dataset sorgente, non significa che abbia "imparato" a fare altre operazioni: semplicemente esegue meccanicamente l'eseguibile che gli viene caricato su qualsiasi input, indipendentemente dal suo significato. Infatti, se gli carichi un eseguibile costituito da matrici casuali, continuerà comunque a produrre un output.
Se dicessi in una conferenza che la frutta "apprende" come comportarsi da marmellata, tutti riderebbero fragorosamente. :-D
Quale sarebbe l’analogia umana di un tale forma di apprendimento?
Ero ironico. Se possiamo dire che una VRM impara mentre la programmi, allora possiamo dire anche che la frutta impara mentre la mescoli. Le due affermazioni hanno la stessa validità scientifica. Giacomo