Por que aplicar o PCA em destinos causa desajustamento?


7

O objetivo:

Eu sou novo em aprendizado de máquina e experimento com redes neurais. Eu gostaria de construir uma rede que tenha como entrada uma série de 5 imagens e preveja a próxima imagem. Meu conjunto de dados é completamente artificial, apenas para minha experimentação. Como ilustração, aqui estão alguns exemplos de entrada e saída esperada:

insira a descrição da imagem aqui

As imagens dos pontos de dados e dos destinos são da mesma fonte: a imagem de destino de um ponto de dados aparece em outros pontos de dados e vice-versa.

O que eu fiz:

Por enquanto, eu construí um perceptron com uma camada oculta e a camada de saída fornece os pixels da previsão. As duas camadas são densas e feitas de neurônios sigmóides e eu usei o erro quadrado médio como objetivo. Como as imagens são bastante simples e não variam muito, isso funciona bem: com 200 a 300 exemplos e 50 unidades ocultas, recebo um bom valor de erro (0,06) e boas previsões nos dados de teste. A rede é treinada com descida gradiente (com escala de taxa de aprendizado). Aqui estão os tipos de curvas de aprendizado que recebo e a evolução do erro com o número de épocas:

insira a descrição da imagem aqui insira a descrição da imagem aqui

O que estou tentando fazer:

Tudo isso é bom, mas agora eu gostaria de reduzir a dimensionalidade do conjunto de dados para que ele fosse dimensionado para imagens maiores e mais exemplos. Então eu apliquei o PCA. No entanto, não o apliquei na lista de pontos de dados, mas na lista de imagens , por dois motivos:

  1. No conjunto de dados como um todo, a matriz de conveniência seria 24000x24000, o que não cabe na memória do meu laptop;
  2. Ao fazer nas imagens, também posso comprimir os alvos, pois eles são feitos das mesmas imagens.

Como as imagens parecem todas semelhantes, consegui reduzir o tamanho de 4800 (40x40x3) para 36, ​​perdendo apenas 1e-6 da variação.

O que não funciona:

Quando eu alimento meu conjunto de dados reduzido e seus alvos reduzidos à rede, a descida do gradiente converge muito rapidamente para um erro alto (cerca de 50!). Você pode ver os gráficos equivalentes aos acima:

insira a descrição da imagem aqui insira a descrição da imagem aqui

Eu não imaginava que uma curva de aprendizado pudesse começar com um valor alto e depois descer e voltar ... E quais são as causas comuns da descida do gradiente parando tão rápido? Poderia estar vinculado à inicialização do parâmetro (eu uso o GlorotUniform, o padrão da biblioteca lasanha).

Percebi então que, se eu alimentar os dados reduzidos, mas os destinos originais (não compactados), recuperarei o desempenho inicial. Parece que aplicar o PCA nas imagens de destino não era uma boa ideia. Por que é que? Afinal, eu apenas multipliquei os insumos e os objetivos pela mesma matriz, para que os insumos e os objetivos do treinamento ainda estejam vinculados de uma maneira que a rede neural possa descobrir, não? o que estou perdendo?

Mesmo que eu apresente uma camada extra de 4800 unidades para que haja o mesmo número total de neurônios sigmóides, obtenho os mesmos resultados. Para resumir, tentei:

  1. 24000 pixels => 50 sigmóides => 4800 sigmóides (= 4800 pixels)
  2. 180 "pixels" => 50 sigmóides => 36 sigmóides (= 36 "pixels")
  3. 180 "pixels" => 50 sigmóides => 4800 sigmóides (= 4800 pixels)
  4. 180 "pixels" => 50 sigmóides => 4800 sigmóides => 36 sigmóides (= 36 "pixels")
  5. 180 "pixels" => 50 sigmóides => 4800 sigmóides => 36 lineares (= 36 "pixels")

(1) e (3) funcionam bem; mas não (2), (4) e (5), e eu não entendo o porquê. Em particular, como (3) funciona, (5) deve ser capaz de encontrar os mesmos parâmetros que (3) e os vetores eigen na última camada linear. Isso não é possível para uma rede neural?


