O que são Autoencoders?
On Novembro 11, 2021 by adminUma introdução suave ao Autoencoder e suas várias aplicações. Além disso, estes tutoriais usam tf.keras,TensorFlow API de alto nível Python API para construir e treinar modelos de aprendizagem profunda.
>
>
4310>
常常見到 Autoencoder 的變形以及應用,打算花幾篇的時間好好的研究一下,順便練習 Tensorflow.keras 的 API 使用。
- O que é o Autoencoder
- Tipos de Autoencoder
- Aplicação do Autoencoder
- Implantação
- Grandes exemplos
- Conclusão
Dificuldade: ★ ★ ☆ ☆ ☆ ☆
後記: 由於 Tensorflow 2.0 alfa 已於 3/8號釋出,但此篇是在1月底完成的,故大家可以直接使用安裝使用看看,但需要更新至相對應的 CUDA10。
O que é o Autoencoder?
首先,什麼是 Autoencoder 呢? 不囉唆,先看圖吧!

O conceito original do Autoencoder é muito simples, é lançar um dado de entrada e obter exatamente os mesmos dados que os dados de entrada através de uma rede do tipo neural.O codificador primeiro recebe os dados de entrada, comprime-os num vector Z de dimensão menor e depois introduz o Z no descodificador para restaurar o Z ao seu tamanho original.Isto parece fácil, mas vamos dar uma olhada mais de perto e ver se é assim tão fácil.
Encoder:
Encoder é responsável por comprimir os dados de entrada originais num vector C de baixa dimensão. Este C, a que costumamos chamar código, vector latente ou vector de característica, mas estou habituado a chamar-lhe espaço latente, porque o C representa uma característica oculta.O codificador pode comprimir os dados originais em um vetor significativo de baixa dimensão, o que significa que o Autoencoder tem redução de dimensionalidade, e a camada oculta tem fuction de ativação de transformação não-linear, então este codificador é como uma versão poderosa do PCA, porque o codificador pode fazerredução de dimensão!
Descodificador:
O que o Descodificador faz é restaurar ao máximo o espaço latente de volta aos dados de entrada, o que é uma transformação dos vectores de características do espaço dimensional inferior para o espaço dimensional superior.
Então como você mede o quão bem o Autoencoder está funcionando ! Simplesmente comparando a semelhança dos dois dados de entrada originais com os dados reconstruídos.Assim, a nossa função de perda pode ser escrita como ….
Perda de função:

Porque queremos minimizar a diferença entre osO AutoEncoder é treinado usando a retropropagação para atualizar os pesos, assim como uma rede neural normal.actualizar os pesos.
Para resumir, Autoencoder é ….
1. uma arquitetura de modelo muito comum, também comumente usada para aprendizagem não supervisionada
2. pode ser usada como um método de redução de dimensão para não-linear
3. pode ser usada para aprender a representação de dados, com transformações de características representativas
Neste ponto, deve ser fácil entender como é o Autoencoder, a arquitetura é muito simples, então vamos dar uma olhada nas suas transformações!
Tipos de Autoencoder
Depois de explicar os princípios básicos do AutoEncoder, é hora de dar uma olhada no uso estendido e avançado do Autoencoder, para que você possa ver o uso extensivo do Autoencoder!
2-1. Unet:
Unet pode ser usado como um dos meios de segmentação de imagem, e a arquitetura Unet pode ser vista como uma variante do Autoencoder.

2-2. Autoencoders Recursivos:
Esta é uma rede que combina novo texto de entrada com espaço latente de outras entradas, o propósito desta rede é a classificação dos sentimentos.Isto também pode ser visto como uma variante do Autoencoder, que extrai o texto esparso à medida que é digitado e encontra o espaço latente que é importante.

2-Seq2Seq:
Sequence to Sequence é um modelo generativo que tem sido muito popular há algum tempo. É uma solução maravilhosa para o dilema de os tipos de RNN não serem capazes de lidar com emparelhamentos indeterminados, e tem tido um bom desempenho em tópicos como chatbot e geração de texto.Isto também pode ser visto como uma espécie de arquitetura de Autocodificador.

