Autoencoder - Autoencoder

Um autoencoder é um tipo de rede neural artificial usada para aprender codificações eficientes de dados não rotulados ( aprendizado não supervisionado ). A codificação é validada e refinada tentando gerar novamente a entrada da codificação. O autoencoder aprende uma representação (codificação) para um conjunto de dados, normalmente para redução de dimensionalidade , treinando a rede para ignorar dados insignificantes (“ruído”).

Existem variantes, com o objetivo de forçar as representações aprendidas a assumir propriedades úteis. Os exemplos são os autoencoders regularizados ( Sparse , Denoising e Contractive ), que são eficazes na aprendizagem de representações para tarefas de classificação subsequentes , e os autoencoders Variacionais , com aplicações como modelos generativos . Os codificadores automáticos são aplicados a muitos problemas, desde reconhecimento facial , detecção de recursos, detecção de anomalias até a aquisição do significado das palavras. Autoencoders também são modelos generativos: eles podem gerar aleatoriamente novos dados que são semelhantes aos dados de entrada (dados de treinamento).

Arquitetura básica

Um autoencoder tem duas partes principais: um codificador que mapeia a entrada no código e um decodificador que mapeia o código para uma reconstrução da entrada.

A maneira mais simples de executar a tarefa de cópia perfeitamente seria duplicar o sinal. Em vez disso, os codificadores automáticos são normalmente forçados a reconstruir a entrada aproximadamente, preservando apenas os aspectos mais relevantes dos dados na cópia.

A ideia de codificadores automáticos é popular há décadas. As primeiras aplicações datam da década de 1980. Sua aplicação mais tradicional era a redução de dimensionalidade ou aprendizado de recursos , mas o conceito tornou-se amplamente usado para aprender modelos generativos de dados. Algumas das IAs mais poderosas na década de 2010 envolveram autoencoders empilhados dentro de redes neurais profundas .

Esquema de um Autoencoder básico

A forma mais simples de um autoencoder é uma rede neural feedforward não recorrente semelhante a perceptrons de camada única que participam de perceptrons multicamadas (MLP) - empregando uma camada de entrada e uma camada de saída conectadas por uma ou mais camadas ocultas. A camada de saída tem o mesmo número de nós (neurônios) que a camada de entrada. Seu objetivo é reconstruir suas entradas (minimizando a diferença entre a entrada e a saída) em vez de prever um valor de destino dado entradas . Portanto, os codificadores automáticos aprendem sem supervisão.

Um autoencoder consiste em duas partes, o codificador e o decodificador, que podem ser definidos como transições e tais que:

No caso mais simples, dada uma camada oculta, o estágio do codificador de um autoencoder pega a entrada e mapeia para :

Essa imagem geralmente é chamada de código, variáveis ​​latentes ou uma representação latente. é uma função de ativação elemento a elemento , como uma função sigmóide ou uma unidade linear retificada . é uma matriz de peso e é um vetor de polarização. Pesos e vieses geralmente são inicializados aleatoriamente e, em seguida, atualizados iterativamente durante o treinamento por meio de retropropagação . Depois disso, o estágio de decodificador do autoencoder mapeia para a reconstrução da mesma forma que :

onde para o decodificador pode não estar relacionado ao correspondente para o codificador.

Os codificadores automáticos são treinados para minimizar erros de reconstrução (como erros quadráticos ), muitas vezes chamados de " perda ":

onde geralmente é calculada a média sobre o conjunto de treinamento.

Como mencionado antes, o treinamento do autoencoder é executado por meio da retropropagação do erro, assim como outras redes neurais feedforward .

Caso o espaço de recursos tenha uma dimensionalidade inferior ao espaço de entrada , o vetor de recursos pode ser considerado como uma representação compactada da entrada . Este é o caso de undercomplete autoencoders. Se as camadas ocultas forem maiores ( supercompletas ) ou iguais à camada de entrada, ou se as unidades ocultas tiverem capacidade suficiente, um autoencoder pode potencialmente aprender a função de identidade e se tornar inútil. No entanto, resultados experimentais descobriram que autoencoders supercompletos ainda podem aprender recursos úteis . No cenário ideal, a dimensão do código e a capacidade do modelo podem ser definidas com base na complexidade da distribuição de dados a ser modelada. Uma maneira de fazer isso é explorar as variantes do modelo conhecidas como Autoencoders Regularizados.

Variações

Codificadores automáticos regularizados

Existem várias técnicas para evitar que os codificadores automáticos aprendam a função de identidade e para melhorar sua capacidade de capturar informações importantes e aprender representações mais ricas.

Codificador automático esparso (SAE)

Esquema simples de um autoencoder esparso de camada única. Os nós ocultos em amarelo brilhante são ativados, enquanto os amarelos claros estão inativos. A ativação depende da entrada.