11
Você já viu os exemplos de saída reduzida por PCA? Algum valor acima de 1,0 ou abaixo de 0,0 em qualquer "pixel"? (Oh, espere, redes 5 deve ter lidado com isso...)
Neil Slater

Esse é um bom ponto, os valores não estão mais em [0,1]. De alguma forma, pensei na entrada que não é mais normalizada (o que não impede que ela funcione na rede 3), mas não pensei nisso ... Mas sim, você está certo, 5 deveria ter lidado com isso. Eu verifiquei novamente, tornando a saída linear na rede 2, mesmo resultado.
Djizeus 15/09/2015

Respostas:


4

Primeiro, obrigado pelas edições da sua pergunta original, pois agora sabemos que você está aplicando a mesma transformação a todos os seus dados.

P: Por que o perceptronsdesempenho é muito melhor do que generalized linear modelsem alguns problemas? R: Por serem modelos inerentemente não lineares, com muita flexibilidade. A desvantagem é que os botões adicionais requerem mais dados para serem ajustados corretamente.

Quadro geral:

Menos dados podem causar high-bias. High-biaspode ser superado por mais dados. Você reduziu seus dados de um conjunto de dados do recurso 4800 para um conjunto de 38 recursos, portanto, espere ver um aumento no viés. Neural networksrequerem mais dados do que modelos sem camadas ocultas.

Linearidade vs. Não Linearidade

Seu artificial neural network( perceptron) é um modelo inerentemente não linear, mas você está decidindo remover recursos do seu conjunto de dados com um modelo linear ( PCA). A presença de uma única camada oculta cria explicitamente termos de segunda ordem nos seus dados e há duas transformações não lineares adicionais (entrada ==> oculta e oculta ==> previsão), que adicionam não linearidade sigmoidal a cada etapa.

O fato de os dados de treinamento e os dados de destino serem multiplicados pela mesma matriz para alcançar a dimensionalidade reduzida significa realmente que você perceptronprecisa aprender a matriz se desejar reconstruir aspectos não lineares dos dados originais. Isso requer mais dados ou você reduz menos a dimensionalidade.

Um experimento:

Sugiro tentar um experimento em que você execute a segunda ordem polynomial feature extractionno conjunto de dados completo e, em seguida, execute PCAnesse conjunto de dados aprimorado. Veja quantos recursos você termina mantendo 99% da variação do conjunto de dados aprimorado. Se for maior que a dimensionalidade do seu conjunto de dados inicial, fique com o conjunto de dados não aprimorado e não reduzido. Se for entre a dimensionalidade dos dados originais e 38, tente treiná-los perceptroncom esses dados.

Uma ideia melhor:

Em vez de usar a variação (linear) para determinar a redução de recurso de sua projeção de PCA, tente treinar e validar cruzadamente seu modelo com diferentes quantidades de redução de dimensionalidade de PCA. Você provavelmente descobrirá que há um ponto ideal para um determinado conjunto de imagens. Por exemplo, um SVM nos dados do dígito MNIST funciona melhor quando os recursos de 784 pixels são reduzidos para 50 recursos linearmente independentes usando o PCA. Embora isso não seja óbvio ao analisar a variação dos componentes principais.

Outras opções:

Existem técnicas de redução de dimensionalidade não lineares, como isomap . Você pode investigar o uso da redução não linear de recursos, uma vez que está claramente perdendo informações com o PCA linear que aplicou.

Você também pode procurar técnicas específicas de imagemfeature extraction para adicionar alguma não linearidade antes de reduzir a dimensionalidade.

Espero que isto ajude!


Eu pensei que, se eu puder recorrer aos drecursos, mantendo a maior parte da variação (> 99,99% no meu caso), isso significa que os dados estão aproximadamente em um hiperplano de ddimensões. E quaisquer que sejam os aspectos não lineares, eles são mantidos nos drecursos. Não? Se sim, por que a rede neural precisaria reconstruir os aspectos não lineares, pois ainda estão presentes?
Djizeus

Não, você provavelmente está jogando fora contribuições não-lineares.
AN6U5 17/10/2015

2

