Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Generative Adversarial Networks (DL 23)
Generative Adversarial Networks (DL 23)
Nell'ultima lezione, abbiamo trattato gli autocodificatori variazionali, che sono un tipo di approccio di modellazione generativa. L'obiettivo principale dell'autoencoder è apprendere variabili latenti che possono essere utilizzate per il campionamento dalla distribuzione generativa. Un altro modo di pensare alla generazione di campioni da una distribuzione è attraverso generatori di numeri casuali computazionali.
Quando si utilizza una libreria casuale nella programmazione, i campioni da distribuzioni casuali vengono generati in base a una sequenza di bit casuali o pseudo-casuali. Il generatore di numeri casuali esegue calcoli per trasformare questa sequenza di bit in campioni da una diversa distribuzione. Molte distribuzioni sono costruite su distribuzioni uniformi in questi generatori.
Questo approccio alternativo alla modellazione generativa prevede l'addestramento di una rete neurale del generatore. Il generatore prende il rumore casuale come input e lo trasforma in un campione casuale da una distribuzione di dati. Ad esempio, se il set di dati è costituito da immagini di cuccioli, l'obiettivo è addestrare la rete neurale a generare immagini casuali di cuccioli dato qualsiasi rumore di input.
Per addestrare la rete del generatore, viene utilizzata una rete neurale aggiuntiva chiamata discriminatore. Il discriminatore prende gli input dai dati di addestramento reali o dall'output della rete del generatore e determina se l'input è reale o falso. La rete del generatore mira a produrre campioni in grado di ingannare il discriminatore, mentre il discriminatore mira a distinguere i dati reali dai dati falsi. Questo crea una relazione conflittuale tra le due reti.
Il processo di addestramento prevede prima l'addestramento del discriminatore, consentendogli di apprendere la distribuzione dei dati reali. Quindi, il generatore viene addestrato a produrre output che assomigliano a dati reali e possono ingannare il discriminatore. L'allenamento si alterna tra il discriminatore e il generatore per migliorare le loro prestazioni.
La funzione di perdita per la rete del generatore può essere l'opposto della perdita del discriminatore o una funzione di perdita completamente diversa. I gradienti possono essere propagati attraverso il discriminatore nella rete del generatore per aggiornarne i pesi in base alla funzione di perdita. Ciò consente al generatore di apprendere come migliorare la sua funzione obiettivo.
Diverse funzioni di perdita possono essere utilizzate per le reti generatore e discriminatore, soprattutto quando l'obiettivo è generare campioni per categorie specifiche all'interno della distribuzione dei dati. Il generatore può essere condizionato da informazioni aggiuntive come etichette per produrre campioni che inducono il discriminatore a emettere categorie specifiche.
Durante l'addestramento delle reti avversarie, ci sono potenziali modalità di fallimento da considerare. Una modalità di errore è la rete del generatore che produce semplicemente campioni dalla distribuzione dei dati reali, il che non minimizzerebbe la sua funzione obiettivo. L'overfitting è un'altra preoccupazione, poiché il generatore potrebbe memorizzare i dati effettivi invece di generare campioni diversi.
Per evitare l'overfitting, è importante limitare l'esposizione del generatore ai dati reali e assicurarsi che non abbia troppe opportunità di memorizzarli. Il set di dati reale non viene immesso direttamente nella rete del generatore. Il generatore apprende indirettamente dai dati reali quando influenza i pesi nella rete del discriminatore, che quindi influisce sulla perdita restituita al generatore.
In caso di successo, una rete di generatori addestrati può generare campioni che assomigliano ai dati reali ma vanno oltre. Questo può essere utile per l'aumento dei dati nell'addestramento di altre reti neurali e per scopi artistici. Durante la conferenza sono stati discussi esempi di reti generative contraddittorie utilizzate per l'arte e l'aumento dei dati.
Inoltre, le reti di generatori addestrati possono essere preziose in varie applicazioni oltre all'aumento dei dati e all'arte. Una di queste applicazioni è la generazione di dati sintetici per migliorare l'addestramento delle reti neurali per risolvere altri problemi importanti.
Sfruttando la rete del generatore, possiamo generare campioni di dati specificamente personalizzati per migliorare l'addestramento delle reti neurali. Ad esempio, se abbiamo un problema di classificazione in cui le classi sono sbilanciate, possiamo utilizzare il generatore per generare campioni aggiuntivi per la classe sottorappresentata. Questo può aiutare a bilanciare il set di dati e migliorare la capacità del modello di apprendere la classe di minoranza.
Inoltre, le reti generative contraddittorie hanno il potenziale per generare campioni che esplorano lo spazio tra diverse categorie o combinazioni di caratteristiche. Ad esempio, se forniamo al generatore una combinazione di caratteristiche come 0,5 cane e 0,5 gatto, può produrre un campione che combina le caratteristiche di cani e gatti. Questa capacità di interpolare tra diverse categorie o caratteristiche apre possibilità per risultati creativi e nuovi.
Le reti generative contraddittorie hanno trovato applicazioni in vari domini. Nel campo della visione artificiale, sono stati utilizzati per generare immagini realistiche, migliorare la qualità dell'immagine e persino creare falsi profondi. Nell'elaborazione del linguaggio naturale, sono stati impiegati per generare testi realistici, tradurre da una lingua all'altra e persino creare chatbot.
È importante notare che la formazione di reti antagonistiche generative può essere un compito impegnativo. Richiede un'attenta messa a punto degli iperparametri, la selezione di funzioni di perdita appropriate e la gestione del compromesso tra le reti del generatore e del discriminatore. Inoltre, garantire la stabilità dell'addestramento ed evitare il collasso della modalità, in cui il generatore produce solo un set limitato di campioni, sono considerazioni importanti.
Nonostante queste sfide, le reti generative contraddittorie hanno dimostrato capacità impressionanti nel generare campioni realistici e diversificati. La ricerca in corso continua a far progredire il campo, esplorando nuove architetture, funzioni di perdita e tecniche di addestramento per migliorare ulteriormente le prestazioni e l'affidabilità di queste reti.
In conclusione, le reti generative contraddittorie offrono un potente framework per la modellazione generativa. Addestrando una rete di generatori e discriminatori in modo contraddittorio, possiamo imparare a generare campioni che assomigliano alla reale distribuzione dei dati. Ciò apre interessanti possibilità nell'aumento dei dati, nelle applicazioni creative e nel miglioramento della formazione per varie attività di apprendimento automatico.
AlphaGo e AlphaGo Zero (DL 24)
AlphaGo e AlphaGo Zero (DL 24)
AlphaGo e AlphaGo Zero sono due agenti go-play sviluppati dalla consociata di Google DeepMind. Questi sistemi combinano reti neurali convoluzionali profonde con l'apprendimento per rinforzo self-play per ottenere progressi significativi negli algoritmi di go-play. Nel 2016, AlphaGo è diventata la prima IA a sconfiggere un campione del mondo umano. In questo video, esploreremo come DeepMind ha creato questi sistemi e discuteremo i risultati chiave dei documenti di ricerca pubblicati su AlphaGo e AlphaGo Zero.
Go è un gioco per due giocatori con regole semplici: i giocatori, a turno, posizionano pietre bianche e nere su un'intersezione vuota del tabellone. Le pietre oi gruppi di pietre circondati dai pezzi dell'avversario vengono catturati e rimossi dal tabellone. Il gioco termina quando entrambi i giocatori passano e il punteggio è determinato dal numero di pietre e intersezioni vuote circondate.
Lo sviluppo di un algoritmo AI per il go richiede la pianificazione di più mosse in anticipo. I motori di scacchi come Deep Blue hanno ottenuto questo risultato considerando tutte le possibili sequenze di mosse e valutando le posizioni risultanti sulla scacchiera. Tuttavia, valutare la qualità di una posizione di go board è più impegnativo a causa della complessità del gioco e del fattore di ramificazione più elevato. Limitare lo spazio di ricerca a mosse promettenti e determinare la qualità della posizione sul tabellone sono stati problemi significativi che AlphaGo ha affrontato utilizzando il deep learning.
AlphaGo ha risolto questi problemi addestrando reti neurali profonde per stimare il valore e la politica degli stati del consiglio di amministrazione. La rete del valore prevede la probabilità di vincere da un dato stato, mentre la rete della politica stima la qualità del movimento. Questi modelli guidano l'algoritmo di pianificazione limitando l'attenzione alle mosse promettenti e fornendo stime di qualità.
L'architettura di AlphaGo e AlphaGo Zero è diversa. L'AlphaGo originale utilizzava policy e reti di valore separate, mentre AlphaGo Zero utilizzava un'unica rete con testine separate per gli output di policy e valore. Entrambe le architetture incorporano blocchi residui per estrarre importanti informazioni sullo stato della scheda. I dati di allenamento per AlphaGo includevano partite giocate da dilettanti di alto livello, mentre AlphaGo Zero utilizzava esclusivamente dati di auto-gioco.
Allenare la rete del valore è relativamente semplice, utilizzando le rappresentazioni dello stato del consiglio di amministrazione e le etichette di vittoria/sconfitta. L'addestramento della policy network è più complesso, in quanto richiede la previsione della qualità del movimento. AlphaGo Zero ha migliorato questo aspetto addestrando la rete delle politiche sulle stime della qualità delle mosse generate dall'algoritmo di ricerca durante le implementazioni. Nel corso del tempo, la rete delle politiche impara a stimare la qualità del movimento diversi passaggi nel futuro.
Sia AlphaGo che AlphaGo Zero utilizzano Monte Carlo Tree Search (MCTS) come algoritmo di pianificazione. MCTS esegue implementazioni per raccogliere informazioni sui valori della sequenza di movimenti e sull'incertezza. L'algoritmo di ricerca utilizza le reti di criteri e valori per valutare gli stati del tabellone e stimare la qualità delle mosse. Attraverso l'apprendimento per rinforzo self-play, entrambi i sistemi migliorano le stime di qualità delle loro reti e diventano giocatori più forti.
Nel complesso, lo sviluppo di AlphaGo e AlphaGo Zero rappresenta una pietra miliare significativa nell'AI go-playing. Questi sistemi combinano il deep learning con l'apprendimento per rinforzo e gli algoritmi di pianificazione per ottenere prestazioni straordinarie e un gioco strategico nel gioco del go.
Grafici di calcolo (DL 25)
Grafici di calcolo (DL 25)
Questa lezione si concentra sui grafici computazionali, che sono rappresentazioni visive del flusso di dati e della sequenza di calcoli in un programma. Sebbene i grafici computazionali siano comunemente usati per comprendere la propagazione in avanti e all'indietro nelle reti neurali, possono essere applicati a qualsiasi programma. Rendendo esplicite le operazioni implicite in una rete neurale, i grafici computazionali forniscono una comprensione più chiara dei calcoli coinvolti.
In un grafico computazionale, ogni nodo rappresenta un calcolo, come la moltiplicazione dei pesi per le attivazioni, la somma degli input ponderati, il calcolo delle funzioni di attivazione o il calcolo della perdita. Le connessioni tra i nodi rappresentano le dipendenze tra le variabili nel programma. Sapendo come prendere la derivata di qualsiasi nodo nel grafico, possiamo rappresentare sia i passi di propagazione in avanti che quelli di retropropagazione in una rete neurale.
Per calcolare le derivate parziali necessarie per la discesa del gradiente in una rete neurale, propaghiamo le derivate all'indietro attraverso la rete utilizzando la regola della catena. Ad ogni passaggio, moltiplichiamo la derivata dell'operazione corrente per la derivata del nodo precedente. Quando un nodo ha più uscite, sommiamo le derivate provenienti da ogni uscita.
Il grafo computazionale ci permette di calcolare gli output di una rete neurale e calcolare le derivate parziali della perdita rispetto a ciascun peso. Lavorando a ritroso attraverso un ordinamento topologico del grafico e propagando le derivate, possiamo determinare le derivate parziali per qualsiasi parametro nella rete.
La lezione fornisce anche esempi di grafici computazionali, che illustrano come vengono calcolati i valori intermedi e le derivate. Suddividendo le funzioni in calcoli più piccoli e assegnando nomi a valori intermedi, possiamo calcolare sia gli output delle funzioni che le loro derivate parziali utilizzando il grafico computazionale.
Inoltre, i grafici computazionali possono gestire non solo variabili scalari ma anche variabili che rappresentano vettori, matrici o tensori. Utilizzando variabili che corrispondono a oggetti di dimensione superiore, come vettori di attivazione e matrici di peso, possiamo applicare grafici computazionali a reti neurali densamente connesse e altri calcoli complessi.
Per estendere il grafico computazionale per una rete neurale densamente connessa, possiamo introdurre variabili che corrispondono a vettori di attivazioni o matrici di pesi. Chiamiamo il vettore di attivazioni a questo intero livello della rete come "a1", indicato da un simbolo di cappello vettoriale (^). Allo stesso modo, possiamo rappresentare i pesi come una matrice W1.
In questo grafico esteso, l'input per ciascun nodo nel livello è il prodotto scalare del vettore di attivazione (a1) e della corrispondente matrice dei pesi (W1). Possiamo rappresentare questa operazione come una moltiplicazione di matrici: a1 * W1.
Inoltre, possiamo introdurre un vettore di polarizzazione (b1) associato a ciascun nodo nel livello. Il termine bias viene aggiunto in base all'elemento al prodotto scalare di attivazioni e pesi prima di applicare una funzione di attivazione.
Successivamente, applichiamo una funzione di attivazione (come un sigmoid o ReLU) elemento-saggio al vettore risultante. Indichiamo questo vettore come "a2" (con il simbolo di un cappello), che rappresenta le attivazioni del livello successivo.
Possiamo ripetere questo processo per i livelli successivi nella rete neurale, collegando i nodi con i bordi e propagando le attivazioni e i pesi attraverso il grafo.
Per calcolare il passaggio in avanti in questo grafico computazionale esteso, inizieremmo con i valori di input (come le intensità dei pixel per un'immagine) e li propagheremmo in avanti attraverso il grafico, applicando moltiplicazioni di matrici, addizioni per elemento e funzioni di attivazione su ciascun nodo fino a quando non otteniamo l'output finale.
Quando si tratta di backpropagation, l'obiettivo è calcolare le derivate parziali della funzione di perdita rispetto a ciascun peso nella rete. Estendendo il grafico computazionale, possiamo tracciare il flusso dei gradienti all'indietro attraverso la rete, consentendoci di calcolare in modo efficiente queste derivate parziali utilizzando la regola della catena.
Durante la retropropagazione, iniziamo con la derivata della funzione di perdita rispetto all'output finale e utilizziamo la regola della catena per propagarla all'indietro attraverso il grafico. Ad ogni nodo, moltiplichiamo la derivata in entrata per la derivata dell'operazione corrispondente (funzione di attivazione, moltiplicazione di matrici, ecc.) rispetto ai suoi input.
Seguendo questo processo, possiamo calcolare i gradienti per ciascun peso nella rete, il che ci consente di aggiornare i pesi utilizzando algoritmi di ottimizzazione come la discesa del gradiente e le sue varianti.
In sintesi, l'estensione del grafico computazionale per rappresentare una rete neurale densamente connessa ci consente di visualizzare e calcolare i passaggi di propagazione avanti e indietro. Consente un calcolo efficiente dei gradienti e facilita l'ottimizzazione della rete attraverso gli aggiornamenti del peso.
Differenziazione Automatica (DL 26)
Differenziazione Automatica (DL 26)
La differenziazione automatica in modalità inversa (AD) è una tecnica utilizzata per calcolare i gradienti delle funzioni. In Julia, la libreria Zygote fornisce funzionalità di differenziazione automatica. Quando si lavora su progetti di machine learning su larga scala in Julia, viene comunemente utilizzata la libreria di deep learning Flux, costruita su Zygote.
Zygote offre una funzione "gradiente" che accetta un'altra funzione e argomenti di input e calcola automaticamente il gradiente in quei punti. Ad esempio, data una funzione e l'input (1, 2, -1), Zygote può calcolare il gradiente come (22, 4, -12). Questa funzione è comoda ma simile a quella che potresti aver implementato in Project Zero.
Il potere della differenziazione automatica risiede nella sua capacità di calcolare gradienti per funzioni più complesse. Ad esempio, consideriamo una funzione per calcolare l'ennesimo elemento della sequenza di Fibonacci. Usando la funzione gradiente di Zygote, possiamo calcolare il gradiente di questa funzione di Fibonacci. Agli ingressi (0, 1, 12), la derivata parziale rispetto ad "a" è 89, e rispetto a "b" è 144. Tuttavia, non c'è derivata parziale rispetto ad "n" poiché non è una continua variabile in questa funzione.
Per capire come Zygote calcola il gradiente per tali funzioni, possiamo esaminare la differenziazione automatica in modalità inversa. In AD in modalità inversa, viene costruito un grafico di calcolo mentre la funzione viene eseguita e le derivate parziali vengono retropropagate attraverso il grafico. Per ottenere ciò, i valori numerici delle variabili vengono sostituiti con oggetti che memorizzano sia il valore che informazioni aggiuntive per il calcolo della derivata.
In questi oggetti possono essere memorizzati due tipi di informazioni: (1) il valore della variabile e le sue derivate parziali rispetto a ciascun input (modalità forward AD), oppure (2) il valore della variabile e le variabili precedenti nel calcolo e la funzione usata per calcolarne il valore (modalità inversa AD). Per il deep learning, l'AD in modalità inversa è più utile in quanto scala meglio nel numero di output (tipicamente uno) piuttosto che in input (ad esempio, parametri di peso in una rete neurale).
Creando questi oggetti auto-diff in modalità inversa e costruendo un grafico di calcolo durante la valutazione della funzione, possiamo eseguire la retropropagazione in un secondo momento. Le variabili intermedie memorizzano i risultati dei calcoli e gli spigoli padre negli oggetti indicano le dipendenze tra i nodi nel grafico. Il grafico computazionale, inclusi i nodi funzione e le dipendenze, è costruito in modo implicito. Applicando la regola della catena a ciascun nodo, le derivate possono essere propagate all'indietro attraverso il grafico.
Questa raccolta di oggetti auto-diff in modalità inversa, con i relativi valori, genitori e funzioni, viene comunemente archiviata in un nastro sfumato. Con questo approccio è possibile differenziare anche funzioni con calcoli intermedi più complessi, purché siano note le derivate delle componenti. I valori di queste variabili possono essere scalari, vettori, matrici o tensori, consentendo la differenziazione delle funzioni con vari tipi di dati.
In sintesi, la differenziazione automatica in modalità inversa, supportata da librerie come Zygote in Julia, ci consente di calcolare in modo efficiente i gradienti per le funzioni. Costruendo un grafico di calcolo e propagando le derivate attraverso di esso, possiamo automatizzare il processo di calcolo dei gradienti, rendendolo adatto al deep learning e ad altre applicazioni complesse.
Coursera Neural Networks for Machine Learning — Geoffrey Hinton - Lezione 1.1 — Perché abbiamo bisogno del machine learning
Lezione 1.1 — Perché abbiamo bisogno dell'apprendimento automatico [Reti neurali per l'apprendimento automatico]
Benvenuto al corso Coursera sulle reti neurali per l'apprendimento automatico! In questo corso esploreremo l'affascinante campo delle reti neurali e le loro applicazioni nell'apprendimento automatico. Prima di addentrarci nelle complessità degli algoritmi di apprendimento delle reti neurali, prendiamoci un momento per discutere l'importanza dell'apprendimento automatico, i suoi usi e fornire alcuni esempi per illustrarne le capacità.
L'apprendimento automatico è necessario per risolvere problemi complessi difficili da affrontare con gli approcci di programmazione tradizionali. Ad esempio, riconoscere un oggetto tridimensionale da diversi punti di vista, in condizioni di illuminazione variabili e in scene disordinate è un compito impegnativo. La complessità sta nel fatto che non comprendiamo appieno come i nostri cervelli eseguano tale riconoscimento, rendendo difficile scrivere programmi espliciti per risolvere questi problemi. Anche se scoprissimo il programma sottostante, potrebbe essere estremamente complicato da implementare in modo efficace.
Un altro esempio è il rilevamento di transazioni fraudolente con carta di credito. I tradizionali sistemi basati su regole faticano a cogliere la complessità dei modelli di frode, in quanto richiedono la combinazione di numerose regole inaffidabili che cambiano costantemente nel tempo. L'apprendimento automatico offre un approccio alternativo sfruttando un gran numero di esempi che specificano gli output corretti per determinati input. Un algoritmo di apprendimento elabora questi esempi per produrre un programma che affronta efficacemente il compito. Il programma risultante potrebbe avere un aspetto diverso dai tradizionali programmi artigianali, potenzialmente contenenti milioni di numeri ponderati. Tuttavia, se implementato correttamente, può generalizzare bene a nuovi casi e adattarsi al cambiamento dei dati riqualificandosi su informazioni aggiornate.
L'apprendimento automatico eccelle nel riconoscere modelli, come oggetti in scene reali, espressioni facciali o parole pronunciate. È anche potente nell'identificare anomalie, come sequenze insolite di transazioni con carta di credito o letture anomale del sensore in una centrale nucleare. Inoltre, l'apprendimento automatico è prezioso nelle attività di previsione, come la previsione dei prezzi delle azioni o la previsione delle preferenze degli utenti in base alle loro scelte passate e al comportamento degli altri.
Durante questo corso, utilizzeremo il database MNIST di cifre scritte a mano come esempio standard per spiegare molti algoritmi di apprendimento automatico. Questo database è ampiamente utilizzato e consente un confronto efficace di diversi metodi. Utilizzando tali attività, possiamo comprendere meglio i concetti e i principi alla base dell'apprendimento automatico.
Questi esempi scalfiscono solo la superficie delle straordinarie capacità dell'apprendimento automatico e delle reti neurali. Con i progressi tecnologici e le risorse computazionali prontamente disponibili, i complessi modelli di machine learning possono essere addestrati e implementati in modo efficiente. Questi modelli hanno il potenziale per affrontare compiti sempre più complessi, spingendo i limiti di ciò che possiamo ottenere con l'apprendimento automatico.
In questo corso, approfondiremo le complessità delle reti neurali, discutendo le loro architetture, gli algoritmi di addestramento e le tecniche di implementazione pratica. Alla fine del corso, avrai una solida base nelle reti neurali e sarai attrezzato per applicarle a un'ampia gamma di problemi.
Unisciti a noi in questo entusiasmante viaggio nel mondo delle reti neurali per l'apprendimento automatico. Preparati ad espandere le tue conoscenze, migliorare le tue abilità e sbloccare il potenziale di questa tecnologia trasformativa!
Lezione 1.2 — Cosa sono le reti neurali
Lezione 1.2 — Cosa sono le reti neurali [Reti neurali per l'apprendimento automatico]
In questo video parlerò dei veri neuroni nel cervello, che servono come base per le reti neurali artificiali che esploreremo in questo corso. Anche se non ci concentreremo molto sui neuroni reali durante la maggior parte del corso, inizialmente volevo fornire una breve panoramica.
Ci sono diversi motivi per studiare come le reti di neuroni possono calcolare. In primo luogo, ci aiuta a capire il funzionamento del cervello. Mentre condurre esperimenti direttamente sul cervello sembra logico, è un organo complesso e delicato che non resiste bene alla manipolazione. Pertanto, le simulazioni al computer sono essenziali per comprendere i risultati empirici.
In secondo luogo, lo studio delle reti neurali ci permette di cogliere il concetto di calcolo parallelo, ispirato dalla capacità del cervello di elaborare attraverso una vasta rete di neuroni relativamente lenti. La comprensione di questo stile di calcolo parallelo potrebbe portare a progressi nei computer paralleli, che differiscono in modo significativo dai processori seriali convenzionali. È particolarmente efficace per compiti in cui il cervello eccelle, come la visione, ma non è adatto per compiti come la moltiplicazione.
La terza ragione, rilevante per questo corso, riguarda la risoluzione di problemi pratici utilizzando algoritmi di apprendimento innovativi ispirati al cervello. Questi algoritmi possono essere molto preziosi anche se non imitano esattamente le operazioni del cervello. Pertanto, anche se non approfondiremo il modo in cui funziona il cervello, serve come fonte di ispirazione, indicando che grandi reti parallele di neuroni possono eseguire calcoli complessi.
In questo video, fornirò maggiori informazioni sul funzionamento del cervello. Un tipico neurone corticale è costituito da un corpo cellulare, un assone per inviare messaggi ad altri neuroni e un albero dendritico per ricevere messaggi da altri neuroni. Nel punto in cui l'assone di un neurone si connette con l'albero dendritico di un altro neurone, troviamo una sinapsi. Quando un picco di attività viaggia lungo l'assone, inietta carica nel neurone postsinaptico.
Un neurone genera picchi quando la carica ricevuta nel suo albero dendritico depolarizza una regione chiamata collinetta dell'assone. Una volta depolarizzato, il neurone trasmette un picco lungo il suo assone, che è essenzialmente un'onda di depolarizzazione.
Le sinapsi stesse hanno una struttura interessante. Contengono vescicole piene di sostanze chimiche trasmittenti. Quando un picco raggiunge l'assone, innesca la migrazione e il rilascio di queste vescicole nella fessura sinaptica. Le molecole del trasmettitore diffondono attraverso la fessura sinaptica e si legano alle molecole del recettore sulla membrana del neurone postsinaptico. Questo legame altera la forma delle molecole, creando buchi nella membrana che consentono a specifici ioni di entrare o uscire dal neurone postsinaptico, modificandone così lo stato di depolarizzazione.
Le sinapsi sono relativamente lente rispetto alla memoria del computer, ma presentano vantaggi rispetto alla memoria ad accesso casuale nei computer. Sono piccoli, a bassa potenza e adattabili. L'adattabilità è fondamentale in quanto consente alle sinapsi di modificare i propri punti di forza utilizzando i segnali disponibili localmente. Questa adattabilità facilita l'apprendimento e la capacità di eseguire calcoli complessi.
Sorge quindi la domanda: in che modo le sinapsi decidono come cambiare la loro forza? Quali sono le regole per il loro adattamento? Queste sono considerazioni essenziali.
Per riassumere, il cervello funziona attraverso i neuroni che ricevono input da altri neuroni. Solo una piccola frazione di neuroni riceve input dai recettori sensoriali. I neuroni comunicano all'interno della corteccia trasmettendo picchi di attività. L'effetto di un input su un neurone dipende dal suo peso sinaptico, che può essere positivo o negativo. Questi pesi sinaptici si adattano, consentendo all'intera rete di apprendere ed eseguire vari calcoli, come il riconoscimento degli oggetti, la comprensione del linguaggio, la pianificazione e il controllo motorio.
Il cervello è composto da circa 10^11 neuroni, ciascuno con circa 10^4 pesi sinaptici. Di conseguenza, il cervello contiene un numero immenso di pesi sinaptici, molti dei quali contribuiscono ai calcoli in corso entro millisecondi. Ciò fornisce al cervello una larghezza di banda superiore per l'archiviazione delle conoscenze rispetto alle moderne workstation.
Un altro aspetto intrigante del cervello è la sua modularità. Diverse regioni della corteccia finiscono per specializzarsi in diverse funzioni. Gli input dai sensi sono diretti geneticamente a regioni specifiche, influenzando la loro eventuale funzionalità. Il danno locale al cervello provoca effetti specifici, come la perdita della comprensione del linguaggio o del riconoscimento degli oggetti. La flessibilità del cervello è evidente nel fatto che le funzioni possono trasferirsi in altre parti del cervello in risposta a un danno precoce. Ciò suggerisce che la corteccia contiene un algoritmo di apprendimento flessibile e universale che può adattarsi a compiti particolari basati sull'esperienza.
In conclusione, il cervello esegue rapidi calcoli paralleli una volta che ha appreso, combinato con una notevole flessibilità. È simile a un FPGA, in cui viene costruito hardware parallelo standard e le informazioni successive determinano il calcolo parallelo specifico da eseguire. I computer convenzionali raggiungono la flessibilità attraverso la programmazione sequenziale, ma ciò richiede processi centrali veloci per accedere alle righe di programma ed eseguire lunghi calcoli sequenziali.
Lezione 1.3 — Alcuni semplici modelli di neuroni
Lezione 1.3 — Alcuni semplici modelli di neuroni [Neural Networks for Machine Learning]
Descriverò alcuni semplici modelli di neuroni, inclusi neuroni lineari, neuroni soglia e modelli più complessi. Questi modelli sono più semplici dei neuroni reali ma ci consentono comunque di creare reti neurali per l'apprendimento automatico. Quando comprendiamo i sistemi complessi, dobbiamo semplificarli e idealizzarli per coglierne il funzionamento. Ciò comporta la rimozione di dettagli non essenziali e l'applicazione della matematica e delle analogie. Sebbene sia importante non trascurare le proprietà essenziali, può essere utile studiare modelli noti per essere errati ma comunque utili nella pratica. Ad esempio, le reti neurali usano spesso neuroni che comunicano valori reali invece di picchi discreti, anche se i veri neuroni corticali si comportano in modo diverso.
Il tipo più semplice di neurone è il neurone lineare, che ha limitazioni computazionali ma fornisce informazioni su neuroni più complessi. Il suo output è determinato da un bias e dalla somma ponderata delle attività di input. Un grafico del pregiudizio più le attività ponderate forma una linea retta. Al contrario, i neuroni a soglia binaria, introdotti da McCulloch e Pitts, inviano un picco di attività se la somma pesata supera una soglia. Questi picchi rappresentano valori di verità che i neuroni combinano per produrre il proprio valore di verità. Mentre una volta la logica era vista come il paradigma principale per comprendere la mente, ora si pensa che il cervello combini varie fonti di prove inaffidabili, rendendo la logica meno adatta.
I neuroni a soglia binaria possono essere descritti da due equazioni equivalenti. L'input totale è la somma delle attività di input moltiplicate per i pesi e l'output è uno se l'input totale è superiore alla soglia. In alternativa, l'input totale include un termine di polarizzazione e l'output è uno se l'input totale è superiore a zero. Un neurone lineare rettificato combina le proprietà dei neuroni lineari e dei neuroni della soglia binaria. Calcola una somma ponderata lineare ma applica una funzione non lineare per determinare l'output. L'output è zero se la somma è inferiore a zero e uguale alla somma se è superiore a zero, risultando in un output non lineare ma lineare sopra zero.
I neuroni sigmoidi sono comunemente usati nelle reti neurali artificiali. Forniscono un output a valori reali che è una funzione uniforme e limitata dell'input totale. Viene spesso utilizzata la funzione logistica, in cui l'output è uno diviso per uno più l'esponente negativo dell'input totale. Per grandi input positivi, l'output è uno, mentre per grandi input negativi, l'output è zero. La funzione sigmoidea ha derivate lisce, facilitando l'apprendimento nelle reti neurali.
I neuroni binari stocastici usano le stesse equazioni delle unità logistiche, ma invece di emettere la probabilità come un numero reale, prendono una decisione probabilistica e emettono uno o zero. La probabilità rappresenta la probabilità di produrre un picco. Se l'input è molto positivo, probabilmente produrranno uno, mentre un input molto negativo probabilmente risulterà in uno zero. Le unità lineari rettificate seguono un principio simile ma introducono casualità nella produzione di picchi. L'output di un'unità lineare rettificata rappresenta la velocità di produzione dei picchi e i tempi di picco effettivi sono determinati da un processo di Poisson casuale all'interno dell'unità.
Questi comportamenti stocastici nei neuroni binari e nelle unità lineari rettificate introducono casualità intrinseca nella rete neurale. Mentre il tasso di produzione dei picchi è deterministico, la tempistica effettiva dei picchi diventa un processo casuale. Questa casualità aggiunge variabilità e stocasticità al sistema.
La comprensione di questi diversi modelli di neuroni ci fornisce una gamma di capacità computazionali. I neuroni lineari sono limitati dal punto di vista computazionale ma possono offrire informazioni su sistemi più complessi. I neuroni della soglia binaria consentono il processo decisionale basato sui confronti della soglia. I neuroni lineari rettificati combinano linearità e non linearità, consentendo contemporaneamente il processo decisionale e l'elaborazione lineare. I neuroni sigmoidi forniscono output lisci e limitati e sono comunemente usati nelle reti neurali a causa della loro natura differenziabile. I neuroni binari stocastici e le unità lineari rettificate introducono la casualità nel sistema, consentendo il processo decisionale probabilistico e introducendo la variabilità.
Combinando diversi tipi di neuroni nelle reti neurali, possiamo creare potenti modelli per attività di machine learning. Queste reti possono apprendere dai dati, adattare i loro pesi e pregiudizi e fare previsioni o classificazioni basate su modelli appresi. Comprendere i principi e i comportamenti di questi modelli di neuroni ci aiuta a progettare e addestrare reti neurali efficaci.
Tuttavia, è essenziale ricordare che questi modelli di neuroni sono astrazioni semplificate di neuroni reali nel cervello. Il cervello è un sistema incredibilmente complesso e dinamico e questi modelli servono come approssimazioni per catturare alcuni aspetti dell'elaborazione neurale. Anche se potrebbero non catturare l'intera complessità dei neuroni reali, forniscono strumenti utili per costruire modelli computazionali e ottenere straordinarie capacità di apprendimento automatico.
Lo studio di diversi modelli di neuroni, inclusi neuroni lineari, neuroni soglia, neuroni lineari rettificati, neuroni sigmoidei e neuroni binari stocastici, ci consente di comprendere varie proprietà e comportamenti computazionali. Questi modelli costituiscono la base per la costruzione di reti neurali e ci consentono di eseguire diverse attività di apprendimento automatico. Sebbene semplificati, offrono preziose informazioni sul funzionamento dei sistemi neurali.
Lezione 1.4 — Un semplice esempio di apprendimento
Lezione 1.4 — Un semplice esempio di apprendimento [Neural Networks for Machine Learning]
In questo esempio di machine learning, esploreremo una semplice rete neurale che impara a riconoscere le cifre. Durante tutto il processo, assisterai all'evoluzione dei pesi utilizzando un algoritmo di apprendimento di base.
Il nostro obiettivo è formare una rete semplice per identificare le forme scritte a mano. La rete è composta da due livelli: neuroni di input che rappresentano le intensità dei pixel e neuroni di output che rappresentano le classi. L'obiettivo è che il neurone di output corrispondente a una forma specifica diventi attivo quando viene presentata quella forma.
Ogni pixel attivo "vota" per le forme di cui fa parte e questi voti hanno intensità diverse. La forma con il maggior numero di voti vince, supponendo che ci sia concorrenza tra le unità di output. Approfondiremo questo aspetto competitivo in una lezione successiva.
Per visualizzare i pesi, abbiamo bisogno di un display che possa contenere migliaia di pesi. Invece di scrivere i pesi sulle singole connessioni tra unità di input e output, creeremo piccole mappe per ciascuna unità di output. Queste mappe rappresentano la forza delle connessioni dai pixel di input utilizzando blob in bianco e nero. L'area di ogni blob indica la magnitudine, mentre il colore rappresenta il segno della connessione.
Inizialmente, ai pesi vengono assegnati piccoli valori casuali. Per migliorare i pesi, presenteremo alla rete i dati e la addestreremo per regolare i pesi di conseguenza. Quando viene mostrata un'immagine, incrementiamo i pesi dai pixel attivi alla classe corretta. Tuttavia, per evitare che i pesi diventino eccessivamente grandi, decrementiamo anche i pesi dai pixel attivi alla classe indovinata dalla rete. Questo approccio formativo guida la rete a prendere le giuste decisioni piuttosto che attenersi alle sue tendenze iniziali.
Dopo aver mostrato alla rete diverse centinaia di esempi di allenamento, osserviamo nuovamente i pesi. Cominciano a formare schemi regolari. Con ulteriori esempi di allenamento, i pesi continuano a cambiare e alla fine si stabilizzano. A questo punto, i pesi assomigliano a modelli per le forme. Ad esempio, i pesi che entrano nell'unità "uno" servono da modello per identificarli. Allo stesso modo, i pesi che entrano nell'unità "nove" si concentrano sulla discriminazione tra nove e sette in base alla presenza o all'assenza di caratteristiche specifiche.
Vale la pena notare che questo algoritmo di apprendimento, a causa della semplicità della rete, può raggiungere solo una capacità limitata di discriminare le forme. I pesi appresi funzionano effettivamente come modelli e la rete determina il vincitore in base alla sovrapposizione tra il modello e l'inchiostro. Tuttavia, questo approccio non è all'altezza di fronte alla complessità delle variazioni nelle cifre scritte a mano. Per risolvere questo problema, dobbiamo estrarre le caratteristiche e analizzare le loro disposizioni, poiché il semplice abbinamento di modelli di forme intere non può risolvere adeguatamente il problema.
In sintesi, l'esempio dimostra l'addestramento di una semplice rete neurale per riconoscere le cifre. Mentre i pesi della rete si evolvono e assomigliano a modelli per le forme, i limiti di questo approccio diventano evidenti di fronte alle intricate variazioni nelle cifre scritte a mano.
Lezione 1.5 — Tre tipi di apprendimento
Lezione 1.5 — Tre tipi di apprendimento [Reti neurali per l'apprendimento automatico]
In questo video, parlerò di tre tipi principali di apprendimento automatico: apprendimento supervisionato, apprendimento per rinforzo e apprendimento non supervisionato. Il corso si concentrerà principalmente sull'apprendimento supervisionato nella prima metà e sull'apprendimento non supervisionato nella seconda metà. Sfortunatamente, a causa dei limiti di tempo, non tratteremo l'apprendimento per rinforzo.
L'apprendimento supervisionato implica la previsione di un output dato un vettore di input. L'obiettivo è prevedere con precisione un numero reale o un'etichetta di classe. La regressione si occupa di numeri reali, come la previsione dei prezzi delle azioni, mentre la classificazione implica l'assegnazione di etichette, come la distinzione tra casi positivi e negativi o il riconoscimento di cifre scritte a mano. L'apprendimento supervisionato si basa su una classe modello, che è un insieme di modelli candidati rappresentati da funzioni che mappano gli input agli output utilizzando parametri numerici (W). Questi parametri vengono regolati per ridurre al minimo la discrepanza tra l'output previsto (Y) e l'output corretto (t).
L'apprendimento per rinforzo si concentra sulla selezione di azioni o sequenze di azioni per massimizzare i premi ricevuti. Le azioni vengono scelte in base a ricompense occasionali e l'obiettivo è massimizzare la somma prevista di ricompense future. Un fattore di sconto viene in genere impiegato per dare la priorità ai premi immediati rispetto a quelli distanti. L'apprendimento per rinforzo presenta sfide a causa dei ritardi nelle ricompense e delle informazioni limitate trasmesse dalle ricompense scalari.
L'apprendimento non supervisionato, che sarà ampiamente trattato nella seconda metà del corso, comporta la scoperta di utili rappresentazioni interne dei dati di input. Per molti anni, l'apprendimento non supervisionato è stato trascurato a favore del clustering, poiché era difficile definire gli obiettivi dell'apprendimento non supervisionato. Tuttavia, l'apprendimento non supervisionato serve a vari scopi, inclusa la creazione di rappresentazioni interne utili per il successivo apprendimento supervisionato o di rinforzo. Mira a generare rappresentazioni compatte a bassa dimensione di input ad alta dimensione, come le immagini, identificando le varietà sottostanti. L'apprendimento non supervisionato può anche fornire rappresentazioni economiche utilizzando caratteristiche apprese, in cui gli input possono essere espressi in codici binari o sparsi. Inoltre, l'apprendimento non supervisionato comprende il clustering, che può essere visto come un caso estremo di ricerca di funzionalità sparse, con una funzionalità per cluster.
Questo video copre i tre principali tipi di apprendimento automatico: apprendimento supervisionato, apprendimento per rinforzo e apprendimento non supervisionato. Mentre l'apprendimento supervisionato si concentra sulla previsione dei risultati, l'apprendimento per rinforzo è incentrato sulla massimizzazione delle ricompense attraverso la selezione delle azioni. L'apprendimento non supervisionato mira a scoprire utili rappresentazioni interne, come rappresentazioni a bassa dimensione o caratteristiche apprese, e include l'identificazione di cluster sottostanti.
Lezione 2.1 — Tipi di architetture di reti neurali
Lezione 2.1 — Tipi di architetture di reti neurali [Neural Networks for Machine Learning]
Le reti neurali possono avere diversi tipi di architetture, che si riferiscono a come i neuroni sono collegati. L'architettura più comune nelle applicazioni pratiche è una rete neurale feed-forward, in cui le informazioni fluiscono dalle unità di input attraverso livelli nascosti alle unità di output. D'altra parte, le reti neurali ricorrenti sono più interessanti in quanto consentono alle informazioni di fluire in cicli, consentendo la memoria a lungo termine e dinamiche complesse. La formazione di reti ricorrenti è impegnativa a causa della loro complessità, ma i recenti progressi le hanno rese più addestrabili e capaci di compiti impressionanti.
Un altro tipo di architettura sono le reti connesse simmetricamente, in cui i pesi tra le unità sono gli stessi in entrambe le direzioni. Queste reti seguono una funzione energetica e sono più facili da analizzare rispetto alle reti ricorrenti. Tuttavia, sono più limitati nelle loro capacità e non possono modellare i cicli.
Nelle reti neurali feed-forward, ogni livello calcola le trasformazioni tra l'input e l'output, risultando in nuove rappresentazioni a ogni livello. Le funzioni non lineari vengono applicate alle attività dei neuroni in ogni strato per catturare la somiglianza e la diversità tra gli input. Al contrario, le reti neurali ricorrenti utilizzano cicli diretti nel loro grafico di connessione, consentendo dinamiche complesse e modellazione sequenziale dei dati. Gli stessi pesi vengono utilizzati in ogni fase temporale e gli stati delle unità nascoste determinano gli stati della fase temporale successiva.
Le reti neurali ricorrenti hanno la capacità di ricordare le informazioni per lungo tempo nei loro stati nascosti, ma addestrarle a utilizzare questa capacità è impegnativo. Tuttavia, gli algoritmi recenti hanno compiuto progressi significativi nell'addestramento delle reti ricorrenti. Queste reti possono essere utilizzate per attività come la previsione del carattere successivo in una sequenza, la generazione di testo o la modellazione di dati sequenziali.
Nel complesso, le architetture di rete neurale possono variare nelle loro connessioni e capacità, che vanno dalle reti di feed-forward per calcoli semplici alle reti ricorrenti per memoria e dinamiche complesse.