Cosa sono gli autocodificatori?
Il Novembre 11, 2021 da adminUna leggera introduzione agli autocodificatori e alle loro varie applicazioni,l’API Python di alto livello di TensorFlow per costruire e addestrare modelli di deep learning.
常常見到 Autoencoder 的變形以及應用,打算花幾篇的時間好好的研究一下,順便練習 Tensorflow.keras 的 API 使用。
- Cosa è Autoencoder
- Tipi di Autoencoder
- Applicazione di Autoencoder
- Implementazione
- Grandi esempi
- Conclusione
Difficoltà: ★ ★ ☆ ☆ ☆
後記: 由於 Tensorflow 2.0 alpha 已於 3/8號釋出,但此篇是在1月底完成的,故大家可以直接使用安裝使用看看,但需要更新至相對應的 CUDA10。
Che cos’è Autoencoder?
首先,什麼是 Autoencoder 呢? 不囉唆,先看圖吧!
Il concetto originale di Autoencoder è molto semplice, è quello di buttare dentro un dato di input e ottenere esattamente gli stessi dati del dato di input attraverso una rete neurale.Il codificatore prende prima i dati in ingresso, li comprime in un vettore di dimensioni più piccole Z, e poi immette lo Z nel decodificatore per riportare lo Z alla sua dimensione originale.Sembra facile, ma diamo un’occhiata più da vicino e vediamo se è così facile.
Encoder:
Encoder è responsabile della compressione dei dati di input originali in un vettore bidimensionale C. Questo C, che di solito chiamiamo codice, vettore latente o vettore di caratteristiche, ma io sono solito chiamarlo spazio latente, perché C rappresenta una caratteristica nascosta.Encoder può comprimere i dati originali in un vettore bidimensionale significativo, il che significa che Autoencoder ha una riduzione della dimensionalità, e lo strato nascosto ha una trasformazione non lineare di attivazione, quindi questo Encoder è come una versione potente di PCA, perché Encoder può fare una trasformazione non lineareriduzione di dimensione!
Decoder:
Quello che fa il Decoder è di restituire lo spazio latente ai dati di input il più possibile, che è una trasformazione dei vettori di caratteristiche dallo spazio dimensionale inferiore allo spazio dimensionale superiore.
Così come si misura quanto bene Autoencoder sta lavorando! Semplicemente confrontando la somiglianza dei due dati di input originali con i dati ricostruiti.Quindi la nostra funzione di perdita può essere scritta come ….
Funzione di perdita:
Perché vogliamo minimizzare la differenza traAutoEncoder è addestrato utilizzando la backpropagation per aggiornare i pesi, proprio come una normale rete neurale.aggiornare i pesi.
Per riassumere, Autoencoder è ….
1. un’architettura di modello molto comune, comunemente usata anche per l’apprendimento non supervisionato
2. può essere usato come metodo di riduzione delle dimensioni per l’apprendimento non lineare
3. può essere usato per imparare la rappresentazione dei dati, con trasformazioni di caratteristiche rappresentative
A questo punto, dovrebbe essere facile capire com’è Autoencoder, l’architettura è molto semplice, quindi diamo un’occhiata alle sue trasformazioni!
Tipi di Autoencoder
Dopo aver spiegato i principi di base di AutoEncoder, è ora di dare un’occhiata all’uso esteso e avanzato di Autoencoder, in modo che tu possa vedere l’uso esteso di Autoencoder!
2-1. Unet:
Unet può essere usato come uno dei mezzi di segmentazione delle immagini, e l’architettura Unet può essere vista come una variante di Autoencoder.
2-2. Autocodificatori ricorsivi:
Questa è una rete che combina il nuovo testo di input con lo spazio latente di altri input, lo scopo di questa rete è la classificazione del sentimento.Questo può anche essere visto come una variante di Autoencoder, che estrae il testo sparso mentre viene digitato e trova lo spazio latente che è importante.
2-Seq2Seq:
Sequence to Sequence è un modello generativo che è stato molto popolare per un po’ di tempo. È una soluzione meravigliosa al dilemma dei tipi RNN che non sono in grado di gestire accoppiamenti indeterminati, e ha funzionato bene su argomenti come chatbot e generazione di testo.Questo può anche essere visto come una sorta di architettura Autoencoder.
Applicazioni di Autoencoder
Dopo aver visto le molte e varie varianti di Autoencoder, vediamo dove altro può essere usato Autoencoder!
3-1. Peso preaddestrato del modello
Autocodificatore può anche essere usato per il preaddestramento del peso, il che significa che il modello trova un valore iniziale migliore.Per esempio, quando vogliamo completare il modello target come target. strato nascosto è:, così all’inizio usiamo il concetto di autoencoder per inserire 784 dimensioni, e lo spazio latente nel mezzo è 1000 dimensioni per fare il pretrain prima, così queste 1000 dimensioni possono ben mantenere l’inputPoi rimuoviamo l’output originale e aggiungiamo il secondo strato, e così via.In questo modo l’intero modello avrà un valore di partenza migliore.
Huh! C’è una parte strana… se si usano 1000 neuroni per rappresentare 784 dimensioni di input, non significa che la rete deve essere copiata da capo? Qual è lo scopo dell’allenamento? Sì, ecco perché in un pre-allenamento come questo, di solito aggiungiamo il regolarizzatore L1 norm in modo che lo strato nascosto non sia copiato da capo.
Secondo il signor Li HongyiIn passato, era più comune usare tale metodo per il pre-addestramento, ma ora, a causa dell’aumento delle capacità di addestramento, non c’è più bisogno di usare questo metodo.Ma se avete pochi dati con etichetta ma un mucchio di dati senza etichetta, potete usare questo metodo per fare il pre-addestramento del peso perché Autoencoder stesso è un metodo di apprendimento non supervisionato, usiamo i dati senza etichetta per ottenere prima il pre-addestramento del peso, e poi usiamo i dati senza etichetta per ottenere il pre-addestramento del peso.Usiamo i dati non etichettati per ottenere prima il pre-allenamento dei pesi, e poi usiamo i dati etichettati per mettere a punto i pesi, in modo da ottenere un buon modello.Per maggiori dettagli, guardate il video del signor Li, è spiegato molto bene!
3-2. Segmentazione dell’immagine
Il modello Unet che abbiamo appena visto, diamo un’occhiata di nuovo, perché è fondamentalmente il problema di rilevamento dei difetti più comune nell’industria manifatturiera di Taiwan.
Prima dobbiamo etichettare i dati di input, che saranno il nostro output. Quello che dobbiamo fare è costruire una rete, inserire l’immagine originale (a sinistra, le radiografie dei denti) e generare l’output (a destra, la classificazione della struttura dei denti).In questo caso, il decoder & codificatore sarà uno strato di convoluzione con un forte giudizio grafico, estraendo caratteristiche significative e deconvoluzione di nuovo nel decoder per ottenere il risultato di segmentazione.
3-3. Video to Text
Per un problema di didascalie di immagini come questo, usiamo il modello sequence to sequence, dove i dati di input sono un gruppo di foto e l’output è un testo che descrive le foto.Il modello sequence to sequence utilizza LSTM + Conv net come encoder & decoder, che può descrivere una sequenza di azioni sequenziali & utilizzando il kernel CNN per estrarre lo spazio latente richiesto nell’immagine.ma questo compito è molto difficile da fare, quindi vi lascerò provare se siete interessati!
3-4. Image Retrieval
Image Retrieval La cosa da fare è inserire un’immagine e cercare di trovare la corrispondenza più vicina, ma se si confrontano i pixel, allora è davvero facileSe si usa Autoencoder per comprimere prima l’immagine nello spazio latente e poi calcolare la similarità sullo spazio latente dell’immagine, il risultato sarà molto migliore.Il risultato è molto migliore perché ogni dimensione nello spazio latente può rappresentare una certa caratteristica.Se la distanza è calcolata sullo spazio latente, è ragionevole trovare immagini simili.In particolare, questo sarebbe un ottimo modo di apprendimento non supervisionato, senza etichettare i dati!
Sembra che i risultati di Reconstruction siano molto migliori, con circa 10 epoche di allenamento.
4-3. Creare un modello – denoise_AE:
Inoltre, l’autocodificatore può essere usato per la rimozione del rumore, quindi qui
Prima di tutto, possiamo aggiungere del rumore all’immagine originale. La logica dell’aggiunta del rumore è di fare un semplice spostamento sul pixel originale e poi aggiungere numeri casuali.La parte di pre-elaborazione dell’immagine può essere fatta semplicemente rendendo il clip 0 se è più piccolo di 0 e 1 se è più grande di 1. Come mostrato sotto, dopo l’elaborazione dell’immagine del clip, possiamo rendere l’immagine più nitida e le aree ovvie diventano più visibili.Questo ci dà un risultato migliore quando buttiamo in Autoencoder.
e il modello stesso e Conv_AENon c’è differenza tra il modello stesso e Conv_AE, eccetto che durante il fit deve essere cambiato in
denoise_AE.fit(train_images_noise, train_images, epochs=100, batch_size=128, shuffle=True)
per ripristinare il noise_data originale ai dati di input originali
Come potete vedere, su Mnist, un semplice Autoencoder ottiene un effetto di denoising molto rapido.
Grandi esempi
Questa è una buona risorsa per chi è interessato a saperne di più
- Costruire autocodificatori in Keras la serie autoencoder è scritta chiaramente.
- Tensorflow 2.0 ufficiale documentazione tutorial, qualcosa di molto completo, solo scrivere un po ‘difficile, di spendere un bel po’ di tempo per vedere (almeno io tirare XD)
3. Li Hongyi insegnante di apprendimento profondo è anche molto consigliato, parlare molto chiaro e facile da capire, non
Conclusione
Utilizzate questo articolo per stabilire rapidamente il concetto di base di Autoencoder, alcune varianti di Autoencoder e l’applicazione discenari.4310>
I prossimi articoli inizieranno con i modelli generativi, estendendosi dal concetto di autoencoder, VAE, a GAN, e ulteriori estensioni e morphing lungo la strada.
Se ti piace l’articolo, per favore clicca qualche altro applauso (non solo una volta) come incoraggiamento!
Leggi il codice completo di questo articolo:https://github.com/EvanstsaiTW/Generative_models/blob/master/AE_01_keras.ipynb
Lascia un commento