Cosimo00110 ha scritto:Ecco la cosa che mi preme è poter conoscere la materia, senza dover mai toccare la macchina. È una richiesta fuori dal mondo o si può fare?
Beh, tecnicamente ciò di cui si occupa l'informatica è racchiuso nella sua definizione: scienza che si occupa dell'elaborazione automatica dell'informazione.
Abbiamo quindi tre "attori": l'informazione, l'elaborazione e l'automatica.
L'informazione sono i nostri "significati simbolici", rappresentati tramite stati di materia codificati secondo una qualche convenzione comune (che chiamiamo dati).
L'elaborazione al livello più basso sono le singole micro manipolazioni che si possono realizzare su questi stati (tipicamente le operazioni logiche elementari AND OR NOT e per estensione/composizione tutto il resto che chiamiamo operazioni aritmetiche, confronti ecc)
L'automazione di tutto questo si ottiene tramite un sistema fisico in grado di "indirizzare" i (accedere ai) dati desiderati, ed eseguire su di loro le operazioni volute, il tutto guidato da un altro insieme di dati chiamato programma.
Una CPU fisicamente fa solo quattro cose: memorizza/sposta dati, effettua operazioni su di essi, comunica elettricamente con l'esterno, salta da un punto all'altro del programma (esegue cose differenti) a seconda che si verifichino oppure no determinate condizioni (tipicamente se il risultato di un'operazione è zero o diverso da zero).
Ogni linguaggio di programmazione crea un'astrazione sulla CPU e sulla codifica fisica dei dati, ma comunque fa sempre le stesse quatto cose, solo in modo più astratto e vicino al modo di pensare umano, per simboli, oggetti, interazioni, decisioni.
Così abbiamo una gerarchia di linguaggi di livello sempre più "alto", nel senso di sempre più astratto da ciò che eseguirà le istruzioni, con paradigmi di programmazione anche molto diversi, ad esempio programmazione logica vs programmazione imperativa vs programmazione funzionale, linguaggi più vecchi non orientati agli oggetti, e linguaggi recenti in cui tutto è modellato/pensato come un oggetto.
Ad esempio in Python, uno dei linguaggi recenti totalmente ad oggetti, quando mi serve lavorare con un "numero" (il concetto di numero è un puro significato umano, per la macchina non esiste) semplicemente assegno un numero (espresso in modo sintatticamente valido) a un nome/etichetta (scritto in modo sintatticamente valido), non ci sono limiti di grandezza dei valori se non quanto l'intera memoria del computer è in grado di contenere:
- Codice: Seleziona tutto
il_mio_numero = 8273
Se scendo di livello e uso il linguaggio C, devo occuparmi anche di specificare esplicitamente il tipo di dato con cui voglio lavorare (intero? con la virgola? con o senza segno? quanto grande al massimo?):
- Codice: Seleziona tutto
uint16_t il_mio_numero = 8273; // intero senza segno, max 65535
Se scendo ancora di livello, e ad esempio scrivo in assembly Z80, mi devo occupare anche della posizione fisica in memoria (indirizzo) in cui quel valore verrà salvato, e quindi devo anche conoscere i dettagli elettronici del sistema:
- Codice: Seleziona tutto
il_mio_numero EQU 25000 ; indirizzo fisico di memoria
ld hl, 8273 ; carica registro HL, max 65535
ld (il_mio_numero),hl ; copia registro in memoria
Ma tutto questo non riguarda ancora in alcun modo l' IA (o qualsiasi altra applicazione). Un linguaggio è solo un modo per codificare concretamente un processo, e renderlo così eseguibile/realizzabile da un sistema fisico). È solo un modo per codificare in modo formale e non ambiguo frasi e pensieri come: "se succede questo allora faccio questo", ad esempio in sintassi C:
- Codice: Seleziona tutto
if (succede questo)
{
faccio questo;
}
Un linguaggio si può certamente imparare solo teoricamente, per capire cosa permette di fare, come si descrivono i dati, ma questo non significa saperlo usare, cioè passare dall'idea di ciò che si vorrebbe fare alla sua formalizzazione nello specifico linguaggio, né significa capire se è adatto o meno per lo scopo che ci interessa. In mezzo ci sono diagrammi di flusso, stato, interazione, struttura, peculiarità specifiche del linguaggio, un intero universo di "design" che richiede inevitabilmente anni di esperienza pratica.
I processi in senso astratto invece, di qualsiasi natura siano, possono essere studiati indipendentemente da qualsiasi linguaggio o implementazione tecnica, anche se la conoscenza dei linguaggi e dei limiti fisici delle macchine reali (tipicamente occupazione di memoria e velocità) permette di capire se sono concretamente realizzabili oppure no.
Dopo di che, se si parla di IA, abbiamo minimo tre macro categorie:
- processi con intelligenza "cablata", praticamente tutti i programmi/app di uso corrente e i sistemi automatici
- processi in grado di "apprendere" tramite regole esplicitamente codificate (vedi expert system e motori inferenziali)
- processi in grado di "apprendere" senza regole esplicitamente codificate, e allora si parla di deep learning, tipicamente realizzato tramite modelli simulati di reti neurali
Ma, di nuovo, tutto questo non riguarda ancora lontanamente una "mente", che non solo non si sa come "funziona", ma c'è di mezzo lo spinosissimo "problema" della coscienza, che non solo non si sa cosa sia, ma non si sa neppure se può essere considerata una cosa (come fai a progettare una sensazione?). Per ora semplicemente si ignora la cosa, bollandola come epifenomeno, "user illusion" della materia organizzata, e l' IA mira molto ma molto più in basso, semplicemente a simulare/ricreare alcune funzioni percettive e cognitive, sempre e comunque incosce e inconsapevoli, fondamentalmente a trattare enormi quantità di dati e correlazioni tra di loro.