Skillbook Logo
foto profilo

Skill Factory

Tutte le categorie


3.Intelligenza Artificiale: le reti neurali artificiali

Gino Visciano | Skill Factory - 20/10/2024 11:55:49 | in Home

In questa lezione parleremo di reti neurali artificiali, i modelli computazionali ispirati alla struttura e al funzionamento delle reti neurali biologiche presenti nel nostro cervello. Questi modelli matematici e statistici sono importanti perché sono la parte fondamentale degli LLM, la mente utilizzata da tutti  gli strumenti d'Intelligenza Artificiale.

L'area dell'Intelligenza Artificiale  che si occupa di apprendimento delle macchine è quella del Machine Learning, in quest'area il settore che si occupa di apprendimento profondo attraverso l'uso delle reti neurali artificiali,  è il "Deep Learning".

Il termine "profondo" si riferisce all'architettura delle reti neurali, composte da uno strato esterno, chiamato di input, molti strati nascosti, composti da neuroni artificiali, chiamati anche nodi e uno strato di output.

Maggiore è il numero di strati interni (nodi verdi), maggiore è la profondità della rete.


LA DIFFUSIONE DEL DEEP LEARNING

Le prime reti neurali artificiali sono apparse tra gli anni 50 e 60, ma non hanno avuto una grande diffusione per mancanza di potenza computazionale e perché non c'erano ancora algoritmi capaci di addestrarle in modo adeguato.

A favorire la grande diffusione del Deep Learning e delle reti neurali artificiali, tra gli anni '80 e gli anni '90,  sono stati gli eventi seguenti:

1) La grande disponibilità di dati in forma digitale, dopo la nascita di Internet
2) L'aumento della capacità di calcolo, dopo che alla fine degli anni '90, NVIDIA  ha lanciato le GPU (Graphics Processing Unit – Unità di elaborazione grafica), progettate per accelerare la creazione di immagini;
3) La grande disponibilità di spazio su cui archiviare dati in forma digitale,  dopo la diffusione del Cloud computing;
4) I grandi progressi fatti nel campo degli algoritmi di addestramento, come ad esempio quelli di backpropagation.

Negli anni 2000 l'interesse verso le reti neurali artificiali cresce soprattutto nell'ambito del riconoscimento vocale, per esplodere dopo il 2012 grazie alla creazione di ImageNET, la raccolta d'immagini ideata per addestrare le macchine a riconoscere gli oggetti, nel campo della visione artificiale, come ad esempio:

- guida autonoma;
- sorveglianza;
- ricerca medica;
- e-commerce.

Clicca qui per accedere al sito www.image-net.org

Tutto questo diventa possibile perché le macchine, attraverso il Deep Learning, riescono a svolgere le seguenti attività:

- Classificazione immagini;
- Riconoscimento facciale;
- Localizzazione di oggetti;
- Generazione d'immagini;
- Segmentazione semantica.


COME FUNZIONANO LE RETI NEURALI ARTIFICIALI

Una rete neurale artificiale in pratica è un modello computazionale, che esegue operazioni e funzioni, in base agli input ricevuti, capaci di simulare l'apprendimento del cervello umano.

Il funzionamento di questo modello matematico è garantito da mini-processori, chiamati neuroni artificiali, che contengono funzioni di attivazione che regolano il comportamento del modello.

L'interconnessione tra i neuroni, si comporta come un circuito elettrico complesso, capace di apprendere i contenuti con cui viene addestrato.

La rivoluzione delle reti neurali sta nel fatto che questi modelli sono capaci di fare previsioni non lineari, per questo motivo riescono a gestire la complessità dei linguaggi naturali o della classificazione delle immagini.

Anche l'analisi lineare permette di fare previsioni, ma meno complesse, come ad esempio: la previsione dei prezzi, la valutazione del rischio di credito, la previsione delle vendite, la segmentazione dei clienti, la predizione delle malattie, l'analisi delle relazioni sociali.

Ricordate che quando parliamo di previsioni, siamo sempre nel campo della statistica e del calcolo delle probabilità; quindi, anche le risposte degli LLM non sono mai precise, ma sono sempre basate sulla previsione più probabile.

In sintesi, possiamo dire che Il comportamento di una rete neurale artificiale è definito da:

- Dataset di dati: grandi quantità di dati acquisiti sotto forma di numeri durante la fase di addestramento;
- Un algoritmo di addestramento: un algoritmo avanzato come il backpropagation, che attraverso una funzione di perdita misura il livello di errore della rete neurale e ottimizza i parametri per migliorare le prestazioni del modello;
- Neuroni artificiali: nodi organizzati a strati nascosti, che attraverso funzioni di attivazione si comportano come mini-processori in grado di generare o no un output in base all'input ricevuto; grazie ai neuroni artificiali e al tipo di funzioni di attivazione associata, il modello può fare previsioni lineari oppure previsioni non lineari.
- Parametri: numeri, chiamati pesi o bias, che regolano il comportamento dei neuroni artificiali della rete neurale, con l'obiettivo di ridurre gli errori di previsione e migliorare le prestazioni della rete. Questi valori vengono ottimizzati attraverso iterazioni continue dall'algoritmo di addestramento e dalla funzione di perdita associata.

