Como os codificadores automáticos podem ser usados ​​para clustering?

9

Suponha que eu tenha um conjunto de sinais no domínio do tempo com absolutamente nenhum rótulo . Eu quero agrupá-los em 2 ou 3 classes. Autoencoders são redes não supervisionadas que aprendem a comprimir as entradas. Portanto, dada uma entrada , ponderações e , desvios e e saída , podemos encontrar os seguintes relacionamentos:x(Eu)W1W2b1b2x^(Eu)

z(Eu)=W1x(Eu)+b1
x^(Eu)=W2z(Eu)+b2

Então seria uma forma compactada de e a reconstrução do último. Por enquanto, tudo bem.z(Eu)x(Eu)x^(Eu)

O que eu não entendo é como isso pode ser usado para cluster (se houver alguma maneira de fazer isso). Por exemplo, na primeira figura deste artigo , há um diagrama de blocos que não tenho certeza de entender. Ele usa como entradas para a rede de feed-forward, mas não há menção a como essa rede é treinada. Não sei se há algo que estou ignorando ou se o trabalho está incompleto. Além disso, este tutorial no final mostra os pesos aprendidos pelo autoencodificador, e eles parecem kernels que uma CNN aprenderia a classificar imagens. Então ... acho que os pesos do codificador automático podem ser usados ​​de alguma forma em uma rede de feed-forward para classificação, mas não sei como.z(Eu)

Minhas dúvidas são:

  1. Se é um sinal de comprimento domínio do tempo (ou seja, ), pode ser apenas um vetor também? Em outras palavras, faria sentido para z ^ {(i)} ser uma matriz com uma de suas dimensões maior que 1 ? Eu acredito que não, mas eu só quero verificar.x(Eu)Nx(Eu)R1×Nz(Eu)z(Eu)1
  2. Qual dessas quantidades seria a entrada para um classificador? Por exemplo, se eu quiser usar um MLP clássico com tantas unidades de saída quanto as classes em que quero classificar os sinais, o que devo colocar na entrada dessa rede totalmente conectada ( z(Eu) , x^(Eu) , alguma outra coisa)?
  3. Como posso usar os pesos e preconceitos aprendidos neste MLP? Lembre-se de que assumimos que absolutamente nenhuma etiqueta está disponível; portanto, é impossível treinar a rede. Acho que o e o aprendidos devem ser úteis de alguma forma na rede totalmente conectada, mas não vejo como usá-los.WEubEu

Observação: observe que usei um MLP como exemplo, porque é a arquitetura mais básica, mas a pergunta se aplica a qualquer outra rede neural que possa ser usada para classificar sinais no domínio do tempo.

Tendero
fonte

Respostas:

11

É difícil fazer clusters em altas dimensões porque a distância entre a maioria dos pares de pontos é semelhante. O uso de um autoencodificador permite re-representar pontos dimensionais altos em um espaço de dimensões inferiores. Ele não faz cluster por si só - mas é uma etapa útil de pré-processamento para uma etapa secundária de cluster. Você cada vetor de entrada para um vetor (não uma matriz ...) com uma dimensionalidade menor, digamos 2 ou 3. Em seguida, você usaria outro algoritmo de agrupamento em todos os valores de . xEuzEuzEu

Talvez alguém possa usar o codificador automático para séries temporais, porque nunca fiz isso. Eu suspeitaria que você gostaria que uma das camadas fosse uma camada convolucional 1D, mas não tenho certeza.

Algumas pessoas também usam codificadores automáticos como uma etapa de pré-processamento de dados para classificação. Nesse caso, você primeiro usaria um codificador automático para calcular o mapeamento to- , depois jogaria fora a parte to- e usaria o mapeamento to- como a primeira camada no MLP.xzzx^xz

tom
fonte
E, no último caso, como os pesos das outras camadas no MLP seriam aprendidos se os dados estivessem totalmente sem rótulo? Ou essa abordagem (ou seja, combinação de autoencoder-MLP) só faria sentido se os rótulos estivessem disponíveis?
Tendero
Sim, uma MLP (também conhecida como rede neural de feed-forward) só é realmente usada se os dados forem rotulados. Caso contrário, você não terá informações para atualizar os pesos. Um autoencoder é uma maneira 'truque' de usar redes neurais, porque você está tentando prever a entrada original e não precisa de etiquetas.
Tom
Portanto, a única maneira de usar um NN para fazer cluster seria o método que você mencionou, certo? Ou seja, use um autoencoder e, em seguida, execute um algoritmo de clustering padrão, como K-means.
Tendero
Essa é a única maneira que eu sei. Se alguém tiver uma idéia, eu ficaria feliz em ouvi-la. Você pode tentar outros algoritmos além do K-means, já que existem algumas suposições bastante estritas associadas a esse algoritmo em particular (mas ainda é uma boa coisa tentar primeiro porque é rápido e fácil).
tom
1

Antes de perguntar 'como o autoencoder pode ser usado para agrupar dados?' devemos primeiro perguntar 'Os codificadores automáticos podem agrupar dados?'


Como um autoencoder aprende a recriar os pontos de dados do espaço latente. Se assumirmos que o autoencoder mapeia o espaço latente de uma “maneira contínua”, os pontos de dados que são do mesmo cluster devem ser mapeados juntos. Portanto, de certa forma, o codificador agrupa pontos semelhantes "juntos", agrupa-os "juntos". Vimos na literatura que os auto-codificadores falham em manter essa suposição de continuidade no espaço latente.

Mas, para nosso benefício, os auto-codificadores variacionais funcionam exatamente dessa maneira. Os codificadores variacionais aprendem os mapeamentos de espaço latente com as duas propriedades principais: continuidade, integridade1.
  • A propriedade continuidade garante que dois pontos próximos um do outro no espaço latente não gerem duas saídas completamente diferentes quando decodificados.
  • A propriedade completeness garante que, na amostragem, um ponto do espaço latente fornecerá uma saída significativa quando decodificado.

Portanto, o uso de autoencodificadores pode, por vezes, ser suficiente. No entanto, foi feito um trabalho para improvisar / aprender o agrupamento explicitamente. O algoritmo proposto por Xie et al. (2016) 2 é um exemplo, que "refina iterativamente os clusters com uma distribuição de destino auxiliar derivada de uma atribuição atual de soft cluster".

Parth Shah
fonte