Passa ai contenuti principali

Post

Visualizzazione dei post da febbraio, 2025

Ovipari

Esiste un Easter egg nel Python associato al comando import this , che visualizza una raccolta di 19 aforismi scritti da Tim Peters, uno dei primi e più influenti sviluppatori di questo linguaggio.  L'originale uovo di Pasqua rappresenta un distillato della saggezza che Guido van Rossum, il creatore del Python, ha condiviso nel corso degli anni con la vasta comunità di sviluppatori.  Si tratta di una sorta di documento fondativo della Py-filosofia, denominato “The Zen of Python”.  Gli aforismi di Peters così come vengono mostrati nella mia console. Alcuni di essi possono essere considerati veri e propri koan.  Nel buddismo Zen, un koan è un paradosso su cui meditare, un enigma che apre la mente.  Allo stesso modo, gli aforismi dello Zen del Python sono paradossi illuminanti che guidano il cammino del programmatore. Bello è meglio che brutto – come il minimalismo di un giardino zen, il codice dovrebbe possedere una bellezza intrinseca, in cui ogni elemento è esa...

Il Python non è il Python: è il ragionare

(Parafrasando il pensiero del professor Carmelo Franzò, l'essenza rimane la stessa) Imparare un linguaggio di programmazione, a qualsiasi età, significa molto più che acquisire competenze tecniche. Il vero valore formativo del coding risiede nella correzione (debugging) degli eventuali errori contenuti nel codice (bug). Immagina di aver scritto uno script (poche righe) in Python e di ottenere un risultato indesiderato (errore semantico). Per comprendere l’origine del problema, devi riesaminare ogni tua premessa: si tratta di un potente esercizio metacognitivo, poiché implica un’analisi critica del proprio pensiero. E poi la programmazione affina abilità trasferibili a innumerevoli contesti. Chi impara a togliere i bug può applicare lo stesso approccio metodologico alla fisica, all'economia, all'analisi letteraria e perfino alla dimensione esistenziale, ponendosi domande del tipo: “Ho un problema?”, “Qual è esattamente il mio problema?”, “Quali ne sono le cause?”, “Quali ...

Informazioni latenti

La stima fornita dal modello Claude 3.7 Sonnet rappresenta un tentativo “artigianale” di ricavare la magnitudo locale (ML) da un singolo tracciato e deve essere interpretata con grande cautela.  I passaggi numerici non seguono il metodo standard per il calcolo della scala Richter (o, più correttamente, della magnitudo locale) per almeno cinque motivi principali: Manca la correzione strumentale: le letture provengono da uno strumento che non è un Wood-Anderson e non è stata applicata alcuna compensazione. La distanza epicentrale è stata calcolata in modo troppo semplificato e senza la triangolazione con altre stazioni di rilevamento. In pratica, non posso sapere dove si trova l'epicentro sulla cartina geografica. Non è considerata l’attenuazione reale con la distanza: il valore utilizzato andrebbe sostituito da quello ricavato da curve che tengano conto anche della natura geologica del luogo. Non è chiaro che tipo di segnale è stato registrato: non sappiamo se il sismogramma rappres...

Verso i chip

La potenza del linguaggio SPICE risiede nella sua capacità di descrivere, in poche righe, anche circuiti complessi, che richiederebbero molto più tempo per essere costruiti graficamente. Grazie a SPICE, è possibile effettuare simulazioni accurate a livello di transistor, passaggio fondamentale prima di tradurre il design in un linguaggio come VHDL e implementarlo su FPGA o ASIC (chip dedicati). Un esempio concreto di questo approccio è lo sviluppo di un contatore modulo 4 basato su flip-flop JK, realizzato interamente da zero, senza ricorrere a componenti di libreria.  Il progetto è stato portato avanti in modo iterativo, mediante una “raffica” di prompt che ha permesso di identificare e risolvere alcuni errori generati dall’IA. Grazie a questa metodologia, ogni fase della progettazione è stata affrontata in modo sistematico e suddivisa nei passaggi seguenti: D efinizione dei modelli MOSFET , ottimizzati per garantire simulazioni affidabili. Implementazione delle porte NAND a due ...

CNN e Viterbi: presente e passato (passato che ancora sopravvive)

Esiste un nesso tra l’algoritmo Viterbi e le CNN? La risposta è Sì. Un nesso unicamente concettuale, dal momento che entrambi operano su sequenze di dati cercando pattern e dipendenze. L'algoritmo Viterbi opera su una sequenza temporale di simboli/stati, trovando il percorso a massima verosimiglianza all’interno del famoso trellis (diagramma che rappresenta graficamente l'evoluzione temporale degli stati possibili di un sistema).  È essenzialmente un algoritmo per decodificare sequenze codificate con codici convoluzionali. Le CNN, sebbene tipicamente associate all'elaborazione di immagini, possono essere viste come un modo per estrarre caratteristiche gerarchiche da sequenze di dati spazialmente correlati attraverso operazioni di convoluzione. Il nesso si rafforza quando consideriamo le CNN-1D (monodimensionali) che operano su sequenze temporali, proprio come l'algoritmo di Viterbi. In questo caso i kernel scorrono lungo la sequenza dei dati e si comp...