É possível que a maior parte da variação no conjunto de dados exista entre imagens de entrada (ou entre imagens de entrada e saída). Nesse caso, os componentes principais mais informativos servem para separar exemplos de entrada ou para separar a entrada da saída.

Se apenas os PCs menos informativos descreverem a variação das saídas em preto e branco, será mais difícil distinguir entre as saídas do que no espaço de recursos original.

Dito isto, o PCA em imagens raramente é tão útil. Neste exemplo, posso vê-lo atraente, mas provavelmente seria muito mais significativo e compatível com a memória para aprender uma representação diferente da característica de dimensão inferior. Você pode tentar um codificador automático simples, recursos SIFT / SURF ou recursos semelhantes a haar.


Não, eu executei o PCA em todo o conjunto de imagens e, em seguida, nas entradas substitui cada imagem por sua transformação de PCA. Se eu fizer a substituição apenas nas entradas, ainda posso aprender, mas se eu também substituir os alvos, ele parará de funcionar. De qualquer forma, obrigado pelas sugestões, vou experimentá-las. Eu ainda gostaria de entender por que minha abordagem está errada (se estiver) ...
Djizeus 17/11/2015

Ok, eu estou atualizando minha resposta agora que sei o que você fez
Jamesmf

Você tentou executar o PCA nas imagens de destino separadamente?
Jamesmf

Suas saídas também estão contidas nos exemplos de entrada? Parece que eles são basicamente dados de exemplo que você postou. Se for esse o caso, minha resposta não é relevante.
Jamesmf

Sim, eles são, é isso que eu quis dizer na frase logo abaixo da imagem de exemplo (eu sei que é difícil de entender o que estou tentando :))
Djizeus

0

Eu li o seu Post algumas vezes agora. Mas não tenho certeza absoluta se entendi completamente suas experiências. Mas tenho um palpite do que pode estar acontecendo.

Eu acho que o erro está oculto na parte em que você alcança esse espantoso 0,06%. Você não está apenas generalizando para novos dados, mas também prevendo o futuro. Isso não deve funcionar, mas acho que funciona porque a sua rede está terrivelmente equipada. Por assim dizer, sua rede ainda é muito burra. Apenas aprendi que se você mostrar as figuras a, b, ele responderá c. O segundo experimento contém uma reviravolta, se eu entendi corretamente. Presumo que você ainda apresente imagens completas na rede, mas elas são construídas a partir dos coeficientes de suas imagens próprias. Agora, é preciso cuspir coeficientes para construir a resposta a partir das imagens próprias. Mas isso exigiria alguma compreensão do processo, que a rede não adquiriu.

Acho que há várias sugestões para melhorar seu experimento:

O aprendizado de imagens de entrada completas é apenas um problema dimensional extremamente alto que requer uma enorme quantidade de dados de treinamento. Considere calcular os recursos da imagem.

Não tenho certeza se o seu problema de aprendizagem é sólido. Considere separar seus dados de treinamento dos dados de previsão e usar dados mais convencionais, como dígitos manuscritos.


Obrigado por tentar entender. Eu editei a pergunta na esperança de que seja mais clara. Observe que 0,06 não é uma porcentagem, não estou construindo um classificador, mas uma regressão, pois a rede gera imagens. Além disso, não acho que a configuração inicial tenha sobreajuste, pois quando planto a curva de aprendizado, o erro de validação se aproxima do erro de treinamento.
Djizeus 15/09/2015

Em vez de simplesmente aceitar a resposta do @Djizeus e editar sua pergunta, você precisa fazer uma 'decomposição de variação de polarização' detalhada cross validation, ou melhor ainda . Então você saberá se o primeiro caso está realmente super ajustado ou não. Você deve sempre validar cruzadamente! Informe-nos o que os resultados mostram. Suspeito que a solução seja mais sutil e esteja mais relacionada à adaptação de uma transformação de PCA diferente a cada imagem, em vez de fazer o PCA em todo o corpus de dados.
AN6U5

11
Sim, eu havia feito a decomposição e ela parecia bem, e não queria aumentar ainda mais a questão. Mas eu adicionei agora. Quanto aos casos que não trabalham, parece muito estranho ...
Djizeus
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.