Per fare un'analogia, dovete immaginare una rete neurale come a un'orchestra. Ogni musicista (neurone) può suonare o non suonare delle note, ma è l'insieme delle note suonate da tutti i musicisti che crea la melodia (previsione o risposta). Nessun singolo musicista "conosce" la melodia intera, ma la melodia emerge dalla loro collaborazione. Per raggiungere questo obiettivo vengono fatte tante prova e durante ogni prova, con l'aiuto di un maestro (l'algoritmo di addestramento), ciascun musicista corregge le sue note attraverso l'uso dei parametri.

In una rete neurale maggiore è il numero di parametri, tanto maggiori sono le prestazioni e la potenza dell'LLM associato. 


ALGORITMI DI BACKPROPAGATION
Gli algoritmi di backpropagation sono fondamentali per l'addestramento delle reti neurali artificiali, perché attraverso una funzione di perdita riescono a misura la discrepanza tra le predizioni del modello e i valori reali. In altre parole, l'algoritmo è capace di quantificare "quanto sbaglia" il modello; questo permette di apportare correzioni per migliorare le prestazioni del modello nel tempo.

Le funzioni di perdita sono un componente essenziale per l'addestramento delle reti neurali artificiali, perché, attraverso un apprendimento profondo, permettono alla rete di minimizzare gli errori fatti sulle previsioni o sulle risposte, facendo diventare la rete sempre più precisa.

L'intenso addestramento delle reti neurali, attraverso iterazioni continue (epiche), permette agli algoritmi di backpropagation di tarare sempre di più i parametri che servono alla rete per diventare sempre più precisa, come una persona che man mano che ripete una lezione diventa sempre più brava.

In sintesi, i parametri di una rete neurale sono i valori numerici che la rete "impara" durante l'addestramento e che determinano il successo o meno delle sue previsioni.

Le informazioni fornite in input ad una rete neurale, vengono convertite in numeri ad esempio a, b, c.

Successivamente ciascun numero viene moltiplicato per un peso specifico, ad esempio:

1. a * p1
2. b * p2
3. c * p3

La somma dei risultati delle moltiplicazioni fornisce la somma ponderata:

somma ponderata = (a * p1) + (b * p2) + (c * p3)

Il risultato della somma ponderata viene passato alla funzione di attivazione che decide se attivare o meno il neurone attraverso un valore di output. Se verrà generato un nuovo valore di output,  diventerà l'input del prossimo neurone dello strato più interno o corrisponderà l'output finale.

Durante l'addestramento, i pesi vengono aggiornati continuamente in modo da regolare il comportamento dei neuroni e minimizzare l'errore tra le previsioni del modello e i valori reali.

Il bias è un valore di correzione, che può essere aggiunto alla somma ponderata, come mostra l'esempio seguente:

somma ponderata = (a * p1) + (b * p2) + (c * p3) + bias.

Lo scopo è quello di rendere ancora più preciso il valore di input fornito alla funzione di attivazione per ottimizzare il comportamento del neurone.


I NEURONI ARTIFICIALI
Per capire il funzionamento delle reti neurali artificiali dobbiamo capire che cosa sono i neuroni artificiali.

Il primo neurone artificiale è stato creato da Warren McCulloch e Walter Pitts nel 1943

Il neurone di McCulloch-Pitts era estremamente semplice rispetto ai modelli di neuroni artificiali utilizzati oggi nelle reti neurali artificiali (ANN, Artificial Neural Networks). Si basava su una funzione di soglia: il neurone attivava un segnale di output solo se la somma dei segnali di input superava una determinata soglia.

La funzione di soglia era un meccanismo binario. Se la somma ponderata degli input superava una certa soglia, il neurone si attivava; altrimenti, rimaneva inattivo. Era un po' come un interruttore: acceso o spento.

Questo modello rappresentò uno dei primi tentativi di simulare il funzionamento del cervello umano utilizzando sistemi matematici non lineari, ponendo le basi per lo sviluppo delle reti neurali artificiali moderne e, più in generale, dell'intelligenza artificiale.

Nei neuroni delle reti neurali moderne, la semplice funzione di soglia è stata sostituita con funzioni di attivazione più sofisticate; queste funzioni rendono questi modelli di apprendimento molto più potenti ed efficaci.


La funzioni di attivazione più comuni sono:

Sigmoide: produce un output compreso tra 0 e 1.
Tanh (Tangente iperbolica): simile alla sigmoide, ma l'output è compreso tra -1 e 1.
ReLU (Rectified Linear Unit - Unità lineare rettificata): chiamata anche raddrizzatore, restituisce 0 per input negativi e l'input stesso per input positivi.


Il neurone artificiale simula il comportamento di un neurone biologico. 

I neuroni raccolgono gli impulsi (INPUT) dell'ambiente esterno attraverso i dendriti. Questi segnali energetici vengono memorizzati nel soma, sotto forma d'impulsi elettrici. il soma è corpo cellulare che contiene il nucleo del neurone e si comporta come un condensatore elettrico. Quando l'energia accumulata supera la soglia consentita, quella in eccesso, attraverso l'assone viene trasferita, in modo parallelo ai dendriti di altri neuroni.

Il passaggio dell'impulso elettrico attraverso l'assone versi i dendriti degli altri neuroni si chiama sinapsi

Un neurone biologico ha le seguenti analogie con un neurone artificiale:

Segnali: entrambi i tipi di neuroni ricevono segnali in ingresso.
Peso dei segnali: nei neuroni artificiali, i segnali hanno un peso che ne determina l'importanza; nei neuroni biologici, l'efficacia di una sinapsi (la connessione tra due neuroni) può variare, influenzando l'impatto di un segnale.
Soglia: entrambi i tipi di neuroni hanno una soglia che deve essere superata per attivarsi.
Output: Il neurone artificiale produce un output numerico, mentre il neurone biologico genera un potenziale d'azione.
Funzioni: I neuroni biologici sono specializzati in diverse funzioni, a seconda della loro posizione nel cervello. Nei neuroni artificiali, la funzione di soglia è sostituita dalle funzioni di attivazione. Queste funzioni, come la funzione sigmoidale, la ReLU oppure la Tanh, offrono una maggiore flessibilità e permettono ai modelli di apprendere informazioni più complesse. Il concetto di base rimane lo stesso: c'è un valore di soglia che determina se il neurone si attiva o meno; la collaborazione tra tutti neuroni della rete, e il loro stato determina la qualità della predizione.

Le funzioni di attivazione sono importanti perché determinano la linearità o la non linearità del modello. 

La non linearità permette alle reti neurali di apprendere relazioni complesse tra i dati ; una rivoluzione importante rispetto ai comuni algoritmi di Machine Learning, che seguono una logica lineare.

Nelle reti neurali artificiali i neuroni artificiali sono interconnessi tra loro come un grafo e caratterizzano gli stati interni nascosti.

Gli strati nascosti, composti da neuroni artificiali, sono il cuore delle reti neurali. E' qui che avviene la maggior parte dell'elaborazione delle informazioni e dove la rete "impara" a riconoscere pattern e a prendere decisioni.


IL PERCETTRONE

Il percettrone è il "nonno" delle reti neurali, ma le architetture moderne hanno superato di gran lunga le sue capacità. Comprendere il percettrone è fondamentale per apprezzare l'evoluzione e la complessità delle reti neurali attuali. È costituito da un singolo strato di neuroni, ognuno dei quali riceve un input, calcola una somma ponderata e applica una funzione di attivazione.


Il percettrone è in grado di separare solo dati linearmente separabili. Ciò significa che non può risolvere problemi complessi che richiedono rappresentazioni non lineari.
Ha gettato le basi per lo sviluppo delle reti neurali moderne, introducendo concetti fondamentali come pesi, soglie e funzioni di attivazione.


Come si comporta un percettrone per prendere una decisione?

Immaginate che il percettrone deve decidere se un frutto è maturo o no. Ogni caratteristica del frutto (colore, dimensione, consistenza) viene valutata e a ciascuna di queste caratteristiche viene assegnato un peso. il valore del peso rappresenta l'importanza che attribuiamo a ciascuna caratteristica nel processo decisionale. Supponiamo che percettrone classifichi un frutto come maturo o acerbo in base a due caratteristiche: il colore (rosso o verde) e la dimensione (grande o piccola). Assegniamo un peso a ciascuna caratteristica e una soglia.

Caratteristiche:

Colore rosso: peso = 2
Colore verde: peso = -1
Dimensione grande: peso = 1
Dimensione piccola: peso = -1
Soglia: 1

Funzione di attivazione:

Utilizziamo una funzione a gradino: se la somma ponderata delle caratteristiche supera la soglia, il frutto viene classificato come maturo (output = 1), altrimenti come acerbo (output = 0).

Calcolo della somma ponderata:

Se il frutto è rosso e grande: 2 (rosso) + 1 (grande) = 3.
Se il frutto è verde e piccolo: -1 (verde) - 1 (piccolo) = -2.

Confronto con la soglia:

Nel primo caso, 3 > 1, quindi il frutto viene classificato come maturo.
Nel secondo caso, -2 < 1, quindi il frutto viene classificato come acerbo.

Interpretazione dei pesi e della soglia:

Pesi positivi: Indicano che una caratteristica aumenta la probabilità che il frutto sia maturo.
Pesi negativi: Indicano che una caratteristica diminuisce la probabilità che il frutto sia maturo.
Soglia: Rappresenta il valore limite oltre il quale il percettrone si attiva e classifica il frutto come maturo.

In sintesi:

I pesi definiscono l'importanza relativa di ciascuna caratteristica nell'influenzare la decisione finale.
La soglia determina il punto di "taglio" tra le due classi (maturo/acerbo).
La funzione di attivazione trasforma la somma ponderata in una decisione binaria.


TIPI DI RETI NEURALI ARTIFICIALI

I principali tipi di reti neurali artificiali sono: 

1) Feed-forward
2) Ricorrenti
3) Convoluzionali
4) Generative Adversariali
5) Trasformatori

Share Button

2.Intelligenza Artificiale: i modelli linguistici di grandi dimensioni (LLM)

Gino Visciano | Skill Factory - 11/10/2024 20:02:22 | in Home

Fino a qualche tempo fa le macchine potevano svolgere compiti solo se venivano programmate. Oggi il paradigma è cambiato, perché le macchine sono capaci di apprendere e risolvere i problemi da sole, per questo motivo parliamo di "Intelligenza Artificiale".

Le macchine si sono evolute al punto che riescono a comprendere il linguaggio naturale (NLP - Natural Language Processing). Per uno come me che ha iniziato a programmare le macchine negli anni '80 con l'Assembler, un linguaggio artificiale mnemonico, molto simile al linguaggio delle macchine, fatto di lunghe sequenze di numeri 1 e numeri 0,  vedere oggi macchine che eseguono comandi o rispondono a domande complesse elaborando il linguaggio naturale rappresenta un passo avanti notevole, impensabile fino a qualche anno fa. 

Il settore dell'IA che si occupa dell'apprendimento delle macchine si chiama "Machine Learning". Gli algoritmi di ML permettono alle macchine di apprende grandi quantità di dati, proprio come fanno gli uomini quando studiano.