Impariamo a costruire le nostre foreste

Possiamo paragonare l'algoritmo Isolation Forest alla struttura ad albero del prompting, ma con un'importante differenza: mentre l'Isolation Forest isola le anomalie con split casuali, il nostro albero delle domande al chatbot viene generato dalle suddivisioni guidate da risposte e criteri decisionali specifici.  Come vediamo nel grafo, dal prompt iniziale P0  “Cos'è l'Isolation Forest e come rileva le anomalie?” otteniamo una risposta R0 che spiega i tre principi fondamentali: l'isolamento attraverso partizioni ricorsive, il principio di facilità di isolamento delle anomalie e l'utilizzo della struttura ad albero. Il punto decisionale D1 è cruciale: valuta se la risposta chiarisce il funzionamento base dell'algoritmo.  In base a questa valutazione, possiamo procedere con l'esplorazione dell'implementazione attraverso tre percorsi principali: P1-A per il real-time, P1-B per il batch, o P1-C per l'approccio ibrido. La topologia dell'...

Gli occhi del modello CNN

Un modello CNN ha un “cervello” (la rete neurale) e gli occhi (i kernel convoluzionali).  La scelta di quest’ultimi può influenzare drasticamente la qualità dell’output. Il kernel determina come la rete “vede” e processa i dati.  Immaginate una finestra scorrevole che cattura pattern locali nei dati. Nel contesto dei segnali sismici, ad esempio, un kernel più ampio può catturare meglio i pattern a bassa frequenza, mentre uno più piccolo esalta i dettagli ad alta frequenza. Dimensione del kernel Kernel piccoli (3x3 o 1x3): catturano dettagli fini e sono computazionalmente efficienti Kernel medi (5x5 o 1x5): bilanciano dettaglio e contesto Kernel grandi (7x7 o superiori): catturano pattern più ampi ma richiedono più risorse Trade-off Kernel più grandi → campo ricettivo più ampio ma più parametri da addestrare Kernel più piccoli → più efficienza ma necessitano di più layer per lo stesso campo ricettivo Applicazione specifica Analisi di segnali sismici: kernel di dimensione 3-5 pe...

Fast Seismic Autoencoder

L'analisi e la ricostruzione di segnali sismici rappresenta una delle grandi sfide del deep learning, specie quando si ha a che fare con sequenze temporali molto lunghe. In questo esperimento ho scelto un approccio ottimizzato per processare sequenze sismiche di 12.000 punti attraverso un autoencoder basato su reti neurali convoluzionali (CNN). Il dataset iniziale conteneva 10.000 sequenze sismiche rese disponibili dai ricercatori dell'INGV (dataset INSTANCE), che colgo l’occasione per ringraziare, ciascuna composta da 12.000 punti temporali. L'approccio tradizionale utilizzando LSTM bidirezionali si è rivelato, sul mio sistema, computazionalmente oneroso e molto lento, principalmente a causa della natura sequenziale del processing LSTM su sequenze così lunghe. Per superare queste limitazioni, ho selezionato una nuova architettura che sfrutta tre componenti chiave: Compressione CNN: due layer convoluzionali con stride=2 per ridurre la dimensionalità della sequenza di un fat...

