toco O que é um Autoencoder? - Unite.AI
Entre em contato
Masterclass de IA:

AI 101

O que é um Autoencoder?

mm
Atualização do on

Se você já leu sobre técnicas de aprendizagem não supervisionada antes, pode ter se deparado com o termo “codificador automático”. Autoencoders são uma das principais formas de desenvolvimento de modelos de aprendizado não supervisionados. No entanto, o que é um autoencoder exatamente?

Resumidamente, os autoencoders operam recebendo dados, compactando e codificando os dados e, em seguida, reconstruindo os dados a partir da representação de codificação. O modelo é treinado até que a perda seja minimizada e os dados sejam reproduzidos o mais próximo possível. Por meio desse processo, um autoencoder pode aprender os recursos importantes dos dados. Embora essa seja uma definição rápida de um autoencoder, seria bom dar uma olhada mais de perto nos autoencoders e entender melhor como eles funcionam. Este artigo tentará desmistificar os autoencoders, explicando a arquitetura dos autoencoders e suas aplicações.

O que é um Autoencoder?

Codificadores automáticos são redes neurais. As redes neurais são compostas de várias camadas, e o aspecto definidor de um autoencoder é que as camadas de entrada contêm exatamente tanta informação quanto a camada de saída. A razão pela qual a camada de entrada e a camada de saída têm exatamente o mesmo número de unidades é que um autoencoder visa replicar os dados de entrada. Ele gera uma cópia dos dados após analisá-los e reconstruí-los de maneira não supervisionada.

Os dados que passam por um autoencoder não são apenas mapeados diretamente da entrada para a saída, o que significa que a rede não apenas copia os dados de entrada. Existem três componentes para um autoencoder: uma porção de codificação (entrada) que comprime os dados, um componente que manipula os dados compactados (ou gargalo) e uma porção do decodificador (saída). Quando os dados são alimentados em um autoencoder, eles são codificados e compactados para um tamanho menor. A rede é então treinada nos dados codificados/comprimidos e produz uma recriação desses dados.

Então, por que você deseja treinar uma rede para apenas reconstruir os dados que são fornecidos a ela? A razão é que a rede aprende a “essência” ou as características mais importantes dos dados de entrada. Depois de treinar a rede, pode ser criado um modelo que possa sintetizar dados semelhantes, com a adição ou subtração de determinados recursos de destino. Por exemplo, você pode treinar um autoencoder em imagens granuladas e então usar o modelo treinado para remover a granulação/ruído da imagem.

Arquitetura do codificador automático

Vamos dar uma olhada a arquitetura de um autoencoder. Discutiremos a arquitetura principal de um autoencoder aqui. Existem variações nessa arquitetura geral que discutiremos na seção abaixo.