Un delle aree più avanzata del Machine Learning è quella del Deep Learning,  che si occupa dell'apprendimento delle macchine attraverso algoritmi avanzati, anche detti algoritmi di apprendimento profondo, questi modelli sono così evoluti che si comportano come reti neurali artificiali

Il risultato dei dati raccolti durante la fase di addestramento di una macchina attraverso algoritmi di tipo Deep Learning sono gli LLM (Large Language Model) o modelli linguistici di grandi dimensioni.

Potete immaginare un LLM come un computer super intelligente che ha letto tantissimi libri, articoli e pagine web, grazie a questo è capace di comprendere il linguaggio naturale, rispondere alle domande, tradurre testi in molte linguescrivere testi e generare immagini, musica e video.

Attenti a non fare l'errore di credere che gli LLM siano dei database in cui si trovano domande e risposte frequenti, come avviene per le FAQ (Frequently Asked Questions); essi contengono solo le informazioni per creare le risposte, che vengono generate ogni volta dall'inferenza

COME FUNZIONA L'INFERENZA?
L'inferenza è il processo attraverso cui si utilizzano le conoscenze dell'LLM per rispondere alle domande o risolvere problemi. L'inferenza si basa su algoritmi e modelli matematici che permettono all'LLM di prendere decisioni più probabili.
 

L'LLM non dà mai una risposta con una certezza assoluta. Le sue risposte sono sempre basate sulla probabilità. Il modello sceglie sempre la sequenza di parole più probabile nel contesto dato. Più dati ha a disposizione, più accurate saranno le risposte, le previsioni o le soluzioni.

Le fasi del processo d'inferenza sono le seguenti:

1) Input: si fornisce all'LLM un input, sotto forma di domanda.
2) Elaborazione: l'LLM analizza l'input, cercando di capire il contesto, il significato e le intenzioni.
3) Generazione: l'LLM utilizza i modelli linguistici che ha appreso durante l'addestramento per generare una risposta o un testo che sia coerente con l'input e con le informazioni che ha a disposizione.


Gli LLM sono strumenti potenti, ma è importante evidenziarne subito i limiti:

- Non pensano come gli umani: gli LLM non capiscono veramente il significato delle parole, ma seguono delle regole che hanno imparato.
- Possono sbagliare: a volte gli LLM possono dare risposte sbagliate o senza senso, soprattutto se le domande sono molto complesse. In questo caso parliamo di allucinazioni.
- Dipendono dai dati: le risposte degli LLM vengono create  in base ai dati con cui sono stati addestrati; quindi, potrebbero evidenziare dei pregiudizi che dipendono dal tipo d'informazioni acquisite durante l'apprendimento. Naturalmente questo fenomeno, chiamato BIAS, può creare delle implicazioni etiche.


COME VENGONO ADDESTRATI GLI LLM
L'addestramento degli LLM è un processo complesso, che richiede tempo e una notevole quantità di risorse.

L'addestramento può essere: supervisionato, non supervisionato e per rinforzo.

Nel caso degli LLM:

Addestramento supervisionato: utilizziamo enormi quantità di testo, dove ogni frase o paragrafo è etichettato con un'informazione specifica (es: traduzione, risposta a una domanda). Il modello impara a generare testo simile a quello di esempio.
Addestramento non supervisionato: forniamo al modello grandi quantità di testo senza etichette. Il modello impara a prevedere la parola successiva in una frase, a completare frasi o a tradurre testi, identificando le relazioni tra le parole e le frasi.
Apprendimento per rinforzo: il modello viene addestrato a svolgere un compito specifico (es: giocare a scacchi) e riceve un feedback positivo o negativo in base ai risultati ottenuti.

Il primo passo per addestrare un LLM è la raccolta dei dati che vengono puliti, formattati e pre-elaborati per rimuovere errori, incoerenze e informazioni non pertinenti.

I testi raccolti da internet, libri, articoli, codice e altre fonti, vengono divisi in unità più piccole chiamate token, che possono essere parole, sotto-parole o caratteri speciali.
A ogni token viene assegnato a un numero unico, creando una rappresentazione numerica del testo.

Gli LLM si basano su algoritmi avanzati o modelli, che si comportano come reti neurali artificiali, in particolare quelle chiamate "trasformatori", che sono particolarmente adatte a gestire sequenze di dati come il testo.

La potenza di un modello dipende dal numero di parametri che ha disposizione. I parametri sono numeri che vengono prodotti durante la fase di addestramento. Maggiore è il numero di parametri di un modello, migliori sono le capacità di fare previsioni o prendere decisioni. Il ruolo dei parametri, che si possono immaginare come nodi della rete neurale artificiale,  è quello di mettere in relazione tra loro il maggior numero di neuroni in base ad una logica basata sul calcolo della probabilità della conoscenza.

Dovete immaginare i parametri o nodi come a delle piccole unità di calcolo (funzioni matematiche). Quando ricevono degli input (dati in ingresso), li elaborano secondo una certa funzione e producono un output (un risultato). Insieme, i nodi formano una rete complessa che permette all'algoritmo di apprendere e fare previsioni.

Tipi di nodi:

Nodi di input: sono i primi nodi della rete, quelli che ricevono i dati grezzi.
Nodi nascosti: si trovano negli strati intermedi della rete e svolgono la maggior parte del lavoro di elaborazione dei dati.
Nodi di output: sono gli ultimi nodi della rete, quelli che forniscono il risultato finale.

Come funzionano i nodi?

Ricezione degli input: ogni nodo riceve un segnale da altri nodi o dall'esterno della rete.
Calcolo: Il nodo applica una funzione matematica (funzione di attivazione) ai dati in ingresso, generando un risultato.
Trasmissione dell'output: il risultato viene trasmesso ai nodi successivi della rete.

L'organizzazione dei parametri di un modello, attraverso algoritmi di ottimizzazione, viene aggiornata continuamente in modo iterativo con l'obbiettivo di ridurre al minimo la differenza tra previsioni del modello e le risposte corrette. Per misura la differenza tra previsioni del modello e le risposte corrette, si usa una funzione matematica chiamata funzione di perdita.  

L'addestramento richiede un'enorme potenza di calcolo, spesso utilizzando cluster di GPU o TPU

Letteralmente, cluster, significa “computazione a grappolo”: un gruppo di computer collegati in rete tra loro che lavorano in parallelo utilizzando processori potentissimi e veloci specializzati nella gestione delle immagini come le GPU (Graphics Processing Unit) oppure le TPU (Tensor Processing Unit) unità di elaborazione progettate da Google specializzate nelle operazioni di Machine Learning. Sono ottimizzate per eseguire operazioni sui tensori: strutture dati multidimensionali fondamentali per le reti neurali artificiali.

Dopo l'addestramento iniziale, il modello può essere ulteriormente addestrato su dataset più piccoli e specifici per migliorare le sue prestazioni su compiti particolari, come la generazione di codice, la traduzione o la risposta a domande, questa operazione di chiama "Fine-tuning".

PRINCIPALI LLM A CONFRONTO

 Anno 

 Nome   LLM

 Parametri 

 Tipo rete   neurale

 Scopo   principale

 Licenza

 Azienda/Organizzazione 

2023

GPT-4

>100 miliardi

Transformer

Generazione di testo, comprensione, traduzione, ecc.

Proprietario

OpenAI

2023

PaLM 2

Varianti

Transformer

Generazione di testo, comprensione, traduzione, coding

Proprietario

Google AI

2023

LLaMA

7B - 65B

Transformer

Ricerca, creazione di contenuti

Non-commerciale

Meta AI

2022

T5

Varianti

Transformer

Molteplici compiti NLP

Open-source

Google AI

2020

GPT-3

175 miliardi

Transformer

Generazione di testo

Proprietario

OpenAI

2020

BART

Varianti

Transformer

Generazione di testo, riassunto, traduzione

Open-source

Facebook AI Research

2019

RoBERTa

Varianti

Transformer

Comprensione del linguaggio naturale

Open-source

Facebook AI Research

2018

BERT

340 milioni

Transformer

Comprensione del linguaggio naturale

