Autoencoder é uma classe de arquitetura de rede neural que tem como objetivo aprender como comprimir/reduzir um conjunto de dados (etapa conhecida como encoder) e, em seguida, aprende a reconstruir os dados a partir da versão que foi previamente reduzida (etapa conhecida como decoder). Espera-se que os dados reconstrúidos sofram alguma perda de informação (preferencialmente mínima) durante o processo (mensurada pela reconstruction loss).
Assim que a etapa descrita acima como encoder é finalizada, os dados são armazenados, de forma reduzida, em uma camada conhecida como compressed representation (bottleneck da rede).
Autoencoders utilizam os dados da própria camada de entrada como variável resposta na camada de saída! Isso porque o que interessa mesmo nesta rede é a função aprendida pelas camada intermediárias do encoder. Isso pode não fazer muito sentido à primeira vista, mas veja alguns casos de uso aplicáveis ao contexto de autoencoders:
- Redução de dimensionalidade: Autoencoder reduz a dimensionalidade dos dados ao aprender como ignorar ruídos existentes nas informações.
- Geração de novas informações: algumns tipos de auencoder (Variational Autoencoders) são capazes de aprender a distribuição dos dados e gerar novas informações que seguem a mesma distribuição.
Opa! Então autoencoders possuem variações em sua arquitetura? Sim! Existem autoencoders para redes feed forward, LSTM, CNN…A figura abaixo fornece a idéia geral deste tipo de rede, mas lembre-se que a arquitetura mais detalhada vai depender do tipo de rede neural que você está tentando construir o autoencoder.
Componentes
Vale a pena ressaltar os seguintes componentes dos autoencoders:
- Encoder: etapa pela qual o modelo aprende a criar uma versão comprimida dos dados
- Compressed representation (bottleneck): Esta é a camada que armazena a representação comprimida calculada pelo encoder
- Decoder: Etapa responsável por reconstruir os dados previamente codificados
- Reconstructions loss: Métrica que mede a qualidade da reconstrução feita pelo decoder (queremos minimizar este número).
Arquitetura
Como já dito, pode-se criar diferentes arquiteturas de redes neurais para se trabalhar com autoencoders, por exemplo, FeedForward network, LSTM, ou Redes Neurais Convolucionais (CNN). No entanto, independente destas variações, a estrutura geral do modelo seguirá a lógica que comentamos até aqui.
Tão importante que vou falar novamente…onde está minha variável target?
Autoencoders utilizam os próprios valores de entrada como variável resposta! Veja que nossa rede possui a mesma quantidade de neurônios nas camadas de entrada e saída. Note também que aquela camada central é o local onde teremos a versão reduzida dos nossos dados.
Se você já ouviu falar sobre Principal Component Analysis (PCA), vale a pena comentar que, sem nenhuma regularização, esta rede está aprendendo a aproximar a função dos componentes principais.
Afinal, este tipo de modelo é supervisionado ou não supervisionado?
Faça sua própria argumentação 🙂 Analisando apenas os dados que foram usados no exemplo acima, não existe oficialmente uma variável resposta…apenas dados de entrada. Neste sentido poderíamos argumentar que é uma abordagem não supervisionada com o intuito de reduzir a dimensionalidade dos dados.
No entanto, se olharmos para a arquitetura da rede, claramente a rede possui uma variável resposta (mesmo que sejam os próprios dados de entrada). Neste sentido, de fato a rede está sendo supervisionada.
Como a parte mais importante desta rede são as camadas intermediárias, autoencoders são comumente classificados como aprendizagem não supervisionada. Mas leve sempre em conta este pequeno “debate” que tivemos 🙂
Prontos para criar o modelo? Esse notebook possui referências e implementação em tensorflow.
https://colab.research.google.com/drive/1wUc2iPtxOvLVuRXrFx-qaOF6UR15XXvu
Abraços!