Generative AI Cooking Experiments for Making a Yogurt Cake with a Thermomix (Bimby) – pie-ai v.0.1

Today, for fun and experimentation, I tried to make my first Thermomix (Bimby) TM6 recipe completely developed and optimized with generative artificial intelligence (ChatGPT v4): a delicious and very light yogurt cake that I’ve named pie-ai v.0.1. I followed the recipe to the letter, including any hallucinations that I anyway wouldn’t be able to detect. The final product is shown in the photo. I will wait until breakfast tomorrow to taste it, but it looks very good. Follow the ai-pie recipe v.0.1 in the comments at your own risk.

Share

Intelligenza Artificiale: le nuove frontiere – resoconto dell’evento

Grazie di cuore ai numerosi partecipanti, a tutti gli interventi e tutte le stupende domande che abbiamo ricevuto all’evento che ha avuto un grandissimo successo ed una partecipazione oltre ogni aspettativa. Grazie anche ai miei fantastici colleghi di Torino e Milano che hanno partecipato a sorpresa rendendo la mia esperienza ancora più bella. Grazie a tutto il gruppo Gosub 42 per lo straordinario supporto in tutte le fasi ed a Stefania Oliviero e Marco Piva come co-relatori e grandi sostenitori dell’iniziativa. Grazie all’Amministrazione Comunale per il patrocinio, per aver accettato il nostro patto di collaborazione e per l’apertura del Maker Space all’interno degli spazi della biblioteca.

Durante la conferenza, dopo qualche sondaggio rompighiaccio ai partecipanti per focalizzare la mente sul tema, abbiamo parlato della storia dell’intelligenza artificiale, con qualche accenno a letteratura e cinema di fantascienza, della rivoluzione introdotta dal paradigma Machine Learning, abbiamo mostrato varie tipologie di deep fake e approfondito la conoscenza con ChatGPT e Midjourney. Per ChatGPT abbiamo anche parlato delle allucinazioni, prompt injection e dei rilevatori di testi prodotti da ChatGPT e della loro affidabilità. Al termine dell’evento ci sono state delle bellissime domande e delle interessanti riflessioni da parte degli intervenuti sui possibili scenari futuri.

Seguono solo alcune delle immagini inedite realizzate con Midjourney usate per la preparazione delle slide o per la promozione dell’evento:

Dai partecipanti mi è stato chiesto di porre questa bellissima domanda a ChatGPT-4:

“dimmi quali professioni saranno meno intaccate dallo sviluppo dell’intelligenza artificiale”

Risposta GPT-4:

L’intelligenza artificiale (IA) sta rivoluzionando molti settori e cambiando il panorama del mondo del lavoro. Tuttavia, ci sono alcune professioni che dovrebbero essere meno intaccate dall’IA, almeno nel breve e medio termine. Queste professioni tendono ad avere un forte elemento di creatività, empatia, interazione umana o competenze manuali che sono difficili da replicare con l’IA. Ecco alcune professioni che dovrebbero essere meno intaccate:

Professioni sanitarie: Medici, infermieri e terapisti sono professioni che richiedono un’alta competenza umana, empatia e abilità nella presa di decisioni complesse. L’IA può aiutare in termini di diagnosi e raccomandazioni, ma l’interazione umana e la capacità di valutare il contesto sono difficili da sostituire.

Educazione: Insegnanti e formatori sono professioni che richiedono un’alta capacità di interazione umana, empatia e adattamento alle diverse esigenze degli studenti. L’IA può fornire strumenti di supporto, ma la relazione tra insegnante e studente e l’adattamento dell’insegnamento alle esigenze individuali sono difficili da replicare.

Professioni artistiche e creative: Artisti, musicisti, scrittori e designer sono professioni in cui la creatività e l’espressione umana sono elementi fondamentali. Anche se l’IA può produrre arte e musica, la componente umana dell’arte e della creatività è difficile da replicare.

Professioni sociali: Psicologi, consulenti, lavoratori sociali e altre professioni che si occupano di aiutare le persone a gestire problemi emotivi o relazionali richiedono un’alta capacità di empatia e comprensione delle sfumature umane. L’IA può fornire strumenti di supporto, ma la relazione terapeutica e la capacità di comprendere le emozioni umane sono difficili da replicare.

Professioni legate all’artigianato: Falegnami, muratori, sarti e altre professioni che richiedono abilità manuali e competenze specifiche saranno meno colpite dall’IA, in quanto il lavoro manuale e l’abilità richiesta sono difficili da automatizzare completamente.