Open-source

Google AI

 

COSA SONO I PROMPT?
I prompt sono lo strumento che ci permette di interagire con gli LLM e di sfruttarne al meglio le potenzialità. Sono il ponte tra le nostre richieste e la capacità dell'LLM di generare testi complessi e informativi. È come una chiave che ci permette di aprire le porte della creatività e dell'innovazione. Più siamo abili nel formulare i prompt, più saremo in grado di sfruttare tutto il potenziale di questi modelli linguistici.

La capacità di formulare prompt è così importante che in futuro, con la diffusione dell'Intelligenza Artificiale, la figura del creatore di prompt sarà sempre più richiesta. Il creatore di prompt non è semplicemente colui che fa domande, ma un vero e proprio ingegnere della comunicazione che, attraverso la formulazione di istruzioni precise e creative, è in grado di sfruttare al massimo le potenzialità degli LLM

il creatore di prompt è una figura che, oltre alle sue competenze linguistiche e creative, si avvale di una serie di strumenti e tecniche per ottimizzare il processo di creazione dei prompt e ottenere i migliori risultati possibili dagli LLM.

Approfondirò sicuramente l'argomento dei creatori di prompt in uno dei miei prossimi articoli, perché è un argomento molto interessante.


CONCLUSIONI

Gli LLM sono sistemi informatici, chiamati modelli, che attraverso algoritmi di apprendimento profondo si addestrano su enormi quantità di dati.

Le informazioni raccolte vengono organizzate in uno spazio vettoriale e collegate tra loro attraverso l'uso di parametri,  anche detti nodi, che utilizzano funzioni matematiche per creare una fitta rete di percorsi usati dall'inferenza per creare le risposte o le soluzioni più probabili alle domande o alle richieste formulate dai prompt

Dopo l'addestramento gli LLM, possono essere ulteriormente specializzati attraverso una fase di fine tuning, che prevede l'apprendimento di un dataset di dati più dettagliato. 

La qualità dei dati durante la fase di addestramento degli LLM è importante per evitare il problema dei pregiudizi o Bias. Un DATASET per essere di valore deve contenere una grande quantità di dati, sempre aggiornati velocemente, provenienti da fonti eterogenee e contesti differenti e le informazioni devono essere affidabiliutili e senza fake.

 

Gli LLM sono utilissimi nell'ambito scientifico, del lavoro, dell'educazione e dell'intrattenimento; i chatbot e assistenti virtuali sono solo la punta dell'iceberg.


Nel prossimo articolo vi parlerò di reti neurali artificiali, per capire che cosa sono e cosa ci permettono di fare.


1.Intelligenza Artificiale: se la conosci non la temi
3.Intelligenza Artificiale: le reti neurali artificiali
4.Intelligenza Artificiale: tipi di reti neurali artificiali
5.Intelligenza Artificiale: IA Generativa
6.Intelligenza Artificiale: modelli pre-addestrati di IA locali

 

Share Button

1.Intelligenza Artificiale: se la conosci non la temi

Gino Visciano | Skill Factory - 23/09/2024 08:33:01 | in Home

La storia ci ha abituati alle rivoluzioni tecnologiche, ovvero quei cambiamenti che coinvolgono tutti modificando radicalmente le nostre abitudini e i nostri comportamenti, basta fare l'esempio del telefono, della radio, della TV, del personal computer, di Internet, dei cellulari e del cloud.

Oggi stiamo vivendo la rivoluzione dell'Intelligenza Artificiale; che sia tale si capisce dal fatto che ne parlano tutti e chi non la conosce la teme.

Come le rivoluzioni precedenti, anche questa era inevitabile; il progresso è scritto nel nostro DNA e non si può fermare!

Il progresso da sempre ci ha permesso di  aumentare le nostre capacità; attraverso la tecnologia muoviamo e alziamo masse enormi, ci spostiamo velocemente sulla terra, sull'acqua e nell'aria, fino a raggiungere lo spazio estremo, comunichiamo a distanza, osserviamo sia lo spazio infinito, sia i corpi infinitesimali, elaboriamo e memorizziamo enormi quantità di dati e oggi con l'Intelligenza Artificiale abbiamo aumentato anche le nostre capacità intellettuali, come ad esempio: l'apprendimento, la risoluzione di problemi, prendere decisioni, svolgere compiti, sintetizzare argomenti e creare testi, immagini e video.

Il precursore dell'idea d'Intelligenza Artificiale fu il matematico Alan Turing che, in un articolo del 1950, per la prima volta parlò di macchine intelligenti.

Nell'articolo Turing descriveva il modo per testare se una macchina era intelligente. Secondo il test una macchina (A) poteva essere considerata intelligente se il suo comportamento, osservato da un essere umano (C), fosse considerato indistinguibile da quello di una persona (B):

Il termine intelligenza artificiale (IA) è stato coniato per la prima volata nel 1955 da John McCarthy

Nel 1956, McCarthy e altri scienziati organizzarono la conferenza “Dartmouth Summer Research Project on Artificial Intelligence”; questo evento ha dato origine alla scienza dei dati (data since).

L'idea di macchina intelligente (IA) si è potuta concretizzare solo oggi grazie ai seguenti fattori:

1) quasi tutti i dati che produciamo sono in forma digitale;
2) attraverso il cloud riusciamo a memorizzare enormi quantità di dati;
3) grazie alle GPU (Graphics Processing Unit - Unità di Elaborazione Grafica), è aumentata la potenza di calcolo;
4) l'esperienza ci ha permesso di creare algoritmi capaci di imitare il comportamento dei neuroni.

L'Intelligenza Artificiale attuale è molto lontana da quello che si racconta nei romanzi o nei film di fantascienza e non è quello che vogliono farci credere alcuni divulgatori scientifici o esperti dell'argomento; quindi, per ora, non dobbiamo temerla, anzi, al contrario penso che sia estremamente utile per tutti.

Per comprendere il progresso e le sfide attuali nell'ambito dell'Intelligenza Artificiale, è importante comprendere la differenza tra: IA Debole IA Forte.

L'IA debole è progettata per eseguire compiti specifici e predefiniti, come:

- il riconoscimento del linguaggio naturale
- la classificazione delle immagini
- la previsione dei dati

- la generazione di testi, immagini e video

Un esempio di IA debole sono gli assistenti virtuali come Siri, Cortana o Alexa: essi possono rispondere alle domande degli utenti e compiere una serie di funzioni, ma non hanno nessuna consapevolezza di sé e non capiscono veramente ciò di cui si sta parlando.

Le macchine che riescono a fare queste cose, anche se sembrano “intelligenti”, non comprendono realmente quello che fanno e non hanno nessuna percezione del mondo o del contesto in cui stanno operando.

L'IA forte, anche conosciuta come Intelligenza Artificiale Generale (AGI - Artificial General Intelligence), rimane ancora largamente teorica e non esiste concretamente al momento. Essa dovrebbe essere in grado di eseguire qualsiasi compito intellettuale che un essere umano può fare e di avere una forma di autoconsapevolezza e comprensione del mondo.

Al momento l'IA forte resta ancora un obiettivo a lungo termine per la comunità scientifica.

Oggi gli strumenti di IA più evoluti sono gli LLM (Large Language Model -  Modello linguistico di grandi dimensioni), algoritmi molto avanzati capaci di riconoscere il linguaggio naturale (NLP - Natural Language Processing) e le immagini. 

Gli LLM vengono usati dai chatbot:

Chat: conversazione
Bot: robot (programma informatico)

oppure dagli assistenti AI come  Siri, Cortana o Alexa per rispondere alle domande poste dagli utenti che li usano. Questi programmi nonostante sembrano intelligenti, rientrano nell'ambito dell'intelligenza artificiale debole

Il termine, coniato nel 1994 da Michael Mauldin (il creatore del ChatBot Verbot), deriva da “chatterbot” e viene utilizzato per descrivere i programmi di conversazione.

Gli attuali chatbot, attraverso gli LLM, oltre a riconoscere il linguaggio naturale, riescono anche a comprendere il contenuto delle immagini e a generare testi, immagini e video di fantasia; per questo motivo parliamo anche di intelligenza artificiale generativa.

