L'Intelligenza Artificiale (IA) è un campo di ricerca interdisciplinare che studia come rendere le macchine in grado di simulare l'intelligenza umana.
Si tratta di un campo di ricerca in continua evoluzione che mira a creare macchine capaci di imparare, ragionare e risolvere problemi, come farebbero gli esseri umani.
La tecnologia si è evoluta e sviluppata nel corso del tempo.
Negli anni, l'IA ha portato alla creazione di macchine capaci di eseguire compiti complessi come l'elaborazione del linguaggio naturale, la visione artificiale e l'apprendimento automatico.
L'intelligenza artificiale è un campo complesso che utilizza una vasta gamma di strumenti e tecniche. Alcune delle tecniche più comuni che vengono utilizzate per implementare l'IA comprendono le reti neurali, l'apprendimento automatico, la programmazione evolutiva e la programmazione logica.
Quando si deve realizzare un software, il programmatore ha bisogno di individuare tutte le regole necessarie per gestire una certa problematica, per poi poterle inserire correttamente nel programma.
In un programma di contabilità, ad esempio, il programmatore inserisce tutte le regole economiche che servono per fare i calcoli, memorizzare le informazioni, visualizzarle in un certo modo ecc.
Questa attività è fattibile solo quando è possibile razionalizzare uno elenco completo di regole, per gestire un determinato problema. Per applicazioni come il riconoscimento del parlato, non è possibile stilare un elenco di operazioni "meccaniche" che permettano di sviluppare questo tipo di software. Personalmente affrontai questo problema nel lontano 1992, quando i computer commerciali, molto meno potenti di quelli di oggi, non permettevano di utilizzare algoritmi di machine learning.
Vi assicuro che è stata veramente dura: con un complesso sistema statistico sono a malapena riuscito a far riconoscere le 5 vocali...
A questo punto è necessario spiegare come funziona la "creazione" di un programma che si basi su algoritmi di intelligenza artificiale.
Come già accennato, la modalità di creazione dei programmi classici, è affidata al programmatore.
Questo studia il fenomeno, estrapola le regole da inserire nel programma, ed infine realizza il codice che può essere eseguito sui nostri PC.
Un algoritmo di intelligenza artificiale viene realizzato in maniera diversa: scelto un modello, si inseriscono una grande quantità di dati e per ogni dato si inserisce il risultato atteso. Se ad esempio volessimo insegnare al sistema come si fa un'addizione tra 2 numeri, inseriremmo tra i dati una serie di esempi con i relativi risultati, come: 1 e 1, risultato:2; 1 e 3, risultato 4; 5 e 13, risultato 18; e così via...
Il modello base inizia a creare una serie di configurazioni e pesature che di fatto non sono altro che un complessissimo reticolo statistico che cerca di approssimare il più possibile il risultato atteso sulla base degli esempi. In pratica la risposta di un algoritmo di intelligenza artificiale è quella che il modello ritiene più probabile: questo tipo di approccio non è mai in grado di dare una risposta con sicurezza deterministica. Tuttavia, più esempi di forniscono, più il risultato sarà attendibile. Con un numero adeguato di dati, il sistema "impara" a fare le addizioni anche di coppie di numeri che non gli sono state inserite tra gli esempi. Questa fase di "addestramento" si chiama "training" del modello.
Prima ho parlato di scelta del modello: infatti per ogni tipologia di applicazione esistono modelli più o meno indicati. Ecco quindi che per per il riconoscimento del parlato, una delle scelte migliori è la rete neurale RNN o la più recente LSTM, per il riconoscimento delle immagini, la rete CNN, per il clustering si usa spesso un algoritmo di machine learning chiamato K-means, e così via. La scelta del modello migliore, e della sua successiva configurazione e dimensionamento, è affidata all'esperienza del machine-learning Engineer.
Come dicevo, sono modelli probabilistici, non deterministici: per quanto si possa perfezionare questo modello, nessun sistema di intelligenza artificiale può raggiungere esattamente il 100% di affidabilità. Inoltre un software di intelligenza artificiale in genere richiede più risorse computazionali di un software normale. Ecco perchè non farei mai un programma per fare le somme in questa maniera...
In generale, gli algoritmi di intelligenza artificiale vengono usati solo per scopi che non sarebbero raggiungibili con il metodo classico.
Per Machine learning si intendono l'insieme di algoritmi che permettono di perfezionare il modello tramite dati di esempio. Anche una semplice regressione lineare (per chi conosce questo strumento statistico) rientra in questa casistica.
Le reti neurali sono uno strumento particolarmente importante nell'intelligenza artificiale. Si tratta di un modello matematico di machine learning, che imita il modo in cui il cervello umano apprende. Le reti neurali possono essere utilizzate per riconoscere caratteristiche, eseguire classificazioni e prendere decisioni.
Le reti neurali, confrontate con altri sistemi di machine learning, permettono di raggiungere maggiori performance, ma richiedono un numero molto elevato di dati per fare il training, e consumano molte risorse computazionali.
L'apprendimento automatico è un'altra tecnica importante nell'intelligenza artificiale. Si tratta di una forma di programmazione che consente alle macchine di apprendere da dati e di migliorare le loro prestazioni senza essere programmate direttamente. L'apprendimento automatico può essere utilizzato per riconoscere modelli nel comportamento umano, per prendere decisioni, per identificare tendenze e per prevedere risultati.
La programmazione evolutiva (o gli algoritmi genetici) è un'altra tecnica di IA che prende spunto dalla selezione naturale. Si tratta di un metodo che consente alle macchine di "imparare" e di migliorare le loro prestazioni attraverso la simulazione di processi evolutivi. La programmazione evolutiva mira a massimizzare le prestazioni delle macchine ottimizzando le loro caratteristiche.
Questo tipo di intelligenza artificiale segue un processo molto diverso dalle altre.
Quando si avvia un addestramento, vengono generate varie declinazioni dello stesso programma. Inizialmente questi programmi hanno delle performance pessime perchè sono generati casualmente. I programmi, così come fanno gli esseri viventi nell'evoluzione naturale, si "accoppiano" tra loro per migliorarsi. In ogni generazione tendono a "morire" i programmi più lontani dai risultati attesi, mentre quelli migliori in termini di performance tendono ad unirsi creando nuove generazioni del programma, migliorate. Inoltre ad ogni generazione vengono introdotte delle "variabili ambientali" casuali, in maniera da permettere miglioramenti non solo dalla selezione, ma anche dalla varietà.
Su questa tipologia di modelli ho diverse mie pubblicazioni a riguardo che risalgono a circa 15 anni fa. Una tipica applicazione di questa metodologia è rappresentata dai software che ottimizzano i tagli: immaginate un'azienda tessile che da una bobina di tessuto vuole ricavare il maggior numero possibile di camicie, eliminando gli sfridi: la disposizione dei tagli cambia di molto il rendimento. Stessa cosa vale ad esempio per una falegnameria che deve ottimizzare il taglio delle tavole e così via. Algoritmi di questo tipo hanno permesso di fare importanti saving, disponendo nei modi migliori le parti da tagliare.
In generale, gli algoritmi genetici rappresentano una delle migliori scelte quando si tratta di ottimizzare un'attività.
In diverse ricerche accademiche degli ultimi anni, sono stati condotti esperimenti sugli algoritmi genetici in cui robot hanno preso una forma di consapevolezza di loro stessi.
Immaginate un robot con numerosi gradi di libertà sprovvisto di software pronto per la gestione dei movimenti. Tramite algoritmi genetici che hanno lavorato incessantemente per centinaia di migliaia di generazioni. Come un bambino che impara dagli errori, questo robot è stato in grado di prendere consapevolezza del proprio ingombro, della resistenza delle proprie parti, dei movimenti possibili e, dopo diverse generazioni di software che l'hanno fanno muovere alla rinfusa, gradualmente, ha iniziato ad assumere i giusti comportamenti per raggiungere i propri obiettivi (camminare, spostare oggetti, assemblare prodotti, ecc.).
Un altro strumento di rilievo nell'intelligenza artificiale, è la programmazione logica. Si tratta di una tecnica di programmazione che consente alle macchine di prendere decisioni sulla base di informazioni logiche. La programmazione logica è uno strumento utilizzato nell'intelligenza artificiale per risolvere diversi problemi complessi.
Ragioniamo, per esempio, sul riconoscimento del parlato.
Siri, Alexa, Google riescono a trasformare il parlato, che di fatto non è altro che una disordinata onda sonora, in testo scritto, con ottime performance. Se però ci riflettete, l'uomo non si limita a trasformare questo suono in testo, ma fa una serie di altre analisi parallele tra cui:
riconoscere se sta parlando una donna o un'uomo;
riconoscere se si tratta di un bambino, di un adulto o di un'anziano;
riconoscere le emozioni di chi parla: se è ansioso, spaventato, allegro e così via;
riconoscere la persona che parla dalle caratteristiche uniche del proprio timbro;
della regione da cui proviene, in base all'accento;
se dice la verità o meno;
se è sarcastico;
se è serio o se sta scherzando;
e così via.
Se volessimo far fare tutte queste operazioni ad algoritmi di intelligenza artificiale, ci vorrebbero dei computer veramente potenti: ognuna delle funzioni citate dovrebbe essere affidata ad una specifica rete neurale, ed ognuna di queste richiederebbe importanti risorse hardware!
E alla fine, dopo tutta questa fatica e tutte queste risorse consumate, non sarebbe in grado di fare altro che ascoltare il parlato: cosa che un umano fa senza sforzo mentre espleta numerose altre attività come camminare rimanendo in perfetto equilibrio ecc.
In definitiva, l'intelligenza artificiale può essere molto utile per singole applicazioni verticali, ma di sicuro non ancora per sostituire l'uomo in toto. Sicuramente, però, può essere un ottimo supporto per molte operazioni.
L'intelligenza artificiale è diventata una parte importante della nostra vita quotidiana. La tecnologia IA è già ampiamente utilizzata nei campi della medicina, della finanza, dei trasporti, della produzione e dell'intrattenimento.
Nel campo della medicina, l'IA viene utilizzata per sviluppare sistemi di diagnostica automatica, sistemi di monitoraggio dei pazienti e sistemi di assistenza medica.
Nel campo della finanza, l'IA viene utilizzata per prevedere le tendenze del mercato, individuare le frodi e prendere decisioni di investimento.
Nel campo dei trasporti, l'IA viene utilizzata per sviluppare sistemi di navigazione e di guida autonoma.
Nel campo della produzione, l'IA viene utilizzata per sviluppare macchine robotiche autonome in grado di eseguire compiti complessi.
Infine, nell'intrattenimento, l'intelligenza artificiale viene utilizzata per creare contenuti personalizzati in base alle esigenze dei consumatori.
L'intelligenza artificiale è un campo di ricerca che sta portando a una maggiore automazione di molte attività lavorative. La tecnologia IA è già ampiamente utilizzata in numerosi campi ed è destinata a crescere in futuro.
Si tratta di una tecnologia che offre molte possibilità e speriamo che continuerà a evolversi in modo positivo e a beneficio di tutti.