Minha rede neural não consegue nem aprender a distância euclidiana


9

Então, eu estou tentando me ensinar redes neurais (para aplicações de regressão, não classificando imagens de gatos).

Minhas primeiras experiências foram treinando uma rede para implementar um filtro FIR e uma Transformada Discreta de Fourier (treinamento em sinais "antes" e "depois"), pois essas são operações lineares que podem ser implementadas por uma única camada sem função de ativação. Ambos funcionaram bem.

Então, eu queria ver se eu poderia adicionar um abs()e fazê-lo aprender um espectro de amplitude. Primeiro, pensei em quantos nós precisaria na camada oculta e percebi que 3 ReLUs são suficientes para uma aproximação grosseira de abs(x+jy) = sqrt(x² + y²), então testei essa operação sozinha em números complexos isolados (2 entradas → 3 nós ReLU na camada oculta → 1 resultado). Ocasionalmente, funciona:

3 ReLUs implementando distância euclidiana como pirâmide hexagonal invertida

Mas na maioria das vezes que eu experimento, ele fica preso no mínimo local e falha em encontrar a forma correta:

3 ReLUs formando rede em forma de vale

perda vs épocas

Eu tentei todos os otimizadores e variantes ReLU no Keras, mas eles não fazem muita diferença. Há algo mais que eu possa fazer para fazer com que redes simples como essa convergam de maneira confiável? Ou estou apenas abordando isso com a atitude errada, e você deve apenas lançar muito mais nós do que o necessário no problema e se metade deles morrer, não será considerado um grande problema?


11
Seu gráfico mostra o que parece ser várias experiências diferentes, algumas das quais funcionam e outras não. O que explica as diferenças?
Sycorax diz Restabelecer Monica

@ Sycorax Esses são apenas testes repetidos da mesma coisa. Às vezes, encontra uma solução de pirâmide hexagonal, mas geralmente não.
endolith

Você tentou com duas camadas ocultas e um tanh como função de ativação?
Ketan

@KetanNo, por quê? Eu postei uma variação mais simples aqui: stats.stackexchange.com/q/379884/11633
endolith

você pode querer olhar para este. stats.stackexchange.com/q/375655/27556 . Mas você pode explicar por que acha que precisa apenas de três relus? a decomposição "natural" seria uma camada oculta para fazer a aproximação quadrática com relus e outra camada para fazer a raiz quadrada - basicamente relus está fazendo aproximações lineares por partes.
seanv507

Respostas:


6

A saída parece sugerir fortemente que um ou mais de seus neurônios se apaga (ou talvez o hiperplano de pesos de dois de seus neurônios tenha se fundido). Você pode ver que, com os 3 Relu, você obtém 3 divisões sombrias no centro quando converge para a solução mais razoável. Você pode facilmente verificar se isso é verdade, verificando os valores de saída de cada neurônio para ver se ele permanece morto para a grande maioria de suas amostras. Como alternativa, você pode plotar todos os pesos de 2x3 = 6 neurônios, agrupados por seus respectivos neurônios, para ver se dois neurônios colapsam no mesmo par de pesos.

x+iyxyabs(x+iy)x. Realmente não há muito que você possa fazer aqui para remediar isso. Uma opção é adicionar mais neurônios como você tentou. A segunda opção é tentar uma ativação contínua, como um sigmóide, ou talvez algo ilimitado como um exponencial. Você também pode tentar desistir (com, por exemplo, 10% de probabilidade). Você pode usar a implementação de abandono regular no keras, que é esperançosamente inteligente o suficiente para ignorar situações em que todos os três neurônios desaparecem.


11
+1, quase certamente isso. Quando você usa a ReLU com um número tão pequeno de pesos, neurônios mortos quase sempre entram em cena.
Kbrose # 22/18

11
Este é um palpite plausível no caso da ReLU. Mas o OP escreve que eles tentaram algumas variantes diferentes da ReLU - os neurônios mortos também ocorrem em variantes como ELU ou Leaky Relu ou PReLU?
Sycorax diz Restabelecer Monica

3 shadowy splits in the center when you converge to the more reasonable solution.Sim, essa é a aproximação grosseira que eu quis dizer; uma pirâmide hexagonal invertida. or perhaps something unbounded like an exponential Eu tentei elu e selu, o que não funcionou muito melhor. two neurons collapse to the same pair of weightsAh, eu não tinha pensado nisso; Eu apenas presumi que eles estavam mortos.
endolith

Acessei a saída da camada oculta enquanto usava o ReLU e confirmei que geralmente um dos neurônios está morto. Com menos frequência, duas se sobrepõem e fazem a mesma coisa. Eu me pergunto se existe uma maneira de fazer os neurônios se "repelirem", para que eles não assumam papéis redundantes.
endolith

11
O @endolith Dropout é explicitamente projetado para a construção de neurônios independentes. As ELUs nunca "morrem", mas têm um gradiente de fuga à esquerda.
Sycorax diz Reinstate Monica em
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.