I modelli linguistici più avanzati, sono di tipo GPT (Generative Pretrained Transformer - Trasformatore Generativo Preaddestrato); utilizzano algoritmi di apprendimento profondo (Deep Learning), per generare risposte simili a quelle umane all'interno di un discorso.

I chatbot AI e gli assistenti AI più diffusi sono: ChatGPTZendeskGeminiCopilotClaudePerplexity AIJasper Chat.


 


Nel prossimo articolo approfondirò l'argomento degli LLM.


2.Intelligenza Artificiale: i modelli linguistici di grandi dimensioni (LLM)
3.Intelligenza Artificiale: le reti neurali artificiali
4.Intelligenza Artificiale: tipi di reti neurali artificiali
5.Intelligenza Artificiale: IA Generativa
6.Intelligenza Artificiale: modelli pre-addestrati di IA locali

Share Button

Come progettare e sviluppare giochi per l'educazione e la formazione con Python: lezione 5

Mirko Onorato | Skill Factory - 23/09/2024 08:30:04 | in Tutorials

In questa lezione completiamo la prima esperienza di matematica di Hammer-XP, implementando tutti i livelli di gioco previsti:

1) Elimina dall'area di gioco i numeri pari;
2) Elimina dall'area di gioco 3 e i multipli di 3;
3) Elimina dall'area di gioco 7 e i numeri divisibili per 7;
4) Elimina dall'area di gioco i numeri primi.

I livelli sono stati progettati per ragazzi delle scuole elementari, che hanno un'età massima di 10 anni.

I quattro livelli sono stati implementati attraverso le funzioni seguenti:

1) def exp_01_01(block_list,sprite_list,game_exit,scheda);
2) def exp_01_02(block_list,sprite_list,game_exit,scheda);
3) def exp_01_03(block_list,sprite_list,game_exit,scheda);
4) def exp_01_04(block_list,sprite_list,game_exit,scheda).

Puoi consultare il codice delle funzioni, scaricando il programma Python nel file zip alla fine di questa lezione.

Il primo livello parte subito all'avvio del gioco, con la funzione:

def exp_01_01(block_list,sprite_list,game_exit,scheda).

L'avvio degli altri livelli viene gestito attraverso la variabile level_progressivo e la struttura condizionale seguente:

level_progressivo+=1
 if level_progressivo==2:
      exp_01_02(block_list,sprite_list,game_exit,scheda)
elif level_progressivo==3:
      exp_01_03(block_list,sprite_list,game_exit,scheda)
elif level_progressivo==4:
      exp_01_04(block_list,sprite_list,game_exit,scheda)

Per passare al livello seguente è stato aggiunto il pulsante "START NEXT LEVEL >>":

bloccoGoalNextLevel=Etichetta((201,55,184),300,40,500,164,'START NEXT LEVEL >>')

Quando Hammer tocca il pulsante START NEXT LEVEL >>", si passa al livello successivo.

Il suono per accedere al prossimo livello è stato creato con la funzione seguente:

def beep_next_level():
    frequenza=150
    durata=[200,75,100,125,350,500,700]
    for x in range(5):
        winsound.Beep(frequenza,durata[x])
        frequenza+=150
    winsound.Beep(frequenza,1000)

FASI DEL GIOCO
All'avvio, il gioco presenta subito il primo livello, dove bisogna eliminare tutti i numeri pari.
Il gioco finisce se termina il tempo a disposizione oppure gli errori (wrong) superano i successi (score).
Quando il gioco termina appare il pulsante "GAME OVER", come mostra l'immagine seguente:

Se il giocatore elimina dall'area di gioco tutti i numeri pari passa al livello successivo.

Il secondo livello prevede che il giocatore deve eliminare dall'area di gioco il 3 e i multipli di 3. Anche in questo caso il gioco finisce se termina il tempo a disposizione oppure gli errori (wrong) superano i successi (score)

Il terzo livello è simile al secondo, ma qui il giocatore deve eliminare dall'area di gioco il 7 e i numeri divisibili per 7.

Infine, il quarto livello è quello più difficile, perché il giocatore deve eliminare dall'area di gioco tutti i numeri primi; quindi, prima d'iniziare a giocare, è il caso di studiare bene l'argomento.

Se il giocatore, termina con successo anche l'ultimo livello, appare il pulsante "GOAL!!!"

Tutte le fasi del gioco vengono gestite con il codice Python seguente: 

            if not gameNextLevel:
                blocks_hit_list = pygame.sprite.spritecollide(hammer, block_list, True)
                t2=time.time()
                t_value=math.floor(t2-t1)
                for blocco in blocks_hit_list:
                    if blocco.hit:
                        score_value+=1
                    else:
                        wrong_value+=1
                if score_value==game_exit.score_value_exit and level_progressivo<4:
                    gameNextLevel=True
                    block_level.add(bloccoGoalNextLevel)
                    sprite_list.add(bloccoGoalNextLevel)
                    beep_next_level()
                elif score_value==game_exit.score_value_exit and level_progressivo==4:
                        gameOver=True
                        sprite_list.add(bloccoGoal)
                        beep_goal()
                elif wrong_value>score_value or t_value==game_exit.t_value_exit:
                        gameOver=True
                        sprite_list.add(bloccoGameOver)
                        beep_game_over()


COME ESEGUIRE IL GIOCO

Per eseguire il gioco HAMMER-XP dovete installare il framework Python sul vostro computer.

Per eseguire il download del setup per installare Python clicate qui oppure collegatevi al link seguente: https://www.python.org/downloads/.
Dopo il download del setup, eseguitelo per installare Python.

Attenzione, durante l'installazione è importante spuntare l'opzione "Add Python 3.X to PATH:



Dopo che avete impostato l'opzione, cliccate sul comando Install Now.

Per verificare se il framework Python è stato installato correttamente, dal prompt dei comandi del sistema operativo, eseguite il comando:

python --version

Se l'installazione è andata a buon fine viene visualizzata la versione di Python, come mostra l'immagine seguente:

Successivamente create una cartella "HAMMER-XP" e in questa cartella estraete il contenuto del file zip che contiene le risorse del gioco.

Per avviare il gioco dal prompt dei comadi, entrate nella cartella hammer-xp, ed eseguite il comando:

python hammer_experience_matematica_001_V02.py


Nella prossima lezione implementeremo l'esperienza d'italiano per imparare a riconoscere i sostantivi, gli aggettivi, i verbi e gli avverbi.


Per il download delle risorse di questa lezione cliccate qui.


< LEZIONE PRECEDENTE  VAI ALLA PRIMA LEZIONE


T U T O R I A L S    S U G G E R I T I


PER IMPARARE A PROGRAMMARE, SEGUI LE PLAYLIST SUL NOSTRO CANALE YOUTUBE "SKILL FACTORY CHANNEL": clicca qui per accedere alle playlist


PAR GOL (Garanzia di Occupabilità dei Lavoratori)

Se sei residente in Campania e cerchi lavoro, sai che puoi partecipare gratuitamente ad un corso di formazione professionale PAR GOL?

I corsi di formazione professionale PAR GOL sono finanziati dalla Regione Campania e ti permettono di acquisire una Qualifica Professionale Europea (EQF) e di partecipare ad un tirocinio formativo aziendale.

 Invia il tuo CV o una manifestazione d'interesse a: recruiting@skillfactory.it

oppure

chiama ai seguenti numeri di telefono:

Tel.: 081/18181361
Cell.: 327 0870141

oppure

Contattaci attraverso il nostro sito: www.skillfactory.it


Per maggiori informazioni sul progetto PAR GOLclicca qui.

Per maggiori informazioni sulle Qualifiche Professionali Europee (EQF)clicca qui.


Academy delle professioni digitali

Per consultare il catalogo dei corsi online della nostra Academy ...

... collegati al nostro sito: www.skillfactory.it

... collegati al nostro sito: www.skillfactory.it

 

Share Button

6. Competenze per programmare: date, ore e fusi orari

Gino Visciano | Skill Factory - 16/08/2024 11:59:36 | in Tutorials

Il tempo sulla Terra non è assoluto, ma relativo, quindi la sincronizzazione delle date e delle ore, nell'era della globalizzazione, può diventare una cosa complicata se non sono chiari alcuni concetti.

