O que é um autoencoder?

Aug 17 2020

Eu sou um estudante e estou estudando aprendizado de máquina. Estou me concentrando em modelos generativos profundos e, em particular, em autoencoders e autoencoders variacionais (VAE) .

Estou tentando entender o conceito, mas estou tendo alguns problemas.

Até agora, entendi que um autoencoder pega uma entrada, por exemplo uma imagem, e quer reduzir essa imagem em um espaço latente , que deve conter os recursos subjacentes do conjunto de dados, com uma operação de codificação , então, com uma operação de decodificação , ele reconstrói a imagem que perdeu alguma informação devido à parte de codificação.

Depois disso, com uma função de perda, ele reconstrói o espaço latente e assim obtém os traços latentes.

sobre o VAE, ele usa uma abordagem probabilística, então temos que aprender a covariância meandra de uma gaussiana.

Até agora, isso é o que entendi.

O que realmente não estou claro é o que estamos tentando aprender com os codificadores automáticos e VAE.

Já vi exemplos em que uma imagem vai de um não sorridente a um rosto sorridente, ou de uma imagem em preto e branco a uma imagem colorida.

Mas não entendo o conceito principal, que é: o que faz um autoencoder?

Acrescento aqui algumas fontes de onde estudei para que quem precisa possa vê-las:

  1. https://hackernoon.com/autoencoders-deep-learning-bits-1-11731e200694
  2. https://www.youtube.com/watch?v=yFBFl1cLYx8
  3. https://www.youtube.com/watch?v=9zKuYvjFFS8

Respostas

11 cag51 Aug 18 2020 at 07:56

o que um codificador automático faz?

O autocodificador mais simples leva uma imagem de alta dimensão (digamos, 100 mil pixels) a uma representação de baixa dimensão (digamos, um vetor de comprimento 10) e, em seguida, usa apenas esses 10 recursos para tentar reconstruir a imagem original. Você pode imaginar uma analogia com os humanos: eu olho para alguém, descrevo-o ("alto, cabelo escuro, ...") e depois que esqueci sua aparência, tento esboçá-lo usando apenas minhas notas.

o que estamos tentando aprender?

Em outras palavras, por que se preocupar? Alguns motivos:

  • redução de dimensionalidade: 10 recursos são muito mais convenientes do que 100 mil pixels. Por exemplo, posso realizar a classificação agrupando no espaço de 10 dimensões (enquanto agrupar no espaço de 100K dimensional seria intratável).
  • significado semântico: se tudo correr bem, cada um dos 10 recursos terá alguma "explicação" óbvia - por exemplo, ajustar um valor fará com que o assunto pareça mais antigo (embora normalmente não seja tão simples). Ao contrário dos valores de pixel, que são afetados pela translação, rotação, etc.
  • Reconhecimento de exceção: se eu treinar meu codificador automático em cães, ele normalmente fará um bom trabalho de codificação e decodificação de fotos de cães. Mas se eu colocar um gato, ele provavelmente fará um trabalho terrível - o que posso dizer porque a saída não se parece em nada com a entrada. Portanto, procurar lugares onde um codificador automático não funciona bem é uma forma comum de procurar anomalias.

Tenho visto exemplos em que uma imagem vai de um rosto sem sorriso a um sorriso, ou de uma imagem em preto e branco a uma imagem colorida.

Existem muitos tipos diferentes de codificadores automáticos. O que descrevi acima é o tipo mais simples. Outro tipo comum é um autocodificador de "eliminação de ruído" - em vez de reconstruir a imagem original, o objetivo é construir uma imagem que esteja relacionada à imagem original, mas diferente.

O exemplo clássico disso é a remoção de ruído (daí o nome): você pode pegar uma imagem limpa, adicionar um monte de ruído, executá-la por meio de um codificador automático e recompensar o codificador automático por produzir a imagem limpa . Portanto, a entrada (imagem com ruído) é realmente diferente da saída desejada (imagem limpa). Os exemplos que você dá são semelhantes.

O desafio de projetar esses tipos de codificadores automáticos é normalmente a perda - você precisa de algum mecanismo para dizer ao codificador automático se ele fez a coisa certa ou não.

sobre o VAE, ele usa uma abordagem probabilística, então temos que aprender a média e a covariância de uma gaussiana.

Um VAE é um terceiro tipo de codificador automático. É um pouco especial porque é bem fundamentado matematicamente; nenhuma métrica ad-hoc necessária. A matemática é muito complicada para percorrer aqui, mas as ideias-chave são:

  • Queremos que o espaço latente seja contínuo. Em vez de atribuir a cada classe seu próprio canto do espaço latente, queremos que o espaço latente tenha uma forma contínua e bem definida (ou seja, um Gaussiano). Isso é bom porque força o espaço latente a ser semanticamente significativo.
  • O mapeamento entre imagens e espaços latentes deve ser probabilístico ao invés de determinístico. Isso ocorre porque o mesmo assunto pode produzir várias imagens.

