Quais são as diferenças entre codificação esparsa e autoencoder?

35

A codificação esparsa é definida como a aprendizagem de um conjunto excessivo de vetores básicos para representar vetores de entrada (<- por que queremos isso). Quais são as diferenças entre codificação esparsa e autoencoder? Quando usaremos a codificação esparsa e o autoencoder?

RockTheStar
fonte
11
A codificação esparsa na verdade constitui um tipo específico de codificador automático conhecido como codificador automático esparso . Portanto, você pode considerar a codificação esparsa como um subconjunto de codificadores automáticos.
HelloGoodbye

Respostas:

34

É possível encontrar as diferenças observando os modelos. Vejamos a codificação esparsa primeiro.

Codificação esparsa

A codificação esparsa minimiza o objetivo que W é uma matriz de bases, H é uma matriz de códigos e X é uma matriz dos dados que desejamos representar. λ implementa uma troca entre esparsidade e reconstrução. Observe que, se recebermos H , a estimativa de W é fácil por meio de mínimos quadrados.

eusc=||WH-X||22termo de reconstrução+λ||H||1 1termo de escarsidade
WXλHW

No começo, não temos no entanto. No entanto, existem muitos algoritmos que pode resolver o objetivo acima em relação a H . Na verdade, é assim que fazemos a inferência: precisamos resolver um problema de otimização se quisermos saber o h pertencente a um x invisível .HHhx

Codificadores automáticos

Os codificadores automáticos são uma família de redes neurais não supervisionadas. Existem muitos deles, por exemplo, codificadores automáticos profundos ou aqueles com diferentes truques de regularização - por exemplo, denoising, contrativo, escasso. Existem até probabilísticas, como redes estocásticas generativas ou o codificador automático variacional. Sua forma mais abstrata é mas vamos seguir uma muito mais simples por enquanto: L ae = | | W σ ( W T X )

D(d(e(x;θr);θd),x)
que σ é uma função não linear, como o sigmóide logístico σ ( x ) = 1
euae=||Wσ(WTX)-X||2
σ .σ(x)=1 11 1+exp(-x)

Semelhanças

Observe que parece quase com L a e quando configuramos H = σ ( W T X ) . A diferença de ambos é que: i) os codificadores automáticos não incentivam a esparsidade em sua forma geral; ii) um codificador automático usa um modelo para encontrar os códigos, enquanto a codificação esparsa o faz por meio de otimização.eusceuumaeH=σ(WTX)

Para dados de imagem natural, codificadores automáticos regularizados e codificação esparsa tendem a produzir muito semelhante . No entanto, os codificadores automáticos são muito mais eficientes e são facilmente generalizados para modelos muito mais complicados. Por exemplo, o decodificador pode ser altamente não linear, por exemplo, uma rede neural profunda. Além disso, um não está ligado à perda ao quadrado (da qual depende a estimativa de W para L s c ).WWeusc

Além disso, os diferentes métodos de regularização geram representações com diferentes características. Auto codificadores Denoising também demonstraram ser equivalentes a uma determinada forma de RBMs etc.

Mas por que?

Se você deseja resolver um problema de previsão, não precisará de codificadores automáticos, a menos que tenha apenas poucos dados rotulados e muitos dados não rotulados. Em geral, é melhor treinar um codificador automático profundo e colocar um SVM linear por cima, em vez de treinar uma rede neural profunda.

No entanto, são modelos muito poderosos para capturar características de distribuições. Isso é vago, mas atualmente são realizadas pesquisas que transformam isso em fatos estatísticos concretos. Modelos gaussianos latentes profundos, conhecidos como codificadores Auto variacionais ou redes estocásticas generativas, são formas bastante interessantes de obter codificadores automáticos que estimam a distribuição de dados subjacente.

bayerj
fonte
Obrigado pela sua resposta! Então, essa codificação esparsa média não deve ser usada em nenhum caso, mas o autoencoder? Além disso, deve haver um termo extra na codificação esparsa que regularize W?
RockTheStar
Não existe uma regra geral assim. O SC tem um benefício sobre os EAs: a codificação via otimização pode ser muito poderosa.
bayerj
Desculpe, você pode elaborar isso?
RockTheStar 10/10
Ter um mapa fixo que foi estimado para seguir algumas restrições (aqui: resultado esparso) é menos poderoso do que ter um otimizador que tenta encontrar uma solução como essa em várias iterações.
bayerj
11
Desculpe por trazer esta pergunta novamente. Eu acho que o Autoencoder também pode incentivar a esparsidade, ou seja, o esparso automático.
RockTheStar 10/07/2015
11

Na neurociência, o termo codificação neural é usado para se referir aos padrões de atividade elétrica dos neurônios induzidos por um estímulo. A codificação esparsa, por sua vez, é um tipo de padrão. Diz-se que um código é escasso quando um estímulo (como uma imagem) provoca a ativação de apenas um número relativamente pequeno de neurônios, que combinados o representam de maneira esparsa. No aprendizado de máquina, a mesma restrição de otimização usada para criar um modelo de código esparso pode ser usada para implementar os Autoencodificadores Esparsos, que são auto-codificadores regulares treinados com uma restrição de esparsidade. Abaixo são fornecidas explicações mais detalhadas para cada uma das suas perguntas.

