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?
35
Respostas:
É 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.
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 .H H h x
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 )
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.eus c eua e H= σ( 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 ).W W eus c
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.
fonte
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.
fonte
Um codificador esparso é como meio codificador automático. Um codificador automático funciona como:
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:
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.
fonte
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.
fonte