Aprender representações de uma forma que incentive a dispersão melhora o desempenho em tarefas de classificação. Autoencoders esparsos podem incluir mais (em vez de menos) unidades ocultas do que entradas, mas apenas um pequeno número de unidades ocultas podem estar ativas ao mesmo tempo (portanto, esparsas). Essa restrição força o modelo a responder aos recursos estatísticos exclusivos dos dados de treinamento.

Especificamente, um autoencoder esparso é um autoencoder cujo critério de treinamento envolve uma penalidade de dispersão na camada de código .

Lembrando que , a penalidade encoraja o modelo a ativar (ou seja, valor de saída próximo a 1) áreas específicas da rede com base nos dados de entrada, enquanto inativa todos os outros neurônios (ou seja, ter um valor de saída próximo a 0).

Essa dispersão pode ser alcançada formulando os termos da pena de diferentes maneiras.

ser a ativação média da unidade oculta (média sobre os exemplos de treinamento). A notação identifica o valor de entrada que acionou a ativação. Para encorajar a maioria dos neurônios a serem inativos, precisa estar próximo a 0. Portanto, este método impõe a restrição onde está o parâmetro de esparsidade, um valor próximo a zero. O termo de penalidade assume uma forma que penaliza por desviar significativamente de , explorando a divergência KL:
onde é a soma dos nós ocultos na camada oculta e é a divergência KL entre uma variável aleatória de Bernoulli com média e uma variável aleatória de Bernoulli com média .
  • Outra forma de obter esparsidade é aplicando os termos de regularização L1 ou L2 na ativação, escalonados por um determinado parâmetro . Por exemplo, no caso de L1, a função de perda torna-se
  • Outra estratégia proposta para forçar a dispersão é zerar manualmente todas as ativações de unidades ocultas, exceto as mais fortes ( autoencoder k-sparse ). O autoencoder k-sparse é baseado em um autoencoder linear (ou seja, com função de ativação linear) e pesos amarrados. A identificação das ativações mais fortes pode ser alcançada classificando as atividades e mantendo apenas os primeiros k valores, ou usando unidades ocultas ReLU com limiares que são ajustados de forma adaptativa até que as k maiores atividades sejam identificadas. Essa seleção atua como os termos de regularização mencionados anteriormente, pois evita que o modelo reconstrua a entrada usando muitos neurônios.

Denoising autoencoder (DAE)

Os autoencoders de eliminação de ruído (DAE) tentam obter uma boa representação alterando o critério de reconstrução .

Na verdade, as DAEs usam uma entrada parcialmente corrompida e são treinadas para recuperar a entrada original não distorcida . Na prática, o objetivo da eliminação de ruído nos codificadores automáticos é limpar a entrada corrompida, ou seja, a eliminação de ruído . Duas premissas são inerentes a esta abordagem:

  • As representações de nível superior são relativamente estáveis ​​e robustas à corrupção da entrada;
  • Para executar bem a remoção de ruído, o modelo precisa extrair recursos que capturem a estrutura útil na distribuição de entrada.

Em outras palavras, a remoção de ruído é defendida como um critério de treinamento para aprender a extrair recursos úteis que constituirão melhores representações de nível superior da entrada.

O processo de treinamento de um DAE funciona da seguinte forma:

  • A entrada inicial é corrompida por meio de mapeamento estocástico .
  • A entrada corrompida é então mapeada para uma representação oculta com o mesmo processo do codificador automático padrão .
  • A partir da representação oculta, o modelo se reconstrói .

O modelo é parâmetros e são treinados para minimizar o erro médio de reconstrução ao longo dos dados de treinamento, especificamente, minimizando a diferença entre ea entrada incorrupto originais . Observe que cada vez que um exemplo aleatório é apresentado ao modelo, uma nova versão corrompida é gerada estocasticamente com base em .

O processo de treinamento mencionado acima pode ser aplicado a qualquer tipo de processo de corrupção. Alguns exemplos podem ser ruído gaussiano isotrópico aditivo , ruído de mascaramento (uma fração da entrada escolhida aleatoriamente para cada exemplo é forçada a 0) ou ruído salgado (uma fração da entrada escolhida aleatoriamente para cada exemplo é definida como seu valor mínimo ou máximo com probabilidade uniforme).

A corrupção da entrada é realizada apenas durante o treinamento. Após o treinamento, nenhuma corrupção é adicionada.

Codificador automático de contração (CAE)