Aplicações do Autocodificador
Depois de olhar para as muitas e variadas variações do Autoencoder, vamos ver onde mais o Autoencoder pode ser usado!
3-1. Peso pré-treinado do modelo
Autocodificador também pode ser usado para pré-treino de peso, o que significa que o modelo encontra um melhor valor inicial.Por exemplo, quando queremos completar o modelo alvo como, por exemplo, a camada oculta é: assim, no início usamos o conceito de autocodificador para introduzir 784 dimensões, e o espaço latente no meio é de 1000 dimensões para fazer o pré-treino primeiro, de modo que estas 1000 dimensões podem bem reter a entradaDepois removemos a saída original e adicionamos a segunda camada, e assim por diante.Desta forma, todo o modelo terá um melhor valor inicial.
Huh! Há uma parte estranha… se você usar 1000 neurônios para representar 784 dimensões de entrada, isso não significa que a rede só precisa ser copiada de novo? Qual é o objectivo do treino? Sim, é por isso que em um pré-trem como este, normalmente adicionamos o normalizador L1 para que a camada oculta não seja copiada de novo.
De acordo com o Sr. Li HongyiNo passado, era mais comum usar esse método para pré-treino, mas agora, devido ao aumento das habilidades de treinamento, não há mais necessidade de usar esse método.Mas se você tem muito poucos dados de etiqueta, mas um monte de dados não rotulados, você pode usar esse método para fazer o pré-treino de peso porque o Autocodificador em si é um método de aprendizagem sem supervisão, nós usamos os dados não rotulados para obter o pré-treino de peso primeiro, e depois usamos os dados não rotulados para obter o pré-treino de peso.Usamos os dados não rotulados para obter primeiro o pré-trem de peso, e depois usamos os dados rotulados para afinar os pesos, para que possamos obter um bom modelo.Para mais detalhes, veja o vídeo do Sr. Li, está muito bem explicado!
3-2. Segmentação de imagem
O modelo Unet que acabamos de ver, vamos dar uma olhada novamente, porque é basicamente o problema mais comum de detecção de defeitos na indústria de manufatura de Taiwan.
Primeiro temos de rotular os dados de entrada, que serão a nossa saída. O que temos de fazer é construir uma rede, introduzir a imagem original (esquerda, raios-x dos dentes) e gerar a saída (direita, classificação da estrutura do dente).Neste caso, o codificador & decodificador será uma camada de convolução com um forte julgamento gráfico, extraindo características significativas e deconvolução de volta no decodificador para obter o resultado da segmentação.

>
3-3. Vídeo para Texto
Para um problema de legenda de imagem como este, usamos a sequência para sequenciar modelo, onde os dados de entrada são um monte de fotos e a saída é um texto descrevendo as fotos.O modelo sequência a sequência usa LSTM + Conv net como codificador & descodificador, que pode descrever uma sequência de acções sequenciais & usando o kernel CNN para extrair o espaço latente necessário na imagem.mas esta tarefa é muito difícil de fazer, por isso vou deixá-lo experimentar se estiver interessado!
3-4. Recuperação de Imagem
Image Retrieval A coisa a fazer é inserir uma imagem e tentar encontrar a correspondência mais próxima, mas se você comparar pixel-wise, então é realmente fácil deSe você usar o Autoencoder para primeiro comprimir a imagem no espaço latente e depois calcular a semelhança no espaço latente da imagem, o resultado será muito melhor.O resultado é muito melhor porque cada dimensão no espaço latente pode representar uma determinada característica.Se a distância for calculada no espaço latente, é razoável encontrar imagens semelhantes.Em particular, esta seria uma ótima forma de aprendizagem sem supervisão, sem rotular os dados!

Aqui estãoO artigo de Georey E. Hinton, o famoso deus do aprendizado profundo, mostra o gráfico que você quer procurar no canto superior esquerdo, enquanto os outros são todos gráficos que o autocodificador acha que são muito parecidos.7133>

Baseado no ConteúdoRecuperação de Imagem
3-5. Detecção de Anomalias
Não consigo encontrar uma boa imagem, por isso tive de usar esta LOL
Detectar anomalias também é um problema de fabrico super comum, por isso este problema também pode ser experimentado com o AutoencoderPodemos tentar com o Autoencoder!Em primeiro lugar, vamos falar sobre a ocorrência real de anomalias. Anomalias geralmente ocorrem muito raramente, por exemplo, sinais anormais na máquina, picos repentinos de temperatura ……, etc.Isso acontece uma vez por mês (se mais, a máquina deve ser forçada a se aposentar). Se os dados forem coletados a cada 10 segundos, então 260.000 peças de dados serão coletadas a cada mês, mas apenas um período de tempo é anomalias, o que na verdade é uma quantidade muito desequilibrada de dados.
Então a melhor maneira de lidar com esta situação é ir para os dados originais, que é a maior quantidade de dados que temos afinal de contas!Se pudermos pegar os bons dados e treinar um bom autocodificador, então se as anomalias entrarem, então naturalmente os gráficos reconstruídos irão quebrar.Foi assim que começamos a idéia de usar o autocodificador para encontrar anomalias!
Implementação
Aqui usamos Mnist como exemplo de brinquedo e implementamos um Autoencoder usando o Tensorflow.keras API de alto nível! Como o novo pacote para tf.keras foi lançado em breve, nós praticamos usando o método de subclassificação do Model no arquivo
4-1. Criar um Modelo – Vallina_AE:
Primeiro, importar fluxo tensor!7133>