The two moons experiment

L’approccio con l’autoencoder LSTM del post precedente è stato troppo brusco, anche perché non è facile valutarlo su un dataset con molte feature (caratteristiche). Per ogni timestamp, il “quando” di ogni sequenza temporale (non il “quanto”), abbiamo un certo numero di parametri n (non riducibili perché essenziali) per ogni scossa di terremoto che, se intensa, può durare anche 30 secondi e oltre. La frequenza di campionamento media è oggi di 100 Hz e facendo due calcoli triviali si arriva a dover considerare, senza una riduzione dimensionale, per ogni sequenza, una matrice (100x30) righe per n colonne.   Per l’addestramento occorrono decine o centinaia di migliaia di queste sequenze. Esiste un approccio didattico più soft all’utilizzo di queste reti neurali che ricostruiscono l'input attraverso uno spazio latente compresso, ampiamente descritto nella letteratura tecnica e denominato “L’esperimento delle due lune”. La sua preparazione inizia con la generazione del dataset media...

Nome in codice Foresta

Prevedere gli eventi sismici costituisce una delle sfide più complesse della sismologia moderna. Il deep learning, grazie anche all’ormai enorme quantità di rilevazioni, suggerisce nuovi approcci all’identificazione e all’analisi delle anomalie sismiche; così, negli ultimi anni, si è passati dai metodi statistici tradizionali all'adozione di algoritmi molto sofisticati basati sulle reti neurali. Ho analizzato alcune possibili soluzioni all'identificazione di pattern anomali implementabili con PyTorch come framework principale, ovviamente non definitive vista la complessità del problema. Basandomi su dati reali di eventi sismici, ho testato una soluzione PoC che combina l'Isolation Forest con autoencoder LSTM. Questi, in sintesi, i risultati dell’esperimento: L'Isolation Forest: Sfruttando il principio dell'isolamento, individua le principali anomalie nei dati che poi vengono rimosse nel dataset di addestramento Riduce il rumore di fondo per successive analisi...

Ti proibisco!

Nel dibattito sull'intelligenza artificiale che sta infiammando il web emergono tre posizioni: i proibizionisti che vorrebbero vietarne l'uso, i permissivisti che ne promuovono l'adozione incondizionata, e i temporeggiatori che rimangono in attesa, forse sperando di bissare i successi ottenuti contro Annibale. Semplicemente va insegnato che l'IA, in tutte le sue forme, deve assumere unicamente un ruolo di supporto alle attività umane, come quello del dottor Watson accanto a Sherlock Holmes. In “Il mastino dei Baskerville”, Sherlock Holmes elogia il dottor Watson per la sua capacità di stimolare la genialità altrui, affermando: “ Può anche darsi che lei non brilli di luce propria, però ha la capacità di esserne un buon conduttore.  Ci sono persone che, pur non essendo geniali, hanno lo squisito potere di stimolare negli altri la genialità. ” L'approccio più costruttivo non è chiedere risposte preconfezionate all'IA, ma utilizzarla come strumento di confronto i...

Fine-tuning

Nel mio post precedente ho discusso la possibilità di valutare l'efficacia del fine-tuning.  Ho quindi ripreso il modello, già addestrato su diverse attività testuali, per perfezionarlo in un compito specifico: la generazione di descrizioni e riassunti. Il fine-tuning va fatto con un learning rate relativamente basso (1e-4) per adattare con attenzione i pesi pre-addestrati senza distruggere la conoscenza esistente del modello. Quando ChatGPT si diffuse in Italia all'inizio del 2023, probabilmente ogni studente sognava di utilizzarla per farsi riassumere gli argomenti delle verifiche.  Ancora oggi, però, per molti le capacità dell'intelligenza artificiale generativa rimangono un mistero.  Chi cerca di approfondire l'argomento si trova spesso a dover interpretare una terminologia tecnica complessa e poco “inclusiva”. Un esempio è il concetto di “transfer learning”, che possiamo immaginare come il trasferimento di conoscenze da un modello addestrato a un altro.  Tuttavi...