Um autoencoder contrativo adiciona um regularizador explícito em sua função objetivo que força o modelo a aprender uma codificação robusta a pequenas variações de valores de entrada. Este regularizador corresponde à norma de Frobenius da matriz Jacobiana das ativações do codificador em relação à entrada. Como a penalidade é aplicada apenas a exemplos de treinamento, este termo força o modelo a aprender informações úteis sobre a distribuição de treinamento. A função objetivo final tem a seguinte forma:

O autoencoder é denominado contrativo porque é encorajado a mapear uma vizinhança de pontos de entrada para uma vizinhança menor de pontos de saída.

O DAE está conectado ao CAE: no limite do pequeno ruído de entrada gaussiano, os DAEs fazem a função de reconstrução resistir a perturbações de entrada pequenas, mas de tamanho finito, enquanto os CAEs fazem com que os recursos extraídos resistam a perturbações de entrada infinitesimais.

Autoencoder de concreto

O autoencoder concreto é projetado para seleção discreta de recursos. Um autoencoder concreto força o espaço latente a consistir apenas em um número de recursos especificado pelo usuário. O autoencoder concreto usa um relaxamento contínuo da distribuição categórica para permitir que os gradientes passem pela camada do seletor de recursos, o que torna possível usar a retropropagação padrão para aprender um subconjunto ideal de recursos de entrada que minimizam a perda de reconstrução.

Autoencoder variacional (VAE)

Os autoencoders variacionais (VAEs) pertencem às famílias dos métodos bayesianos variacionais . Apesar das semelhanças arquitetônicas com os autoencoders básicos, os VAEs são arquiteturas com objetivos diferentes e com uma formulação matemática completamente diferente. O espaço latente é, neste caso, composto por uma mistura de distribuições em vez de um vetor fixo.

Dado um conjunto de dados de entrada caracterizado por uma função de probabilidade desconhecida e um vetor de codificação latente multivariada , o objetivo é modelar os dados como uma distribuição , sendo definido como o conjunto dos parâmetros de rede para que .

Vantagens de profundidade

Estrutura esquemática de um autoencoder com 3 camadas ocultas totalmente conectadas. O código (z ou h para referência no texto) é a camada mais interna.

Freqüentemente, os codificadores automáticos são treinados com um codificador de camada única e um decodificador de camada única, mas o uso de codificadores e decodificadores de várias camadas (profundos) oferece muitas vantagens.

  • A profundidade pode reduzir exponencialmente o custo computacional de representar algumas funções.
  • A profundidade pode diminuir exponencialmente a quantidade de dados de treinamento necessários para aprender algumas funções.
  • Experimentalmente, os autoencoders profundos produzem uma compressão melhor em comparação com os autoencoders rasos ou lineares.

Treinamento

Geoffrey Hinton desenvolveu a técnica de rede de crença profunda para treinar autoencoders profundos de várias camadas. Seu método envolve o tratamento de cada conjunto vizinho de duas camadas como uma máquina de Boltzmann restrita, de modo que o pré-treinamento se aproxime de uma boa solução e, a seguir, a retropropagação para ajustar os resultados.

Os pesquisadores têm debatido se o treinamento conjunto (ou seja, treinar toda a arquitetura junto com um único objetivo de reconstrução global para otimizar) seria melhor para autocodificadores profundos. Um estudo de 2015 mostrou que o treinamento conjunto aprende melhores modelos de dados junto com recursos mais representativos para classificação em comparação com o método em camadas. No entanto, seus experimentos mostraram que o sucesso do treinamento conjunto depende muito das estratégias de regularização adotadas.

Formulários

As duas principais aplicações dos autoencoders são a redução da dimensionalidade e a recuperação da informação, mas variações modernas foram aplicadas a outras tarefas.

Redução de dimensionalidade

Plotagem dos dois primeiros componentes principais (à esquerda) e uma camada oculta de duas dimensões de um Autoencoder Linear (à direita) aplicada ao conjunto de dados do Fashion MNIST . Os dois modelos, sendo ambos lineares, aprendem a abranger o mesmo subespaço. A projeção dos pontos de dados é de fato idêntica, exceto pela rotação do subespaço - para o qual o PCA é invariante.

A redução da dimensionalidade foi uma das primeiras aplicações de aprendizado profundo .

Para o estudo de Hinton de 2006, ele pré-treinou um autoencoder de múltiplas camadas com uma pilha de RBMs e então usou seus pesos para inicializar um autoencoder profundo com camadas ocultas gradualmente menores até atingir um gargalo de 30 neurônios. As 30 dimensões resultantes do código produziram um erro de reconstrução menor em comparação com os primeiros 30 componentes de uma análise de componente principal (PCA) e aprenderam uma representação que era qualitativamente mais fácil de interpretar, separando claramente os clusters de dados.

Representar dimensões pode melhorar o desempenho em tarefas como classificação. Na verdade, a marca registrada da redução de dimensionalidade é colocar exemplos semanticamente relacionados próximos uns dos outros.