O uso de tf.keras é tão simples quanto isso, basta digitar tf.keras!(Não sei do que estou falando rs)
Carregar dados & pré-processo do modelo
Primeiro pegamos os dados Mnist do conjunto tf.keras.dataet e fazemos um pequeno pré-processo
Nomalize: comprima os valores entre 0 e 1, o treinamento será mais fácil de convergir
Binarização: destaque as áreas mais óbvias, o treinamento dará melhores resultados.
Criar um Modelo – Vallina_AE:
Este é o método fornecido pelo Tensorflow Document para a criação de modelos.mais complexo.
O que aprendi até agora é a criar a camada no __init __ lugar e definir o passe para a frente na chamada.
Então usamos dois modelos sequenciais para criar o Encoder & descodificador. dois são uma estrutura simétrica, o encoder é ligado à camada de entrada que é responsável por transportar os dados de entrada e depois às três camadas densas. o descodificador é o mesmo.
Novamente, sob a chamada, precisamos concatenar o codificador & decodificador, definindo primeiro o espaço latente como a saída de self.encoder
.espaço como a saída de self.encoder
, e depois a reconstrução como resultado da passagem do descodificador.Depois usamos tf.keras.Model()
para ligar os dois modelos que definimos em __init__
.AE_model = tf.keras.Model(inputs = self.encoder.input, outputs = reconstruction)
especifica input como a entrada do codificador e output como o ouput do decodificador, e é isso!Depois devolvemos o modelo AE_model e estás feito!
Modelo Compile & treino
Antes da Keras poder treinar um modelo, este tem de ser compilado antes de poder ser colocado em treino.Na compilação você especifica o otimizador que você quer usar e a perda que você quer calcular.
Para treinamento use VallinaAE.fit
para alimentar os dados, mas lembre-se que estamos nos restaurando, então X e Y têm que ser jogados nos mesmos dados.
Vamos ver os resultados do treino 100 épocas, parece que os resultados de reconstrução não são tão bons como pensávamos.

4-2. Criar um Modelo- Conv_AE:
Como o nome implica, podemos usar a camada Convolution como uma camada oculta para aprender características que podem ser reconstruídas de volta.
Após alterar o modelo, você pode dar uma olhada nos resultados para ver se há alguma melhoria.

Parece que os resultados da Reconstrução são muito melhores, com cerca de 10 épocas de treino.
4-3. Criar um Modelo – denoise_AE:
Além disso, o autocodificador pode ser usado para remoção de ruído, então aqui nós
Primeiro, podemos adicionar ruído à imagem original. A lógica de adicionar ruído é fazer uma simples mudança no pixel original e depois adicionar números aleatórios.A parte de pré-processamento da imagem pode ser feita simplesmente tornando o clipe 0 se for menor que 0 e 1 se for maior que 1. Como mostrado abaixo, após o processamento da imagem do clipe, podemos tornar a imagem mais nítida e as áreas óbvias mais visíveis.Isso nos dá um resultado melhor quando colocamos o Autoencoder.

e o próprio modelo e a Conv_AENão há diferença entre o modelo em si e o Conv_AE, excepto que durante o ajuste tem de ser alterado para
>
denoise_AE.fit(train_images_noise, train_images, epochs=100, batch_size=128, shuffle=True)
>
para restaurar os dados originais de ruído_ aos dados de entrada originais

>
>
Como pode ver, na Mnist, um simples Autoencoder consegue um efeito de denoising muito rápido.
Muitos exemplos
Este é um bom recurso para aqueles interessados em aprender mais sobre ele
- Construir Autoencoders na série Keras autoencoder está claramente escrito.
- Tensorflow 2.0 tutorial de documentação oficial, algo muito completo, apenas escreva um pouco difícil, para gastar muito tempo para ver (pelo menos eu puxo XD)
3. Li Hongyi professor de aprendizagem profunda também é muito recomendado, fala muito claro e fácil de entender, não
Conclusão
Utilizar este artigo para estabelecer rapidamente o conceito básico do Autoencoder, algumas variações do Autoencoder e a aplicação docenários.4310>
Os próximos artigos começarão com modelos generativos, estendendo-se do conceito de autoencoder, VAE, ao GAN, e outras extensões e morphs ao longo do caminho.
Se você gostar do artigo, por favor clique mais algumas palmas (não apenas uma vez) como um encorajamento!
Ler o código completo deste artigo:https://github.com/EvanstsaiTW/Generative_models/blob/master/AE_01_keras.ipynb
Deixe uma resposta