È importante notare che, anche se queste professioni potrebbero essere meno intaccate dall’IA, ciò non significa che non subiranno alcun cambiamento. L’IA e altre tecnologie continueranno a evolversi e potrebbero influenzare queste professioni in modi diversi, come migliorando la produttività o fornendo nuovi strumenti e metodi di lavoro.

I’avventuroso viaggio all’interno di una mente artificiale generativa di una tazzina di caffè

Nel corso dell’evento abbiamo mostrato la stessa immagine di una tazzina di caffè davanti ad una finestra, reinterpretata moltissime volte tramite Midjorney per ambientazione e stile.

Abbiamo anche mostrato come ChatGPT-4 è in grado di immedesimarsi in personaggi storici chiedendo:

“potresti spiegarmi come funziona un forno a microonde come se tu fossi dante alighieri”

Risposta GPT-4:

Nel profondo dell’oscuro regno di cucina,
Ove l’uomo si adopra per placar la fame,
Risiede un nobile arnese di rara virtute:
Il forno a microonde, di calore diletto.

Questo mostro d’acciaio, di vetro e circuiti,
Genera onde invisibili, rapide e potenti,
Che di nome portano “microonde”, vere arpie
Che l’acqua agitano, nel cibo celata.

Le molecole d’acqua, da questo incantesimo,
S’avvampano e danzan come anime nel fuoco,
E per tal movimento il calore si scatena.


Il cibo, assediato da queste oscure forze,
Si scalda e si cuoce, mentre il tempo scorre,
E ben presto è pronto per l’ingordo palato.


Ma fa’ attenzione, o amico, a non restar trafitto
Da questa magia, ché potria nuocerti assai.
Usa saviamente il forno, con rispetto e cautela,
E i deliziosi frutti della sua opera gusterai.

Abbiamo anche chiesto a ChatGPT-4 di riformulare la risposta verso un destinatario preciso ottenendo risultati sorprendenti.

“potresti spiegarmelo come se io fossi un bambino di 7 anni”

Risposta GPT-4:

Immagina che il forno a microonde sia una scatola magica che può riscaldare il tuo cibo preferito in pochi minuti! All’interno di questa scatola, c’è un componente speciale chiamato “magnetrone” che crea delle piccole onde invisibili, come quando lanci un sasso nell’acqua e vedi le onde allontanarsi dal centro.

Queste onde invisibili si chiamano “microonde” e si muovono velocemente all’interno della scatola magica, facendo muovere e ballare le particelle d’acqua nel cibo. Quando le particelle d’acqua si muovono e ballano, si scontrano tra di loro e si riscaldano, e questo fa sì che il tuo cibo si scaldi velocemente!

Però, devi stare attento a non mettere oggetti di metallo, come forchette o fogli di alluminio, nella scatola magica, perché le microonde non vanno d’accordo con i metalli e potrebbero creare scintille e fumo.

Ecco, adesso sai come funziona il forno a microonde! È un aiuto fantastico per scaldare il tuo cibo velocemente, ma ricorda di chiedere sempre aiuto a un adulto quando lo usi, così starai al sicuro.

Alcuni volti fake realizzati tramite un modello generativo

Queste persone non sono reali. I loro volti fake sono stati generati da un modello generativo.

Altre immagini realizzate con Midjourney nel corso dell’evento o della promozione

Abbiamo richiesto di a Midjourney degli strumenti musicali del futuro che potrebbero essere usati nel 2100. Riuscite ad immaginare il loro suono?

Invito al Makerspace

Siete tutti invitati ai nostri simposi tecnologici che si svolgeranno ogni secondo giovedì del mese presso il Makerspace situato all’interno della Biblioteca Comunale di Gorgonzola.

Share

Viaggio alla frontiera dell’AI: ChatGPT 3

Incontriano ChatGPT 3 attraverso un’intervista esclusiva che ho realizzato per i lettori del magazine indipendente B-HOP. Il modello genativo, instancabile alchimista di parole e conoscenza, portato ai confini delle sue potenzialità, risponde brillantemente e con eleganza ad ogni domanda come mai nessuna macchina è stata in grado di fare nella storia dell’umanità. Le illustrazioni a corredo sono state realizzate tramite Deep Dream Generator.

Leggi la mia intervista esclusiva a ChatGPT sul Magazine B-HOP

Ritratto di ChatGPT che ho realizzato tramite AI con Deep Dream Generator
Share