Análise do componente principal

Reconstrução de imagens de 28x28pixel por um autencoder com um tamanho de código de dois (camada oculta de duas unidades) e a reconstrução dos primeiros dois componentes principais do PCA. As imagens vêm do conjunto de dados Fashion MNIST .

Se ativações lineares são usadas, ou apenas uma única camada oculta sigmóide, então a solução ideal para um autoencoder está fortemente relacionada à análise de componente principal (PCA). Os pesos de um codificador automático com uma única camada oculta de tamanho (onde é menor que o tamanho da entrada) abrangem o mesmo subespaço vetorial que aquele medido pelos primeiros componentes principais, e a saída do codificador automático é uma projeção ortogonal sobre este subespaço. Os pesos do autoencoder não são iguais aos componentes principais e geralmente não são ortogonais, mas os componentes principais podem ser recuperados deles usando a decomposição de valor singular .

No entanto, o potencial dos autoencoders reside em sua não linearidade, permitindo que o modelo aprenda generalizações mais poderosas em comparação com o PCA e reconstrua a entrada com perda de informação significativamente menor.

Recuperação de informação

A recuperação da informação se beneficia principalmente da redução da dimensionalidade , pois a busca pode se tornar mais eficiente em certos tipos de espaços de baixa dimensão. Os autoencoders foram de fato aplicados ao hashing semântico, proposto por Salakhutdinov e Hinton em 2007. Ao treinar o algoritmo para produzir um código binário de baixa dimensão, todas as entradas do banco de dados poderiam ser armazenadas em uma tabela de hash mapeando vetores de código binário para entradas. Essa tabela, então, suportaria a recuperação de informações, retornando todas as entradas com o mesmo código binário da consulta, ou entradas um pouco menos semelhantes, invertendo alguns bits da codificação da consulta.

Detecção de anomalia

Outra aplicação para codificadores automáticos é a detecção de anomalias . Ao aprender a replicar as características mais salientes nos dados de treinamento sob algumas das restrições descritas anteriormente, o modelo é encorajado a aprender a reproduzir com precisão as características observadas com mais frequência. Ao enfrentar anomalias, o modelo deve piorar seu desempenho de reconstrução. Na maioria dos casos, apenas dados com instâncias normais são usados ​​para treinar o codificador automático; em outros, a frequência de anomalias é pequena em comparação com o conjunto de observações, de modo que sua contribuição para a representação aprendida pode ser ignorada. Após o treinamento, o autencoder reconstruirá com precisão os dados "normais", mas não o fará com dados anômalos desconhecidos. O erro de reconstrução (o erro entre os dados originais e sua reconstrução de baixa dimensão) é usado como uma pontuação de anomalia para detectar anomalias.

A literatura recente mostrou, no entanto, que certos modelos de auto-codificação podem, contra-intuitivamente, ser muito bons na reconstrução de exemplos anômalos e, consequentemente, incapazes de realizar detecção de anomalias de forma confiável.

Processamento de imagem

As características dos codificadores automáticos são úteis no processamento de imagens.

Um exemplo pode ser encontrado na compactação de imagens com perdas , em que os codificadores automáticos superaram outras abordagens e se mostraram competitivos em relação ao JPEG 2000 .

Outra aplicação útil de codificadores automáticos no pré-processamento de imagens é a remoção de ruído de imagens .

Os codificadores automáticos são usados ​​em contextos mais exigentes, como imagens médicas, onde são usados ​​para eliminação de ruído de imagem , bem como super-resolução . No diagnóstico assistido por imagem, os experimentos aplicaram autoencoders para detecção do câncer de mama e para modelar a relação entre o declínio cognitivo da doença de Alzheimer e as características latentes de um autoencoder treinado com ressonância magnética .

Descoberta de drogas

Em 2019, moléculas geradas com autoencoders variacionais foram validadas experimentalmente em camundongos.

Previsão de popularidade

Recentemente, uma estrutura autoencoder empilhada produziu resultados promissores na previsão da popularidade de postagens em mídia social, o que é útil para estratégias de publicidade online.

Maquina de tradução

Os codificadores automáticos foram aplicados à tradução automática , geralmente chamada de tradução automática neural (NMT). Ao contrário dos codificadores automáticos tradicionais, a saída não corresponde à entrada - ela está em outro idioma. No NMT, os textos são tratados como sequências a serem codificadas no procedimento de aprendizagem, enquanto no lado do decodificador são geradas sequências na (s) língua (s) alvo. Idioma autoencoders especficos incorporar mais linguísticas recursos para o procedimento de aprendizagem, tais como características de decomposição chineses.

Veja também

Referências

links externos