Il primo concetto fondamentale per gestire le date è il formato della data, perché ogni nazione o sistema informatico può adottare delle regole diverse.

I formati data più utilizzati dai sistemi informatici sono i seguenti:

1) MM/dd/yyyy;
2) yyyy/MM/dd;
3) dd/MM/yyyy.

dd=giorno
MM=mese
yyyy=anno
 
A volte, al posto del separatore slash "/", viene anche utilizzato il segno meno "-":
 
1) MM-dd-yyyy;
2) yyyy-MM-dd;
3) dd-MM-yyyy.
 
Il secondo formato: yyyy/MM/dd è utile per ordinare in modo crescente le date di tipo stringa.

Esempio 1

Inserire una data di tipo stringa, nel formato dd/MM/yyyy.
Estrarre la data il giorno, il mese e l'anno in forma numerica e stamparli.
Utilizzare il giorno, il mese e l'anno estratti per creare una data di tipo oggetto.
Dalla data di tipo oggetto estrarre la data il giorno, il mese e l'anno in forma numerica e stamparli.
Infine, utilizzando la data di tipo oggetto stampare le date nei formati seguenti:

1) MM-dd-yyyy;
2) yyyy-MM-dd;
3) dd-MM-yyyy.

Soluzione Python:
 
Soluzione JavaScript (node.js):
 
Prima di eseguire il programma assicurati di aver installato i moduli:
1) readline-sync
2) moment
 
Per installare i due moduli, devi eseguire i comanadi seguenti nella directory in cui è stato salvato il file gestione_date.js:
 
npm install readline-sync
npm install moment

 

Esempio 2

Creare un vettore con 5 date di tipo stringa.
Le date devono essere inserite nel formato dd/MM/yyyy.
Stampare le date in ordine crescente.  

Soluzione Python:

Clicca qui per visualizzare la soluzione.

Soluzione JavaScript (node.js):

Clicca qui per visualizzare la soluzione.

 

Esempio 3

Creare un vettore con 5 oggetti di tipo data.
Le date devono essere inserite nel formato dd/MM/yyyy.
Stampare le date in ordine crescente.  

Soluzione Python:

Clicca qui per visualizzare la soluzione.

Soluzione JavaScript (node.js):

Clicca qui per visualizzare la soluzione.


Un altro concetto importante è quello di fuso orario, perché permette di sincronizzare l'ora degli eventi tra località molto distanti tra loro. L'ora locale di una località cambia in base alla longitudine in cui si trova, per questo motivo il tempo sulla Terra non è assoluto, ma è relativo; attraverso i fusi è possibile conoscere la differenza di orario che esiste tra due località diverse.  

Per chiarire i due concetti, facciamo un semplice esempio: immaginate che un amico di New York vi dà un appuntamento telefonico per il 10/05/2024 alle ore 11:00.

Per essere sicuri di quando riceverete la telefonata del vostro amico, dovete chiarire tre cose:

1) il formato della data indicata;
2) la città a cui fa riferimento l'ora indicata;
3) se è in vigore l'ora legale

In questo caso il problema dell'ora legale non c'è perché sia in America che in Italia va in vigore a marzo e termina a fine ottobre; quindi, l'ora legale non avrà nessun effetto sul fuso orario.

Allora vediamo quali sono gli altri casi possibili:

A.  Data espressa in formato  Europeo (dd/MM/yyyy) e ora di Roma

Questo è il caso più semplice, perché la telefonata del vostro amico di New York dovrebbe arrivare il 10 maggio 2024 alle ore 11:00.

B.  Data espressa in formato  Europeo (dd/MM/yyyy) e ora di New York

In questo caso c'è il problema del fuso orario tra Roma e New York. La longitudine (meridiano) di New York è diversa da quella della città di Roma, quindi, l'ora di New York è di 6 ore indietro rispetto a quella di Roma.

A causa del fuso orario, la telefonata del vostro amico di New York dovrebbe arrivare il 10 maggio 2024 alle ore 17:00.

C.  Data espressa in formato  USA (MM/dd/yyyy) e ora di Roma

Il formato USA prevede che nella data venga indicato prima il mese e poi il giorno; in questo caso la telefonata del vostro amico di New York dovrebbe arrivare il 5 ottobre 2024 alle ore 11:00.
 
D.  Data espressa in formato  USA (MM/dd/yyyy) e ora di New York
 

In questo caso considerando il formato USA della data e il fuso orario di New York, otteniamo che la telefonata del vostro amico di New York dovrebbe arrivare il 5 ottobre 2024 alle ore 17:00.

sistemi informatici, per allineare le date e le ore tra località del mondo con longitudine diversa, usano le informazioni di Time zone, da cui si può ottenere il fuso orario e se è in vigore o meno l'ora legale.


Esempio 4

Stampare l'ora corrente di Roma.
Estrarre ore, minuti e secondi e stamparli.
Stampare il fuso orario con Greenwich.

Soluzione Python:

Clicca qui per visualizzare la soluzione.

Soluzione JavaScript (node.js):

Clicca qui per visualizzare la soluzione.


Esempio 5

Stampare la data e l'ora corrente e le informazioni di Time zone di Roma e di New York.

Soluzione Python:

Clicca qui per visualizzare la soluzione.

Soluzione JavaScript (node.js):

Clicca qui per visualizzare la soluzione.

 

COME MISURIAMO IL TEMPO SULLA TERRA
La misura del tempo sulla Terra è una questione di giri ... Per questo motivo il tempo si misura in sessagesimi (sistema di misura in base 60).

Un giorno corrisponde al tempo impiegato dalla Terra per compiere un giro completo di 360°, intorno al proprio asse.

La Terra ruota in senso antiorario, da ovest (occidente/ponente) verso est (oriente/levante); per ogni ora che passa ruota di 15°, per questo motivo un giorno è composto da circa 24 ore, come mostra la formula seguente:

360° / 15° = 24 ore.

In base al sistema sessagesimale, le unità sono rappresentate dai secondi (simbolo ''). Ogni sessanta secondi s'incrementano di 1 i minuti (simbolo '). Ogni sessanta minuti s'incrementano di 1 le ore.

Per questo motivo il tempo sulla Terra si indica nel formato:

ore:minuti:secondi

oppure

hh:mm:ss  

1 ora  (rotazione Terra di 15°) = 60 minuti (60')

1 minuto (rotazione Terra di 0,25°) = 60 secondi (60'')

Quindi

1 ora = 60' = 3600''

1 giorno = 24 ore = 1440' = 86400''

Anche le lancette dell'orologio analogico, con cui misuriamo il tempo, girano.

Un orologio non è altro che un contatore sessagesimale

Per ogni giro completo (360°) della Terra intono al proprio asse, che si completa in circa 24 ore:

1) la lancetta dei secondi ruota intorno al quadrate dell'orologio per 1440 volte. 
2) la lancetta dei minuti ruota intorno al quadrate dell'orologio per 24 volte;
1) la lancetta delle ore ruota intorno al quadrate dell'orologio per 2 volte;


Esempio 6

Visualizzare le seguenti informazioni sulla rotazione della Terra:
1) Data e ora di Greenwich con fuso orario
2) Data e ora di Roma con fuso orario
3) Differenza di fuso orario tra Roma e Greenwich
4) Percentuale di rotazione della Terra prima di completare un giro
5) Percentuale di rotazione della Terra per completare un giro

 

Soluzione Python:

Clicca qui per visualizzare la soluzione.

Soluzione JavaScript (node.js):

Clicca qui per visualizzare la soluzione.


LATITUDINE E LONGITUDINE
La posizione di qualunque località o punti sulla Terra si può indicare attraverso due coordinate chiamate: Latitudine e Longitudine.

Ad esempio, la città di Roma ha le seguenti coordinate:

Latitudine: 41°53′57.12″ nord
Longitudine: 12°32′42.00″ est.

Mentre la città di Brasilia ha le seguenti coordinate:

Latitudine: 15°46′46″ sud
Longitudine: 47°55′46″ ovest