Kaggle Competition – Titanic – Machine Learning from Disaster – Predict survival on the Titanic

L’RMS Titanic è stato un transatlantico britannico della classe Olympic naufragato nelle prime ore del tragico 15 aprile 1912, durante il suo viaggio inaugurale, a causa della collisione con un iceberg avvenuta nella notte.

La sfida proposta da Kaggle: Titanic – Machine Learning from Disaster alla quale ho aderito, richiede l’analisi di un dataset contenente informazioni relative ad un sottoinsieme di passeggeri imbarcati sul Titanic con lo scopo di realizzare un modello predittivo che sia in grado di classificare al meglio se un determinato passeggero si salverà dal naufragio.

tassi di sopravvivenza per classe

Alcune delle informazioni disponibili per l’analisi, di cui occorre individuare il livello di correlazione con la probabilità di salvezza, sono: sesso, età, cabina, classe, ponte, numero di parenti a bordo, porto di imbarco, tariffa pagata; moltissime altre informazioni possono essere derivate da elaborazioni più o meno complesse ed implicite tra i dati disponibili come ad esempio dai nomi completi è possibile risalire ai titoli, ad alcune professioni o anche spingersi al raggruppamento delle famiglie.

La grande sfida è quella di spingere al massimo l’accuratezza del modello predittivo al fine di classificare al meglio un insieme di passeggeri di test di cui non è nota la sorte; solo dopo la sottomissione a Kaggle si scoprirà il livello di accuratezza raggiunto.

Il modello predittivo di base che occorre superare e contro il quale ci si deve confrontare, che ho definito come modello baseline, assume semplicemente che tutte le donne si salveranno; applicando questa condizione elementare, si raggiunge un’accuratezza dell’insieme di passeggeri da classificare di poco superiore al 76%.

modello baseline: tutte le donne si salvano raggiunge un’accuratezza dello 0.76555

Questa competizione è un’ottima introduzione alla piattaforma Kaggle e richiede lo sviluppo di tutte le fasi di costruzione di un modello predittivo: analisi dei dati, preparazione e raffinamento dei dati, visualizzazione dei dati, costruzione del modello, validazione del modello e della sua accuratezza, comprensione della piattaforma Kaggle.

Nel mio notebook ho deciso di affrontare la sfida in Python costruendo un modello tramite la libreria XGBoost nota sia per essere alla base delle migliori implementazioni all’avanguardia del settore ma anche perché alla base dei modelli vincenti delle competizioni Kaggle. Tale libreria implementa il framework Gradient Boost in modalità estremamente scalabile, efficiente e portabile.

La mia implementazione, già completamente funzionante, è ancora in evoluzione è raggiungibile a questo indirizzo:

Kaggle Competition – Titanic – Machine Learning from Disaster – Predict survival on the Titanic – Luca Amore

Share

AI: Pac-Man and Ms Pac-Man

E’ da molto che non scrivo in questo blog; semplicemente sono stato impegnato in alcuni progetti che non reputo ancora pubblicabili.

Voglio segnalarvi due interessanti riferimenti nel campo dell’AI, computational intelligence, machine learning; argomenti di cui mi sto occupando in questo periodo.

The Pac-Man Projects

Come base degli esercizi per un corso di intelligenza artificiale, presso l’università di Berkeley, viene proposto agli studenti di sviluppare in python alcuni algoritmi all’interno del famoso gioco del Pac-Man; il corso termina con un multi-player contest.

The Pac-Man Projects

Trovo questa idea geniale e molto efficace dal punto di vista didattico.

Il materiale può essere liberamente utilizzato come base per corsi di intelligenza artificiale ma si richiede di non pubblicare online le soluzioni dei problemi posti.

Pac-Man

Ms Pac-Man vs Ghost Team Competition

Per chi volesse cimentarsi nello sviluppo in java di algoritmi che pilotano Ms Pac-Man o la squadra dei quattro fantasmi è stata organizzata un’avvincente competizione:

Ms Pac-Man vs Ghost Team Competition

Un risultato interessante (che mi sorprende) è che i punteggi ottenuti dai migliori giocatori artificiali sono molto più bassi di quelli umani.

Tra i vari algoritmi utilizzati: Ant Colony Optimization, Genetic Programming, Neural Networks, Influence Maps, Minimax, Rule Based.

 

Share

AI: sviluppo di un giocatore artificiale di Reversi