Foto: Michela Massi via Wikimedia Commons, (https://commons.wikimedia.org/wiki/File:Autoencoder_schema.png)

Como mencionado anteriormente, um autoencoder pode ser essencialmente dividido em três componentes diferentes: o codificador, um gargalo e o decodificador.

A parte do codificador do autoencoder é tipicamente uma rede densamente conectada de feedforward. O objetivo das camadas de codificação é pegar os dados de entrada e comprimi-los em uma representação de espaço latente, gerando uma nova representação dos dados que tem dimensionalidade reduzida.

As camadas de código, ou gargalo, lidam com a representação comprimida dos dados. O código de gargalo é cuidadosamente projetado para determinar as partes mais relevantes dos dados observados ou, em outras palavras, os recursos dos dados que são mais importantes para a reconstrução de dados. O objetivo aqui é determinar quais aspectos dos dados precisam ser preservados e quais podem ser descartados. O código de gargalo precisa equilibrar duas considerações diferentes: tamanho da representação (quão compacta é a representação) e relevância da variável/recurso. O gargalo executa a ativação elemento a elemento nos pesos e vieses da rede. A camada de gargalo também é às vezes chamada de representação latente ou variáveis ​​latentes.

A camada decodificadora é a responsável por pegar os dados compactados e convertê-los novamente em uma representação com as mesmas dimensões dos dados originais e inalterados. A conversão é feita com a representação do espaço latente que foi criada pelo codificador.

A arquitetura mais básica de um autoencoder é uma arquitetura feed-forward, com uma estrutura muito parecida com um perceptron de camada única usado em perceptrons multicamadas. Assim como as redes neurais de feed-forward regulares, o codificador automático é treinado por meio do uso de retropropagação.

Atributos de um Autoencoder

Existem vários tipos de autoencoders, mas todos eles possuem certas propriedades que os unem.

Autoencoders aprendem automaticamente. Eles não exigem rótulos e, se dados suficientes, é fácil obter um autoencoder para alcançar alto desempenho em um tipo específico de dados de entrada.

Autoencoders são específicos de dados. Isso significa que eles só podem compactar dados altamente semelhantes aos dados nos quais o autoencoder já foi treinado. Autoencoders também apresentam perdas, o que significa que as saídas do modelo serão degradadas em comparação com os dados de entrada.

Ao projetar um codificador automático, os engenheiros de aprendizado de máquina precisam prestar atenção a quatro hiperparâmetros de modelo diferentes: tamanho do código, número da camada, nós por camada e função de perda.

O tamanho do código decide quantos nós começam na porção intermediária da rede, e menos nós comprimem mais os dados. Em um autoencoder profundo, embora o número de camadas possa ser qualquer número que o engenheiro considere apropriado, o número de nós em uma camada deve diminuir à medida que o codificador avança. Enquanto isso, o oposto é verdadeiro no decodificador, o que significa que o número de nós por camada deve aumentar à medida que as camadas do decodificador se aproximam da camada final. Finalmente, a função de perda de um autoencoder é tipicamente entropia cruzada binária ou erro quadrático médio. A entropia cruzada binária é apropriada para instâncias em que os valores de entrada dos dados estão em um intervalo de 0 a 1.

Tipos de Autoencoder

Conforme mencionado acima, existem variações na arquitetura clássica do autoencoder. Vamos examinar as diferentes arquiteturas de autoencoder.

Escasso

Foto: Michela Massi via Wikimedia Commons, CC BY SA 4.0 (https://commons.wikimedia.org/wiki/File:Autoencoder_sparso.png)

Embora os autoencoders normalmente tenham um gargalo que comprime os dados por meio de uma redução de nós, autoencoder esparsos são uma alternativa a esse formato operacional típico. Em uma rede esparsa, as camadas ocultas mantêm o mesmo tamanho das camadas do codificador e do decodificador. Em vez disso, as ativações dentro de uma determinada camada são penalizadas, configurando-a para que a função de perda capture melhor as características estatísticas dos dados de entrada. Em outras palavras, embora as camadas ocultas de um autoencoder esparso tenham mais unidades do que um autoencoder tradicional, apenas uma certa porcentagem delas está ativa em um determinado momento. As funções de ativação mais impactantes são preservadas e outras são ignoradas, e essa restrição ajuda a rede a determinar apenas os recursos mais salientes dos dados de entrada.

contrativo

Codificadores automáticos contrativos são projetados para serem resilientes contra pequenas variações nos dados, mantendo uma representação consistente dos dados. Isso é feito aplicando-se uma penalidade à função de perda. Esta técnica de regularização é baseada na norma Frobenius da matriz jacobiana para as ativações do codificador de entrada. O efeito dessa técnica de regularização é que o modelo é forçado a construir uma codificação em que entradas semelhantes terão codificações semelhantes.

Convolucional

Codificadores automáticos convolucionais Codifique os dados de entrada dividindo os dados em subseções e, em seguida, convertendo essas subseções em sinais simples que são somados para criar uma nova representação dos dados. Semelhante às redes neurais de convolução, um autoencoder convolucional é especializado no aprendizado de dados de imagem e usa um filtro que é movido por toda a imagem, seção por seção. As codificações geradas pela camada de codificação podem ser usadas para reconstruir a imagem, refletir a imagem ou modificar a geometria da imagem. Uma vez que os filtros tenham sido aprendidos pela rede, eles podem ser usados ​​em qualquer entrada suficientemente semelhante para extrair os recursos da imagem.

Eliminar ruído

Foto: MAL via Wikimedia Commons, CC BY SA 3.0 (https://en.wikipedia.org/wiki/File:ROF_Denoising_Example.png)

Remoção de ruído de autoencoders introduzir ruído na codificação, resultando em uma codificação que é uma versão corrompida dos dados de entrada originais. Essa versão corrompida dos dados é usada para treinar o modelo, mas a função de perda compara os valores de saída com a entrada original e não com a entrada corrompida. O objetivo é que a rede consiga reproduzir a versão original e não corrompida da imagem. Ao comparar os dados corrompidos com os dados originais, a rede aprende quais recursos dos dados são mais importantes e quais recursos não são importantes/corrupções. Em outras palavras, para que um modelo elimine o ruído das imagens corrompidas, ele deve ter extraído as características importantes dos dados da imagem.

Variacional

Autoencoders Variacionais operam fazendo suposições sobre como as variáveis ​​latentes dos dados são distribuídas. Um autoencoder variacional produz uma distribuição de probabilidade para os diferentes recursos das imagens de treinamento/atributos latentes. Ao treinar, o codificador cria distribuições latentes para os diferentes recursos das imagens de entrada.

 

Como o modelo aprende as características ou imagens como distribuições gaussianas em vez de valores discretos, ele pode ser usado para gerar novas imagens. A distribuição gaussiana é amostrada para criar um vetor, que é alimentado na rede de decodificação, que renderiza uma imagem com base nesse vetor de amostras. Essencialmente, o modelo aprende características comuns das imagens de treinamento e atribui a elas alguma probabilidade de que elas ocorram. A distribuição de probabilidade pode então ser usada para fazer engenharia reversa de uma imagem, gerando novas imagens que se assemelham às imagens de treinamento originais.

Ao treinar a rede, os dados codificados são analisados ​​e o modelo de reconhecimento gera dois vetores, desenhando a média e o desvio padrão das imagens. Uma distribuição é criada com base nesses valores. Isso é feito para os diferentes estados latentes. O decodificador então pega amostras aleatórias da distribuição correspondente e as usa para reconstruir as entradas iniciais da rede.

Aplicações Autoencoder

Autoencoders podem ser usados ​​para uma ampla variedade de aplicações, mas eles são normalmente usados ​​para tarefas como redução de dimensionalidade, redução de ruído de dados, extração de recursos, geração de imagens, previsão de sequência para sequência e sistemas de recomendação.

Redução de ruído de dados é o uso de codificadores automáticos para remover granulação/ruído de imagens. Da mesma forma, os codificadores automáticos podem ser usados ​​para reparar outros tipos de danos à imagem, como imagens borradas ou seções ausentes de imagens. A redução de dimensionalidade pode ajudar redes de alta capacidade a aprender recursos úteis de imagens, o que significa que os autoencoders podem ser usados ​​para aumentar o treinamento de outros tipos de redes neurais. Isso também se aplica ao uso de codificadores automáticos para extração de recursos, pois os codificadores automáticos podem ser usados ​​para identificar recursos de outros conjuntos de dados de treinamento para treinar outros modelos.

Em termos de geração de imagens, os autoencoders podem ser usados ​​para gerar imagens humanas falsas ou personagens animados, que têm aplicações na concepção de sistemas de reconhecimento facial ou na automatização de certos aspectos da animação.

Modelos de previsão de sequência para sequência podem ser usados ​​para determinar a estrutura temporal dos dados, o que significa que um autoencoder pode ser usado para gerar o próximo, mesmo em uma sequência. Por esse motivo, um autoencoder pode ser usado para gerar vídeos. Por fim, os autoencoders profundos podem ser usados ​​para criar sistemas de recomendação, captando padrões relacionados ao interesse do usuário, com o codificador analisando os dados de engajamento do usuário e o decodificador criando recomendações que se ajustam aos padrões estabelecidos.

Blogueiro e programador com especialidades em Machine Learning e Aprendizagem profunda tópicos. Daniel espera ajudar outras pessoas a usar o poder da IA ​​para o bem social.