Portanto, o fluxo de trabalho é este:

  • Você começa com sua imagem como antes
  • Como antes, seu codificador determina um vetor (digamos, comprimento 200).
  • Mas esse vetor não é um espaço latente. Em vez disso, você usa esse vetor como parâmetros para definir um espaço latente. Por exemplo, talvez você escolha seu espaço latente como um gaussiano de 100 dimensões. Um gaussiano de 100 dimensões exigirá uma média e um desvio padrão em cada dimensão - é para isso que você usa seu vetor de comprimento 200.
  • Agora você tem uma distribuição de probabilidade. Você obtém uma amostra de um ponto desta distribuição. Esta é a representação da sua imagem no espaço latente.
  • Como antes, seu decodificador transformará esse vetor em uma nova "saída" (digamos, um vetor de comprimento 200K).
  • Mas, esta "saída" não é sua imagem de saída. Em vez disso, você usa esses parâmetros de 200K para definir um Gaussiano de dimensão 100K. Em seguida, você obtém uma amostra de um ponto dessa distribuição - essa é sua imagem de saída.

Claro, não há nada de especial sobre um gaussiano, você poderia facilmente usar alguma outra distribuição paramétrica. Na prática, as pessoas costumam usar gaussianas.

Às vezes, isso dá melhores resultados do que outros codificadores automáticos. Além disso, às vezes você obtém resultados interessantes quando olha entre as classes em seu espaço latente. A distância de uma imagem no espaço latente do centro do cluster às vezes está relacionada à incerteza.

Além disso, existe a boa propriedade de que essas gaussianas de alta dimensão são distribuições de probabilidade em um sentido matemático rigoroso. Eles aproximam a probabilidade de uma determinada imagem pertencer a uma determinada classe. Portanto, há quem pense que as VAEs serão capazes de superar o "aceno de mão" do aprendizado profundo e colocar tudo de volta em uma base probabilística Bayesiana firme. Mas é claro, é apenas uma aproximação, e a aproximação envolve muitas redes neurais profundas, então ainda há muitas mãos acenando no momento.

A propósito, gosto de usar esta pergunta durante as entrevistas - um número surpreendente de pessoas afirma ter experiência com AVEs, mas na verdade não percebem que as AVEs são diferentes dos AEs "normais".

10 hH1sG0n3 Aug 17 2020 at 22:06

Uma maneira fácil de pensar sobre os autoencoders é: quão bem uma porção primária de infrmaton pode ser reconstruída a partir de sua representação reduzida ou de outra forma comprssada. Se você chegou até aqui, significa que reconstruiu com sucesso a frase anterior usando apenas 92 de seus 103 caracteres originais.

Mais especificamente, os autoencoders são redes neurais treinadas para aprender codificações de dados eficientes de uma maneira não supervisionada. O objetivo é aprender a representação de um determinado conjunto de dados, treinando a rede para ignorar sinais "não importantes", como ruído. Normalmente, os AE são considerados para redução de dimensionalidade.

Praticamente, um AE

  • inicialmente compacta os dados de entrada em uma representação do espaço latente
  • reconstrói a saída desta representação do espaço latente
  • calcula a diferença entre a entrada e a saída, que é definida como perda de reconstrução.

Neste loop de treinamento, o AE minimiza essa perda de reconstrução para que a saída seja o mais semelhante possível à entrada.

3 JoshPurtell Aug 17 2020 at 23:04

Uma abordagem que achei útil ao considerar autoencoders é o seguinte resultado: enquanto métodos como PCA identificam eixos de variação máxima no espaço de entrada, a introdução de funções de ativação não linear no autoencoder permite a identificação de eixos de máxima variação embutida em uma transformação (potencialmente) não linear do espaço.

Como exemplo, considere os dados

distribuídos de acordo com a função
, onde
. Aqui, o objetivo é armazenar entradas como compressões unidimensionais. Uma abordagem PCA poderia apresentar perda significativa (desde que o suporte seja suficientemente grande), mas uma autoencoder com não-linearidades será capaz de identificar o eixo encaixado principal no espaço transformar como a um pré-imagem com mais ou menos no
no espaço de entrada e, portanto, apresentará muito menos perda. Você pode pensar no regime de treinamento do autoencoder como trabalhando para aproximar um functor de transformação que produz um espaço de transformação com uma pré-imagem linear em
. O codificador automático funciona armazenando entradas de acordo com sua localização na imagem linear de
.

Observe que na ausência das funções de ativação não linear, um autoencoder se torna essencialmente equivalente ao PCA - até uma mudança na base. Um exercício útil pode ser considerar o motivo disso.