Mi red neuronal ni siquiera puede aprender la distancia euclidiana


9

Así que estoy tratando de enseñarme a mí mismo las redes neuronales (para aplicaciones de regresión, no para clasificar imágenes de gatos).

Mis primeros experimentos fueron entrenar una red para implementar un filtro FIR y una Transformada Discreta de Fourier (entrenamiento en señales "antes" y "después"), ya que ambas son operaciones lineales que pueden ser implementadas por una sola capa sin función de activación. Ambos funcionaron bien.

Entonces, quería ver si podía agregar un abs()y hacer que aprendiera un espectro de amplitud. Primero pensé en cuántos nodos necesitaría en la capa oculta, y me di cuenta de que 3 ReLU son suficientes para una aproximación cruda abs(x+jy) = sqrt(x² + y²), por lo que probé esa operación por sí sola en números complejos solitarios (2 entradas → 3 nodos ReLU capa oculta → 1 salida). Ocasionalmente funciona:

3 ReLU que implementan la distancia euclidiana como una pirámide hexagonal invertida

Pero la mayoría de las veces que lo intento, se atasca en un mínimo local y no encuentra la forma correcta:

3 ReLU que forman una red en forma de valle

pérdida vs épocas

He probado todos los optimizadores y variantes de ReLU en Keras, pero no hacen mucha diferencia. ¿Hay algo más que pueda hacer para que redes simples como esta converjan de manera confiable? ¿O simplemente estoy abordando esto con la actitud equivocada, y se supone que debes arrojar más nodos de los necesarios al problema y si la mitad de ellos muere, no se considera un gran problema?


1
Su trama muestra lo que parecen ser varios experimentos diferentes, algunos de los cuales funcionan y otros no. ¿Qué explica las diferencias?
Sycorax dice Reinstate Monica el

@Sycorax Esas son solo pruebas repetidas de lo mismo. A veces encuentra una solución piramidal hexagonal, pero generalmente no lo hace.
endolito el

¿Intentaste con dos capas ocultas y un tanh como función de activación?
Ketan

@KetanNo, ¿por qué? Publiqué
endolith

es posible que desee ver este. stats.stackexchange.com/q/375655/27556 . Pero, ¿puedes explicar por qué crees que solo necesitas 3 relus? la descomposición 'natural' sería una capa oculta para hacer la aproximación de cuadratura con relus y otra capa para hacer la raíz cuadrada; básicamente, relus está haciendo aproximaciones lineales por partes.
seanv507

Respuestas:


6

El resultado parece sugerir fuertemente que una o más de sus neuronas mueren (o tal vez el hiperplano de pesos de dos de sus neuronas se ha fusionado). Puedes ver que con 3 Relu, obtienes 3 divisiones oscuras en el centro cuando converges a la solución más razonable. Puede verificar fácilmente si esto es cierto al verificar los valores de salida de cada neurona para ver si permanece muerta para una gran mayoría de sus muestras. Alternativamente, puede graficar todos los pesos de neuronas 2x3 = 6, agrupados por sus respectivas neuronas, para ver si dos neuronas colapsan en el mismo par de pesos.

Sospecho que una posible causa de esto es cuando está sesgado hacia una coordenada, por ejemplo , en cuyo caso está tratando de reproducir la identidad, como entonces . Realmente no hay mucho que puedas hacer aquí para remediar esto. Una opción es agregar más neuronas como lo ha intentado. La segunda opción es probar una activación continua, como un sigmoide, o quizás algo ilimitado como un exponencial. También podría intentar abandonar (con digamos, 10% de probabilidad). Podría usar la implementación de abandono regular en keras, que es lo suficientemente inteligente como para ignorar situaciones en las que las 3 neuronas abandonan.x+iyxyabs(x+iy)x


1
+1, casi seguramente esto. Cuando usas ReLU con un número tan pequeño de pesos, las neuronas muertas casi siempre entran en juego.
kbrose

1
Esta es una suposición plausible en el caso de ReLU. Pero OP escribe que han probado algunas variantes diferentes de ReLU: ¿las neuronas muertas también se presentan en variantes como ELU o Leaky Relu o PReLU?
Sycorax dice Reinstate Monica

3 shadowy splits in the center when you converge to the more reasonable solution.Sí, esa es la aproximación cruda que quise decir; Una pirámide hexagonal invertida. or perhaps something unbounded like an exponential Intenté elu y selu, que no funcionó mucho mejor. two neurons collapse to the same pair of weightsAh, no había pensado en eso; Solo asumí que estaban muertos.
endolito

Accedí a la salida de la capa oculta mientras usaba ReLU, y confirmó que generalmente una de las neuronas está muerta. Con menos frecuencia, dos se superponen y hacen lo mismo. Me pregunto si hay una manera de hacer que las neuronas se "repelen" entre sí para que no se asienten en roles redundantes.
endolito

1
@endolith Dropout está diseñado explícitamente en torno a la construcción de neuronas independientes. Los ELU nunca "mueren", pero tienen un gradiente de fuga a la izquierda.
Sycorax dice Reinstate Monica
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.