La rete neurale ha la febbre

Immaginiamo una rete neurale che impara a rispondere alle domande leggendo dei testi, proprio come fa uno studente che studia a casa per poi rispondere all’interrogazione.  Il cuore del sistema è, come nel penultimo post, un transformer. Per addestrarlo ho utilizzato un dataset basato su una raccolta di articoli Wikipedia. Il processo di addestramento simula l'insegnante che corregge le cose dette dallo studente: legge domanda e contesto, genera una risposta, effettua delle verifiche e aggiusta i pesi della rete neurale.  Questo è reso possibile dalla seguente ripartizione dei dati: il 90% per il training e il 10% per la validazione. Il test che ho preparato è parametrico rispetto alla temperatura di generazione delle risposte, come mostrato dall'output copiato direttamente dalla console: Question:  Explain why Rome is considered the capital of Italy and its historical significance. Temperature 0.7: pivotal throughout history Temperature 1.0: pivotal throughout histo...

CoT

La Chain of Thought (CoT) è un processo cognitivo sequenziale che spesso sviluppiamo in modo automatico per risolvere i problemi.  Di recente è stato svelato per i modelli reasoning di IA generative, come il modello ChatGPT o3-mini-high. È sufficiente selezionare la freccetta accanto alla durata del ragionamento per visualizzare l'intero percorso che ha portato il chatbot a formulare la risposta. Da un esame accurato di diversi percorsi emergerebbe la seguente struttura ripetitiva della catena di pensiero.  Fase di comprensione Identificazione degli elementi chiave del problema Riconoscimento delle variabili rilevanti Contestualizzazione dell'input Definizione degli obiettivi Fase di decomposizione Suddivisione del problema in sotto-problemi, detti componenti, più gestibili (approccio divide et impera)  Identificazione delle relazioni tra i sotto-problemi Individuazione di una sequenza logica di risoluzione Prioritizzazione degli elementi Fase di elaborazione Applicazion...

Allevando pappagalli

Un chatbot con la capacità di generalizzare riesce a rispondere efficacemente a una vasta gamma di input e argomenti, anche quelli non presenti nel dataset di addestramento. È davvero emozionante avere la conferma sperimentale di come un modello transformer di IA generativa  –  del tipo ChatGPT, tanto per intenderci, ma che non necessita della connessione a Internet  –  riesca a produrre risposte coerenti alle domande che gli vengono poste.  Si ha quasi la sensazione di aver dato la vita al codice Python (il linguaggio più utilizzato in ambito scientifico), forse con lo stesso stupore dei ricercatori che per primi testarono, con successo, l'architettura descritta nel celebre paper “Attention is All You Need”, frutto della collaborazione di otto menti brillanti. La loro innovazione è stata una rivoluzione in ambito informatico, introducendo modelli parallelizzabili eseguibili su cluster di GPU. Ma il mio umile chatbot ha davvero raggiunto una vera gener...

Un problema di coscienza

Riporto integralmente un mio post di qualche mese fa, pubblicato sullo Sway “Il cigno nero dell'intelligenza artificiale”, perché tratta un tema recentemente tornato di attualità, visti i progressi di ChatGPT e dei chatbot similari. Il fisico teorico e cosmologo Max Tegmark nel suo libro Vita 3.0 riprende alcune conclusioni della teoria dell'informazione integrata (Integrated Information Theory) del neuroscienziato Giulio Tononi per investigare la natura della coscienza. Secondo l'IIT, la coscienza è una proprietà emergente dei sistemi complessi che sono in grado di integrare molte informazioni diverse (sono molto interessanti gli esempi reali di questa proprietà riportati nell'opera di Tegmark). Questa teoria suggerisce un metodo per quantificare la coscienza di alcune tipologie di sistemi artificiali, a condizione che integrino informazioni in un modo particolare. In pratica, si sta affermando che oltre agli esseri umani, in futuro, anche l'intelligenza artificial...