Potete immaginare la latitudine come il cerchio perpendicolare all'asse terrestre e parallelo all'equatore che passa per una località specifica. Per convenzione la latitudine è Nord se il cerchio si trova nella parte tra l'equatore e il polo Nord (emisfero Boreale), altrimenti è Sud, se il cerchio si trova tra l'equatore e il polo Sud (emisfero Australe).

I cerchi che indicano le latitudini da 0° a 90°, distanziati di 1° l'uno dall'altro, sono detti paralleli. Si contano 90 paralleli a Nord e 90 a Sud

il parallelo 0 coincide con l'equatore, quindi in totale i paralleli sono 181. Sulle mappe si indica un parallelo solo ogni 15°, quindi ci sono 12 paralleli a Nord e 12 a Sud, oltre l'equatore naturalmente.

Allo stesso modo, potete immaginare la longitudine come un semicerchio parallelo all'asse terrestre e perpendicolare all'equatore che unisce il polo Nord con il polo Sud e passa per una località specifica. 

I semicerchi che indicano le longitudini, distanziati di 1° l'uno dall'altro, sono detti meridiani. I meridiani sono 360; quello più importante è il meridiano 0

Verso la fine del 1800, i Paesi più importanti del mondo, decisero che il meridiano 0 dovesse essere quello che passava per  Greenwich, un distretto di Londra in Inghilterra, sulle sponde del fiume Tamigi. Per convenzione le località a destra del meridiano 0 hanno longitudine Est, quelle a sinistra hanno longitudine Ovest

Sulle mappe si indica un meridiano ogni 15°, quindi ci sono solo 24 meridiani identificati con i numeri da 0 a 23. Questi meridiani sono anche detti meridiani orari, perché a causa della rotazione della Terra, ciascun meridiano, partendo da quello 0 a quello 23, incontra il Sole alle ore 12:00:00, dopo ogni ora. 

I meridiani orari permettono di definire i fusi orari, fondamentali per stabilire l'ora locale di ogni località del mondo.


Esempio 7

Inserire la latitudine e la longitudine di una località e indicare tra quali paralleli e quali meridiani si trova.

Soluzione Python:

 
Soluzione JavaScript (node.js):

CHE COS'E' IL FUSO ORARIO
Quando parliamo di misura del tempo sulla Terra, dobbiamo ricordare che non sono importanti i paralleli (cerchi paralleli all'equatore, con latitudine da 1 a 90 gradi dell'emisfero Nord e Sud), ma sono fondamentali i meridiani (i 360 semicerchi che unisco, il polo Nord con il polo Sud, a 1° di longitudine l'uno dall'altro), in particolare quelli orari (i 24 meridiani a 15° di longitudine l'uno dall'altro), perché permettono di determinare i fusi orari che servono per calcolare l'ora locale di qualunque località del mondo.

Sappiamo che un giorno corrisponde al tempo impiegato dalla Terra per compiere un giro completo di 360° intorno al proprio asse. Il problema è che le località del mondo si trovano in posizioni diverse; quindi, per misurare il tempo sulla Terra è importante scegliere una località specifica, da usare come riferimento.

Per convenzione si è deciso di utilizzare come località di riferimento per misurare il tempo sulla Terra il distretto di Greenwich, che corrisponde al meridiano zero o longitudine zero. Il tempo s'inizia a contare quando questa località incontra il Sole (punto fisso della volta celeste) alle ore 12:00:00. 

Ogni volta che Greenwich compie un giro completo, sul nostro Pianeta sarà trascorso un giorno. Quindi l'ora locale di Greenwich, detta anche Greenwich Mean Time, abbreviato in GMT, è l'ora di riferimento da cui partire per calcolare le ore locali delle altre località del mondo, utilizzando i fusi orari.

Per ottenere l'ora locale di qualunque località del mondo basta usare la formula seguente:

OL = GMT + FO

OL=ora locale della località in esame
GMT=Greenwich Mean Time
FO=Fuso orario della località in esame (Attenzione i fusi ad ovest del meridiano 0 sono negativi, quelli ad est sono positivi).

Naturalmente il fuso orario di Greenwich, che coincide con il meridiano 0, è uguale a zero.

Il valore del fuso orario aumenta di un'ora (+) ogni volta che s'incontra un nuovo meridiano orario, se si procede verso Est del meridiano 0. Altrimenti diminuisce di un'ora (-) ogni volta che s'incontra un nuovo meridiano orario, se si procede verso Ovest del meridiano 0, come mostra l'immagine seguente:

Ad esempio, quando a Greenwich sono le 12:00 a Roma sono le 13:00, perché Roma si trova sul primo meridiano orario ad Est, di Greenwich, dove il fuso orario è uguale a +1. Anche a Parigi sono le 13:00, perché Roma e Parigi, hanno latitudini diverse, ma si trovano sulla stessa longitudine, quindi si trovano sullo stesso meridiano orario e il fuso orario è uguale.

L'Islanda, si trova sul primo meridiano orario ad Ovest di Greenwich; in questo caso il valore del fuso orario è uguale a -1. Quindi quando a Greenwich sono le 12:00, in Islanda sono le 11:00

La differenza tra i fusi orari di due località diverse, ci permette di conoscere le ore di differenza che ci sono tra le loro ore locali. Ad esempio, il fuso orario di Roma è +1, mentre quello di New York è -5. Questo significa che tra l'ora locale di Roma e quella di New York c'è una differenza di:

-5 - (+1) = -6 ore.

Quindi, quando a Roma sono le 12:00, a New York sono le 6:00 del mattino. 


DIFFERENZA TRA GMT E UTC
Il Tempo medio di Greenwich (GMT), come abbiamo visto è il tempo a cui bisogna far riferimento per calcolare l'ora locale di qualunque località del mondo utilizzando i fusi orari. Il GMT non è preciso perhcé è basato su fenomeni celesti e con il tempo deve essere corretto.

Oggi il GMT è stato sostituito dal Tempo Coordinato Universale (Coordinated Universal Time - UTC), conosciuto anche come tempo civile. Il nuovo nome è stato coniato per non dover menzionare una specifica località in uno standard internazionale. L'UTC si basa su misurazioni condotte da orologi atomici, quindi è molto più preciso del GMT.

A causa delle oscillazioni nella velocità di rotazione della Terra (il fenomeno è dovuto soprattutto alla gravità degli altri pianeti), il GMT ritarda costantemente rispetto al "tempo atomico" UTC. Il ritardo è mantenuto entro 0,9 secondi, aggiungendo o togliendo un  secondo ad UTC alla fine del mese quando necessario, convenzionalmente il 30 giugno o il 31 dicembre. Il secondo extra, detto intercalare è determinato dall'International Earth Rotation and Reference Systems Service (IERS), basandosi sulle loro misurazioni della rotazione terrestre.

L'UTC è un problema per i sistemi informatici che memorizzano le date come il numero di secondi passati rispetto ad una data antecedente, come ad esempio il sistema operativo  Unix, che memorizza la data come il numero di secondi passati dal 1° gennaio 1970. In questi casi diventa impossibile determinare la rappresentazione di una data futura, a causa dei secondi che potrebbero essere stati inseriti o sottratti nel frattempo.

L'UTC è il tempo usato per molti standard Internet e nel World Wide Web. In particolare, il Network Time Protocol è progettato come un modo per distribuire dinamicamente il tempo UTC attraverso Internet.

Il fuso orario UTC è a volte indicato dalla lettera 'Z', per scopi militari, meteorologici, di navigazione aeronavale militare e civile. Poiché l'alfabeto fonetico della NATO e dei radioamatori usa la parola "Zulu" per 'Z', UTC è a volte chiamato "tempo" o "orario Zulu".

Per ottenere l'ora locale di qualunque località del mondo, attraverso l'UTC, basta usare la formula seguente:

OL = UTC + FO

OL=ora locale della località in esame
UTC=Coordinated Universal Time
FO=Fuso orario della località in esame (Attenzione i fusi ad ovest del meridiano 0 sono negativi, quelli ad est sono positivi).


Esempio 8

Visualizzare la data e l'ora corrente e le informazioni di tutti i Time zone del mondo.

Soluzione Python:

Clicca qui per visualizzare la soluzione.

 

