Costruire network neurali con Brain.js

I calcoli di probabilità con le librerie di Brain.js Come costruire facilmente dei network neurali utilizzando Node.js per prevedere i risultati

L’intelligenza artificiale si sta diffondendo nella maniera più capillare nelle nostre vite:

Alexa, guida autonoma delle automobili, algoritmi di google/youtube, i nuovi robot.

Principalmente l’intelligenza artificiale attuale più diffusa sfrutta il machine learning.

Come costruire network neurali con le librerie di Brain.js e Node.js

Come costruire network neurali con le librerie di Brain.js e Node.js
Come costruire network neurali con le librerie di Brain.js e Node.js

Potrebbe interessati anche: Oggetti: che cosa insegna la programmazione alla filosofia.

Il machine learning va a definire un tipo di intelligenza che prende dei dati, li elabora per poi classificarli ed estrarre informazione per risolvere problemi specifici.

Nel machine learning troviamo molta statistica come il clustering, la regressione lineare, il k-nearest neighborn, ecc.

All'interno del machine learning troviamo il deep learning.

Nel deep learning si usano prevalentemente i network neurali.

I network neurali sfruttano in modello del cervello umano, ossia quello del neurone.

Abbiamo da una parte degli input, che sono dei valori che devono essere necessariamente numerici e a cui viene assegnano un peso, successivamente vengono eseguiti dei calcoli e la nostra macchina intelligente ci restituisce un output, dunque una risposta.

I network neurali
I network neurali

Il machine lerning sta influenzando tantissimo il mondo lavorativo, tanto è vero che oggi ad un semplice impiegato spesso vengono chieste competenze in data science e dunque l’utilizzo ad alto livello di linguaggi come Python o R.

Il problema è che, a parte le competenze di programmazione o la conoscenza di tali linguaggi, il machine learning chiede delle competenze molto elevate di matematica.

In particolare troviamo le seguenti branche: il calcolo delle probabilità, l’algebra lineare (matrici e vettori), il calcolo (differenziali e integrali).

Chi mai può avere tanta conoscenza simile? Ovviamente solo qualcuno che ha studiato ingegneria o una materia tecnico scientifica di alto profilo.

Programmare Intelligenza Artificiale con Javascript, Brain.js e Node.js foto
Programmare Intelligenza Artificiale con Javascript, Brain.js e Node.js foto

Tuttavia, io volevo scrivere questo articolo per darvi una buona notizia: tutto questo mondo complesso di calcoli negli anni verrà sempre più semplificato e lo è già di molto oggi.

Se volete imparare come programmare intelligenza artificiale ci sono molti strumenti su internet e soprattutto, se usate certi framework e certe librerie potete davvero evitare buona parte della matematica che spesso sta dietro a questi argomenti.

In questo articolo vorrei parlarvi di uno di una di queste librerie: Brain.js

Javascript Brain.js e Node.js foto #4
Javascript Brain.js e Node.js foto #4

Potrebbe interessati anche: Adrian Fartade: un laureato in filosofia che spiega l’astrofisica su Youtube.

Una volta Python e R erano i linguaggi usati in intelligenza artificiale. Ora le cose stanno molto diversamente, tutti i linguaggi si stanno lanciando verso la programmazione di intelligenza artificiale o il machine learning.

Principalmente sono già abbastanza avanzanti sul machine learning linguaggi come Java, Javascript o C#.

Oggi si sta persino cominciando a parlare della possibilità di usare Php per il machine learning.

In questo articolo mi concentrerò su Javascript, che è considerato da alcuni il migliore linguaggio per machine learning dopo Python.

Normalmente pensiamo a Javascript come quel linguaggio front end che serve a rendere dinamico un sito web manipolando il D.O.M., ma in realtà il discorso è molto più complesso.

Innanzitutto quasi nessuno usa javascript puro oggi.

Di solito si preferisce Jquery che è più semplice. Tuttavia la vera potenza di javascript sono i framework: Angular.js, Vue.js, React.js, Node.js, ecc.

In questo caso a noi ci interessa è Node.js, un framework che permette a javascript di fare un salto di qualità elevato: diventare un linguaggio anche da back-end.

Node.js ha due caratteristiche fantastiche:

gestisce più richieste alla volta e questo l’ha reso famoso;

si può creare il proprio server senza usare il classico Apache.

In Node.js troviamo i moduli e tramite questi possiamo importare la libreria Brain.js.

Il mio obbiettivo qui è dimostrarvi che con Brain.js si possono costruire facilmente dei network neurali per fare delle previsioni o calcoli di probabilità.

In particolare vi mostrerò un esempio che commenterò in tutte le sue fasi di network neurale.