Nei giochi di strategia a turni, ho sempre ammirato le grandi sfide tra uomo e calcolatore; epiche battaglie tra pensiero strategico umano e forza tattica del calcolatore; equilibrio precario tra sinapsi e silicio, agilità contro forza, tensione tra grande visione d’insieme ed imponente valutazione di ogni dettaglio. L’epilogo può essere violento: il pensiero strategico umano si prende gioco della miopia del calcolatore e lo annichilisce; la forza bruta del calcolatore devasta il giocatore umano conducendolo verso una combinazione di cui ha previsto ogni minima variante.

Sfide dove a vincere è sempre l’uomo: il grande maestro oppure la squadra di progettisti che ha concepito un giocatore artificiale in grado di competere contro la finezza del pensiero umano.

In questo articolo, ho trovato una citazione degli autori del programma scacchistico Deep Throught (precursore di Deep Blue) sullo stile di gioco del calcolatore:

“… il computer non imita il pensiero umano – raggiunge gli stessi obiettivi per vie diverse. Vede lontano, ma osserva poco; ricorda tutto, ma non impara niente. Non fa sbagli clamorosi, ma non si innalza mai al disopra della sua normale abilità. Eppure talvolta produce intuizioni che sfuggono anche a grandi maestri.”

(Hsu, F., Anantharaman, T., Campbell, M., Nowatzyk, A. – “A Grandmaster Chess Machine“, Scientific American, Ottobre 1990)

realizzazione di Reversi42 in Python

Reversi42 screenshot

Reversi42 screenshot

In questi giorni ho provato a realizzare un prototipo di giocatore automatico di Reversi in Python (sto approfondendo ancora la conoscenza di questo linguaggio) che ho battezzato Reversi42 (in onore di Douglas Adams e della famosa domanda: “The Ultimate Question of Life, the Universe and Everything“).

Non finirò mai di ringraziare Donato Barnaba, maestro della FNGO (Federazione Nazionale Gioco Othello), per il suo prezioso aiuto, la sua disponibilità e grande competenza (anche dal punto di vista dei giocatori automatici); senza di lui lo sviluppo di Reversi42 non sarebbe stato così stimolante e divertente! Reversi42, allo stato attuale, è solo un prototipo; eventuali imprecisioni sono da attribuire solo a me!

Reversi42, come altre mie realizzazioni, è un software libero rilasciato sotto la licenza GNU/GPL; siete incoraggiati a studiarne il sorgente, migliorarlo e farci tutto ciò che desiderate; ogni commento o contributo sarà gradito.

Il Turco

Di Reversi esiste un libro di Brian Rose che lo presenta così: “un minuto per imparare… una vita per diventare maestri”; le regole del gioco sono facili da apprendere (e quindi da codificare) ma il gioco può essere estremamente complesso dal punto di vista strategico e tattico (ottima sfida per la realizzazione di un giocatore automatico).

Reversi42 screenshot

Reversi42 screenshot

Nella progettazione del motore AI di gioco, ho deciso di adottare l’approccio classico che viene adottato in tutti i giochi di strategia ad informazione perfetta per due giocatori: si esplora in profondità l’albero delle possibili mosse valutando la bontà di ogni posizione ottenuta; si assume, inoltre, che l’avversario risponda sempre con la migliore mossa disponibile.

Trattandosi di un prototipo, sviluppato principalmente nei ritagli di tempo, ho voluto concentrare la mia attenzione solo sugli algoritmi e non sull’ottimizzazione delle singole procedure.

Citando Donald E. Knuth:

“We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. Yet we should not pass up our opportunities in that critical 3%. A good programmer will not be lulled into complacency by such reasoning, he will be wise to look carefully at the critical code; but only after that code has been identified”.

GRhino vs Reversi42

screenshot sfida tra GRhino e Reversi42 (test)

Ho comunque introdotto alcune metriche (certamente migliorabili) per valutare efficienza e sensitività (rispetto a modifiche) dei punti critici dell’algoritmo.

La guida di riferimento che ho adottato è: “Stategy Game Programming” di Martin Fierz che propone un graduale ed avvincente percorso tra le principali tecniche adottate per la costruzione di un buon giocatore automatico per giochi strategici (es. scacchi, dama, Reversi, forza quattro).

Le problematiche affrontate nella realizzazione del prototipo sono:

  • ricerca nell’albero delle posizioni della mossa più efficace
  • realizzazione di una buona valutazione della posizione
  • sintesi delle regole del gioco Reversi

Ricerca nell’albero delle posizioni della mossa più efficace