Soluzione JavaScript (node.js):

Clicca qui per visualizzare la soluzione


LO STANDARD ISO 8601
Per indicare le date e le ore in modo univoco in tutto il mondo, è stato creato lo standard ISO 8601. In Europa questo standard è anche conosciuto come EN 28601.

Lo scopo della norma ISO 8601, è quello di fornire indicazioni per i formati numerici di date e orari.

Secondo questo standard le data vanno espresse nel formato anno-mese-giorno, mentre gli orari nel formato ore-minuti-secondi. Tutte le indicazioni di orari, date o intervalli di tempo conformi alla norma ISO vengono indicati con una successione precisa: cominciano con l'unità più grande a cui segue sempre l'unità inferiore. Questo tipo di scrittura è noto anche come "scrittura decrescente".

Rappresentazione conforme all'ISO 8601  Valori
Anno (Y) YYYY, di quattro cifre, abbreviato in due
Mese (M) MM, da 01 a 12
Settimana (W) WW, da 01 a 53
Giorno (D) D, giorno della settimana, da 1 a 7
Ora (h) hh, da 00 a 23, 24:00:00 come orario finale
Minuti (m) mm, da 01 a 59
Secondi (s) ss, da 01 a 59
Frazioni decimali (f) Frazioni di secondo, precisioni facoltative

La data è l'ora nella stringa ISO, sono divise dalla lettera "T", ad esempio:

25 luglio 1980 ore 15:30:10 = "1980-07-25'T'15:30:10".

Dopo l'indicazione della data e dell'orario, spesso si esprime anche la differenza rispetto al tempo universale coordinato, abbreviato con la sigla UTC. In questo modo il formato tiene conto anche degli eventuali diversi fusi orari o dell'ora legale specifica di un paese.

Ad esempio, la stinga ISO seguente:

2020-11-16T04:25:03-05:00

indica la data e l'ora solare di una località ad Ovest di Greenwich (meridiano 0), perché c'è il segno meno, cinque ore prima dell'ora UTC; Il segno -/+ indica il numero di ore prima (Ovest) o dopo (Est) dell'ora UTC. 

Nel prossimo esempio, viene indicato valore della data e dell'ora per il 16 novembre 2020 alle 4:25:03 dell'ora UTC:

2020-11-16T04:25:03Z

La data viene specificata per prima, seguita dal valore T, che definisce l'inizio dell'elemento time. Il valore Z (Zulu) alla fine della stringa indica che l'ora è espressa in formato UTC.
 
L'ISO 8601 usa il calendario gregoriano, quindi il campo di applicazione degli anni in questo formato comprende soltanto gli anni che vanno dal 1583 al 9999 perché il calendario gregoriano è stato introdotto soltanto a partire dall'anno 1583.

Il calendario gregoriano è il calendario solare ufficiale adottato da quasi tutti i paesi del mondo. Fu introdotto da papa Gregorio XIII nel 1582 come correzione del precedente calendario giuliano (di epoca romana), il quale era sfasato di 11 minuti ogni anno solare. 

Il calendario giuliano aggiunge un giorno al calendario ogni 4 anni. Il calendario gregoriano fa lo stesso, tranne quando l'anno è divisibile per 100 e non divisibile per 400


Clicca qui per vedere  come facciamo in programmazione a capire se un anno è secolare e bisestile.


Esempio 9

Visualizzare la data e l'ora corrente e le informazioni del Time zone sia in formato standard, sia in formato ISO 8601.

Soluzione Python:

# Gestione date  e ore in formato ISO
import datetime as dt
dataObj=dt.datetime.now()
print("Data e ora: "+str(dataObj))
print("ISO 8601: "+dataObj.isoformat())

 

Soluzione JavaScript (node.js):

// Ottieni la data attuale
const dataObj = new Date();

console.log("Data e ora: " + dataObj.toString());
console.log("ISO 8601: " + dataObj.toISOString());


Esempio 10

Trasformare la data e l'ora corrente e le informazioni del Time zone da formato standard in formato ISO 8601.

Soluzione Python:

# Gestione date  e ore in formato ISO
import datetime as dt
dataObj = dt.datetime.now()
print(dataObj.strftime('%Y-%m-%dT%H:%M:%S.%f%z'))

Soluzione JavaScript (node.js):
 
const moment = require('moment');

// Ottieni la data attuale
const dataObj = moment();

// Formatta la data nel formato ISO richiesto
console.log(dataObj.format('YYYY-MM-DDTHH:mm:ss.SSSZ'));


Esempio 11

Stampare in formato ISO 8601, le informazioni del Time zone UTC.
Sempre in formato ISO 8601, stampare anche le informazioni del Time zone Europe/Rome.
Infine, stampare la differenza di fuso orario tra l'ora locale di Roma e l'UTC.


Soluzione Python:

# Gestione date ISO
import datetime as dt
import pytz
dataObj = dt.datetime.now()
dataObjUTC=dataObj.astimezone(pytz.timezone("UTC"))
dataObjRM=dataObj.astimezone(pytz.timezone("Europe/Rome"))
print("Informazioni Time zone UTC: "+dataObjUTC.strftime('%Y-%m-%dT%H:%M:%S.%f%z'))
print("Informazioni Time zone Roma: "+str(dataObjRM.strftime('%Y-%m-%dT%H:%M:%S.%f%z')))
print("Offset tra fuso orario UTC e Roma: "+str(dataObjRM.utcoffset()))

Soluzione JavaScript (node.js):
 
const moment = require('moment-timezone');

// Ottieni la data attuale
const dataObj = moment();

// Converti in UTC
const dataObjUTC = dataObj.tz('UTC');
console.log("Informazioni Time zone UTC: " + dataObjUTC.format('YYYY-MM-DDTHH:mm:ss.SSSZ'));

// Converti in fuso orario di Roma
const dataObjRM = dataObj.tz('Europe/Rome');
console.log("Informazioni Time zone Roma: " + dataObjRM.format('YYYY-MM-DDTHH:mm:ss.SSSZ'));

// Offset tra UTC e Roma
const offset = dataObjRM.utcOffset() / 60; // Ottieni l'offset in ore
console.log("Offset tra fuso orario UTC e Roma: " + offset + " ore");

Prima di eseguire il programma assicurati di aver installato il modulo moment-timezone.

Per installare il modulo, devi eseguire il comanado seguente nella directory in cui è stato salvato il file gestione_date_iso.js:
 
npm install moment-timezone.
 

Leggi anche le altre lezioni ...

COMPETENZE PER PROGRAMMARE:
1-I sistemi di numerazione
2-Mondo reale e Mondo Digitale
3-La reppresentazione digitale dei numeri interi e decimali
4-Le stringhe
5-Le espressioni regolari (REGEXP)


Segui sul canale YouTube "Skill Factory Channel" la Playlist: COMPETENZE PER PROGRAMMARE


TUTORIALS
1-Laboratori di logica di programmazione in C
2-Impariamo a programmare con JavaScript
3-Ricominciamo dal linguaggio SQL
4-Introduzione alla logica degli oggetti
5-TypeScript
6-Impariamo a programmare in Python
7-Come sviluppare un sito in WordPress


PAR GOL (Garanzia di Occupabilità dei Lavoratori)

Se sei residente in Campania e cerchi lavoro, sai che puoi partecipare gratuitamente ad un corso di formazione professionale PAR GOL?

I corsi di formazione professionale PAR GOL sono finanziati dalla Regione Campania e ti permettono di acquisire una Qualifica Professionale Europea (EQF) e di partecipare ad un tirocinio formativo aziendale.

 

Invia il tuo CV o una manifestazione d'interesse a: recruiting@skillfactory.it

oppure

chiama ai seguenti numeri di telefono:

Tel.: 081/18181361
Cell.: 327 0870141

oppure

Contattaci attraverso il nostro sito: www.skillfactory.it


Per maggiori informazioni sul progetto PAR GOLclicca qui.

Per maggiori informazioni sulle Qualifiche Professionali Europee (EQF)clicca qui.


Academy delle professioni digitali

Per consultare il catalogo dei corsi online della nostra Academy ...

... collegati al nostro sito: www.skillfactory.it

Share Button
TOP