La rete neurale prende forma 3D

Anche se negli ultimi anni abbiamo assistito a un uso pervasivo delle reti neurali in molti ambiti, la loro rappresentazione concettuale rimane confinata a pochi grafici statici, generati frettolosamente dall'IA stessa, che meritano appena la sufficienza. Probabilmente, il fattore tempo, in un'era in cui il tempo deve essere denaro, ha giocato un ruolo determinante in questa scelta grafica ormai universalmente accettata.  Il mio pensiero di assestamento, in questo caso, è durato un po' più del solito e mi ha fatto immaginare un “porting sacrilego” del codice utilizzato per i test già descritti in questo blog nell'ambiente 3D di Blender in modo da creare una sorta di ologramma dei neuroni e dei loro collegamenti sinaptici, che si attivano e disattivano dinamicamente.  La cosa straordinaria di questo esperimento è che il codice Python necessario per creare la classe derivata di un'architettura composta da tre layer, con rispettivamente 8, 16 e 2 neuroni, si è integrat...

xXy

Di recente ho esaminato più a fondo una rete neurale Multi-Layer Perceptron (MLP) progettata per prevedere i risultati della moltiplicazione di numeri float nell'intervallo [0, 10).  Segue il report relativo a un addestramento con 12000 esempi e 80000 epoche. Epoch [80000/80000], Loss: 0.0005 input // Val. generato  // Val. vero x = 1.00, y = 1.00 // 0.97 // 1 x = 4.50, y = 0 // -0.06 // 0 x = 2.00, y = 8.20 // 16.39 // 16.40 x = 125.00, y = 12.20 // 261  // 1525 Questo è stato il mio “pensiero di assestamento”. Gli umani, tipicamente: iniziano memorizzando le tabelline; imparano strategie su come scomporre numeri grandi (24 x 3 = 20 x 3 + 4 x 3); associano la moltiplicazione all'addizione ripetuta; sviluppano scorciatoie mentali (x10 = sposta virgola, x5 = metà di x10); possono visualizzare la moltiplicazione in modo geometrico. La rete neurale invece: non memorizza alcun risultato, ma individua pattern nei dati; non usa regole esplicite o strategie logiche; apprende at...

Le figure Lissajous simulate con GeoGebra

Le figure di Lissajous si ottengono combinando due moti armonici lungo gli assi perpendicolari dell'oscilloscopio e possono essere simulate anche con GeoGebra mediante curve parametriche come mostrato nello screenshot. I parametri sono: b, rapporto di pulsazioni; A rapporto di ampiezze;  φ  sfasamento . Nel comando Curva, così come nelle equazioni, vengono riportati i valori impostati mediante gli slider collegati a questi parametri. L'evoluzione delle forme viene mostrata nel video sia variando “a mano” la posizione dei selettori, che attivando la pratica funzione di animazione.

Lissajous

7 In passato la magia si manifestava sulla superficie verdognola degli schermi a tubi catodici.  Negli oscilloscopi analogici, che sono testimoni di un'epoca ormai passata, le figure di Lissajous tracciavano i loro complessi schemi luminosi, catturando l'attenzione degli studenti increduli.  Nel laboratorio di fisica degli anni '70 e '80 il tempo sembrava scorrere più lento. Nell'aria si poteva annusare l'odore prodotto dai circuiti elettronici e dalla polvere riscaldati dalle valvole termoioniche. Fu proprio lì che molti di noi videro per la prima volta le figure di Lissajous.  Non erano semplici tracciati su uno schermo, ma finestre su un mondo matematico nascosto, rivelazioni di armonie segrete che governano l'universo delle onde.  Collegando due generatori di segnale rispettivamente al canale X e Y dell'oscilloscopio e regolando le manopole di posizione, scala e il focus, apparivano, come per incanto, sullo schermo forme ipnotiche: un cerchio diventa...