In questo caso uso come metodo quello supervisionato. Questo significa che la mia macchina intelligente ha dei dati che io stesso gli fornisco e lui mi dà un risultato ad una richiesta mia sulla base di quei dati che gli ho fornito.

In questo caso io dò dei dati alla macchina sugli esiti di partite di calcio italiane e poi chiedo alla macchina, a livello di probabilità, l’esisto di una partita futura, partendo dati che gli ho fornito.

Nel mio esempio prendo in considerazione cinque squadre di calcio: Milan, Lazio, Juventus, Inter, Roma. Prima dò come input gli esiti di partite fatte da queste squadre e poi chiedo alla macchina chi vince tra il Milan e l’Inter.

Il codice completo è il seguente:

const brain = require('brain.js');

const network = new brain.NeuralNetwork();

/*

1 = Milan

2 = Lazio

3 = Juventus

4 = Inter

5 = Roma

Prob: 1 = input[0] vince

Prob: 0 = input[1] vince

*/

network.train([
    {input: [1,2], output: [1]},  // Milan vs Lazio - Milan vince
    {input: [1,3], output: [1]},  // Milan vs Juventus - Milan vince
    {input: [2,3], output: [0]},  // Lazio vs Juventus - Lazio vince
    {input: [2,4], output: [1]},  // Lazio vs Inter - Lazio vince
    {input: [1,5], output: [0]},  // Milan vs Roma - Roma vince
    {input: [5,3], output: [0]},  // Roma vs Juventus - Juventus vince
    {input: [3,4], output: [0]}   // Juventus vs Inter - Inter vince
]);

const output = network.run([1,4]);  // Milan vs Inter - ?

console.log(`Prob: ${output}`);

Notate che il codice è veramente breve ed è commentato da me nelle parti che contengono i simboli ‘/* */’ o ‘//’.

Vediamo il codice nei vari passaggi. Incominciamo dalle prime righe:

const brain = require('brain.js');

const network = new brain.NeuralNetwork();

Qui sono definite due costanti. La prima serve per importare la libreria come modulo. Il secondo va a prendere una funzione.

La parte centrale è il pezzo più importante:

network.train([
    {input: [1,2], output: [1]},  // Milan vs Lazio - Milan vince
    {input: [1,3], output: [1]},  // Milan vs Juventus - Milan vince
    {input: [2,3], output: [0]},  // Lazio vs Juventus - Lazio vince
    {input: [2,4], output: [1]},  // Lazio vs Inter - Lazio vince
    {input: [1,5], output: [0]},  // Milan vs Roma - Roma vince
    {input: [5,3], output: [0]},  // Roma vs Juventus - Juventus vince
    {input: [3,4], output: [0]}   // Juventus vs Inter - Inter vince
]);

Qui sto inserendo tutti i dati che voglio fornire alla mia macchina intelligente e sui quali la mia macchina deve lavorare. In particolare sto dicendo gli esiti delle partite di calcio. Gli dico come input le squadre che hanno giocato, mettendo dei numeri ai quali assegno sempre una squadra specifica. L’output è sempre il risultato della partita, laddove 1 vuol dire che vince la squadra a sinistra, mentre 0 vuol dire che perde e dunque vince l’altro.
È chiaro che se la Lazio non ha mai perso, allora è molto probabile che in una futura partita vinca di nuovo. È su questo tipo di calcoli che si basa l’intero programma.

Poi dopo creiamo una costante che ci serve per definire la partita della quale vogliamo sapere quale potrebbe essere l’esito.


const output = network.run([1,4]);  // Milan vs Inter - ?

Prima usavamo la funzione network.train(), ora usiamo network.run().

Per ultimo viene lo stampare il risultato dell’output:

console.log(`Prob: ${output}`);

Se usate un editor di testo famoso e gratuito come Visual Studio Code vi basta scrivere nella console questo: node + nome del file, per esempio ‘node index’. Poi semplicemente fate eseguire il codice e dovreste ottenere il risultato. Vi dirà che il Milan ha più probabilità di vincere, in quanto uscirà un numero maggiore di 0,5 e tendente all’1.

Dovrebbe essere chiaro che con questo anche voi dovreste essere capaci di fare il vostro network neurale. Gli unici prerequisiti sono avere un computer, un editor di testo (es. Visual Studio Code o un ide come Eclipse), Node.js installato. Tutto questo è molto semplice e forse in un futuro sarà tutto ancora molto più semplice e si potrà fare con qualsiasi linguaggio.

Tutto questo dovrebbe cambiare completamente la situazione, ma deve cambiare completamente l’istruzione delle persone, perché al momento spesso nelle scuole di intelligenza artificiale manco se ne parla, figuriamoci insegnare le basi.

Sono molto curioso di sapere come si evolveranno le cose, proprio perché è una cosa che riguarda tutti noi, il nostro futuro.