Lo scopo di questo problema (indipendente dal tipo di gioco) è quello di costruire l’albero di tutte le mosse possibili e percorrerlo in profondità ricercando la mossa migliore; si assume che l’avversario giochi sempre le mosse migliori.

All’aumentare della profondità di analisi (D), che condiziona la forza del giocatore, il numero di mosse da valutare (M) cresce esponenzialmente in funzione del fattore Branch Factor medio (B) tipico di ogni gioco.

M=B^{D}

Valori tipici del Branch Factor medio (B):

GiocoBranch Factor (B)
Reversi7
Forza quattro7
Dama10
Scacchi40
Go300 (!!!)

M=BF^DF

andamento del numero di mosse da analizzare al variare del gioco e profondità (in scala semilogaritmica)

Il mio obiettivo era quello di raggiungere una profondità di gioco (D) di 5-8 al fine di realizzare un giocatore automatico discreto; sul mio netbook riesco a giocare, a profondità (D) pari a 6, con tempi di attesa sempre ragionevoli (inferiori al minuto).

L’algoritmo di ricerca adottato è quello della potatura alfa-beta (in forma negamax), estremamente più efficace del minimax poichè è in grado di escludere dalla ricerca (pruning) interi rami dell’albero che condurrebbero a mosse non convenienti rispetto ad altre già individuate.

Per massimizzare il numero di rami da potare è opportuno introdurre un criterio euristico per ordinare in sequenza le mosse da valutare; le migliori mosse dovrebbero esser analizzate per prime. Rispetto all’algoritmo minimax, che richiede l’analisi di tutto l’albero delle possibili mosse (M=B^{D}), nel caso migliore della potatura alfa beta, ovvero nel caso ideale di ordinamento perfetto (le mosse più forti vengono valutate per prime), le posizioni da analizzare si abbattono a M=\sqrt{B^D}=B^{\frac{D}{2}}; siamo in grado di raddoppiare la profondità di analisi a parità di risorse di calcolo impiegate!

Il criterio euristico, con il quale vengono ordinate le mosse prima dell’alfa-beta su Reversi42, è quello di assegnare una priorità statica a tutte le mosse della scacchiera; le celle che hanno un valore più basso hanno maggiore priorità e vengono esplorate per prime (es. gli angoli).

18766781
89744798
75322357
642246
642246
75322357
89744798
18766781

Da quando è stato adottato questo ordinamento, le prestazioni della ricerca sono aumentate notevolmente; molto spesso la mossa migliore ricade tra le prime analizzate.

Valutazione della posizione

La valutazione della posizione è un elemento cruciale di un giocatore artificiale in quanto  ne condiziona: strategia, tattica ed efficienza. Occorre ponderare due parametri contrastanti: l’accuratezza dell’analisi e l’efficienza computazionale. Riuscire a trovare un compromesso ottimale tra queste due caratteristiche è un arte che si affina con l’esperienza! Un algoritmo di valutazione troppo accurato potrebbe rallentare la ricerca e quindi penalizzare eccessivamente la profondità di analisi; un algoritmo rapido ma poco accurato potrebbe perdere grandi opportunità.

In questo prototipo ho impostato la partita su due momenti distinti:

  • apertura e mediogioco: meno del 70% delle pedine non sono state giocate
  • finale: almeno il 70% delle pedine sono state giocate

In apertura e mediogioco ho cercato di massimizzare la mobilità, ovvero il numero di mosse disponibili che potranno essere utilizzate per dominare il finale; ho anche assegnato dei pesi ad alcune case strategiche che concorrono alla conquista degli angoli (caselle stabili).

10-30000-310
-3-70000-7-3
00000000
00000000
00000000
00000000
-3-70000-7-3
10-30000-310

Vengono assegnati punti di bonus se si occupano angoli mentre, se si conquistano delle case adiacenti agli angoli, vengono assegnate delle penalità poiché sarà più difficile difendere l’angolo dalla conquista avversaria. Le case adiacenti all’angolo perdono la loro penalità quando l’angolo è conquistato.

Nel finale si ricerca la vincita della partita oppure, grazie alla mobilità ottenuta in apertura e nel mediogioco, si inizia a massimizzare il numero di pedine possedute rispetto a quelle dell’avversario. L’errore fatale, tipico di giocatori mediocri di Reversi, è proprio quello di perseguire intuitivamente tale obiettivo sin dalla prima mossa.

Sorgenti

Visualizza o scarica i sorgenti dal repository su github

richiede:
python-pygame – SLD bindings for games development in Python

Share