A codificação esparsa é definida como a aprendizagem de um conjunto excessivo de vetores básicos para representar vetores de entrada (<- por que queremos isso)

Primeiro, pelo menos desde (Hubel & Wiesel, 1968) , sabe-se que na região V1 existem células específicas que respondem ao máximo a estímulos semelhantes a bordas (além de ter outras propriedades "úteis"). A codificação esparsa é um modelo que explica bem muitas das características observadas desse sistema. Veja (Olshausen & Field, 1996) para mais detalhes.

Segundo, está sendo mostrado que o modelo que descreve a codificação esparsa é uma técnica útil para a extração de recursos no Machine Learning e produz bons resultados nas tarefas de transferência de aprendizado. Raina et al. (2007) mostraram que um conjunto de "vetores de base" (recursos, como toques e bordas de caneta) aprendidos com um conjunto de treinamento composto por caracteres manuscritos melhora a classificação em uma tarefa de reconhecimento de dígitos manuscritos. Mais tarde, modelos baseados em codificação esparsa foram usados ​​para treinar redes "profundas", empilhando camadas de detectores de recursos esparsos para criar uma "rede de crenças esparsas e profundas" (Lee et al., 2007). Mais recentemente, resultados surpreendentes no reconhecimento de imagens foram obtidos usando modelos esparsos baseados em codificação para construir uma rede com várias camadas (o famoso "Google Brain"), capaz de distinguir uma imagem de um gato de uma maneira puramente não supervisionada (Le et al. , 2013) .

Terceiro, provavelmente é possível usar a base aprendida para realizar a compactação. A não vi ninguém realmente fazendo isso embora.

Qual é a diferença entre codificação esparsa e autoencoder?

Um autoencoder é um modelo que tenta reconstruir sua entrada, geralmente usando algum tipo de restrição. De acordo com a Wikipedia, "é uma rede neural artificial usada para aprender codificações eficientes". Não há nada na definição do codificador automático que exija escassez. As restrições esparsas baseadas em codificação são uma das técnicas disponíveis, mas existem outras, por exemplo Autoencodificadores de Denoising, Autoencoders Contrativos e RBMs. Tudo faz com que a rede aprenda boas representações da entrada (que também são comumente "esparsas").

Quando usaremos a codificação esparsa e o autoencoder?

Você provavelmente está interessado em usar um codificador automático para extração de recursos e / ou pré-treinamento de redes profundas. Se você implementar um codificador automático com a restrição de esparsidade, estará usando os dois.

Saul Berardo
fonte
Esta resposta tem muitos pontos interessantes e referências importantes. No entanto, o primeiro parágrafo está errado . Codificação esparsa e codificadores automáticos esparsos são bestas diferentes.
bayerj
Onde é afirmado que eles são a mesma coisa? Por favor, diga-me e eu corrigirei a resposta.
Saul Berardo
Na primeira frase.
bayerj
"A codificação esparsa é apenas uma das técnicas disponíveis para o treinamento de auto-codificadores". Esta frase não define "Sparse Coding" como o mesmo "animal" que o autoencoder. Ele diz que, entre todas as técnicas disponíveis para o treinamento de auto-codificadores, uma delas é a "Sparse Coding". Concordo que a frase tem de fato alguma ambiguidade, que acredito ser esclarecida pelo restante da resposta.
Saul Berardo
Você diz que a codificação esparsa é um método para treinar codificadores automáticos. Isso claramente não é o caso, pois os codificadores automáticos têm um decodificador explícito que não é implementado com um algoritmo de otimização. Dado um codificador automático arbitrário, você não pode treiná-lo com codificação esparsa.
bayerj
1

Um codificador esparso é como meio codificador automático. Um codificador automático funciona como:

input  =>  neural net layer  =>  hidden outputs => neural net layer => output

Para propagação traseira, o sinal de erro, a perda, é: entrada - saída

Se aplicarmos uma restrição de escarsidade nas saídas ocultas, a maioria será zeros e alguns serão 1s. Então a segunda camada é essencialmente um conjunto de funções de base linear, que são somadas, de acordo com qual das saídas ocultas são 1s.

Na codificação esparsa, temos apenas a segunda metade disso:

                                codes => neural net layer => output

Os 'códigos' são um monte de números reais, selecionando para as funções básicas representadas pelos pesos na camada da rede neural. Como no artigo de Olshausen, eles estão aplicando uma restrição de escarsidade aos códigos, os códigos são, assim como no auto-codificador esparso, esparsos: principalmente zeros com alguns.

A diferença que podemos ver agora claramente: para a codificação esparsa, não existe a primeira metade da rede neural: os códigos não nos são fornecidos automaticamente por uma rede neural.

Como obtemos os códigos na codificação esparsa? Temos que nos otimizar, o que fazemos usando a descida gradiente ou similar, para encontrar o conjunto de códigos que melhor fornece a saída correspondente à imagem de entrada. Temos que fazer isso para cada imagem, inclusive para cada imagem de teste, a cada vez.

Hugh Perkins
fonte
0

Você pode ler este artigo recente, https://arxiv.org/abs/1708.03735v2 , sobre exatamente esse mesmo tópico. Neste artigo, os autores mostram que, de fato, é possível configurar um auto-codificador de modo que o dicionário da verdade básica seja um ponto crítico da função de perda quadrada desse codificador.

estudante de graduação
fonte