Ordenar con una red neuronal

15

Los anteriores desafíos de golf de redes neuronales ( esto y aquello ) me inspiraron a plantear un nuevo desafío:

El reto

Encuentra la red neuronal feedforward más pequeño de tal manera que, dado cualquier vector 4-dimensional de entrada (un,si,C,re) con las entradas de número entero en [-10,10] , las salidas de la red ordenar(un,si,C,re) con Un error de coordenadas estrictamente menor que 0.5 0.5 .

Admisibilidad

Para este desafío, una red neuronal de avance se define como una composición de capas . Una capa es una función L:RnorteRmetro que se especifica mediante una matriz UNRmetro×norte de pesos , un vector siRmetro de sesgos y una función de activación F:RR que se aplica coordenada- sabio:

L(X): =F(UNX+si),XRnorte.

Dado que las funciones de activación pueden ajustarse para cualquier tarea dada, necesitamos restringir la clase de funciones de activación para mantener este desafío interesante. Se permiten las siguientes funciones de activación:

  • Identidad. F(t)=t

  • ReLU. F(t)=max(t,0 0)

  • Softplus. F(t)=En(mit+1)

  • Tangente hiperbólica. F(t)=tanh(t)

  • Sigmoideo. F(t)=mitmit+1

En general, una red neuronal admisible toma la forma LkLk-1L2L1 para algunos k , donde cada capa Lyo está especificada por los pesos UNyo , sesgos siyo , y una función de activación Fyo de la lista anterior. Por ejemplo, la siguiente red neuronal es admisible (aunque no satisface el objetivo de rendimiento de este desafío, puede ser un gadget útil):

[min(un,si)max(un,si)]=[1-1-12-121-11212]RmiLU[1212-12-121-1-11][unsi]

Este ejemplo exhibe dos capas. Ambas capas tienen sesgo cero. La primera capa usa activación ReLU, mientras que la segunda usa activación de identidad.

Puntuación

Tu puntaje es el número total de cero pesos y sesgos .

(Por ejemplo, el ejemplo anterior tiene una puntuación de 16 ya que los vectores de sesgo son cero).

Dustin G. Mixon
fuente
2
@ Votante cerrado: ¿Qué es exactamente lo que no está claro? No creo que ninguno de los desafíos anteriores de NN estuviera tan bien especificado.
flawr
1
No, no se permiten conexiones de omisión.
Dustin G. Mixon
1
@ DustinG.Mixon De hecho, acabo de encontrar un enfoque para el máximo / mínimo que solo usa 15 pesos en lugar de 16, pero es considerablemente menos elegante :)
error
3
Este es un desafío bien especificado que creo que podría servir como modelo para futuros desafíos de redes neuronales.
xnor
1
Personalmente, me resulta difícil optimizar sin omitir conexiones. Esto se debe a que se requiere una clasificación NN para generar números lo suficientemente cerca de las entradas. Por lo tanto, parece necesario 'recordar' / 'reconstruir' las entradas a través de las capas. No veo cómo podría hacerse fácilmente una vez que está involucrado ya que no hay inversas de esas funciones permitidas como activaciones. Por lo tanto, solo nos quedan las ReLU para las cuales la línea de base (con pequeñas mejoras como se muestra en la respuesta de flawr) ya es casi óptima. et
Joel

Respuestas:

13

Octava , 96 88 87 84 76 54 50 pesos y sesgos

Esta red neuronal de 6 capas es esencialmente una red de clasificación de 3 pasos construida a partir de una red min/ maxcomponente muy simple . Es básicamente la red de ejemplo de wikipedia como se muestra a continuación, con una pequeña modificación: las dos primeras comparaciones se realizan en paralelo. Para evitar números negativos a través de ReLU, solo sumamos 100 primero, y luego restamos 100 nuevamente al final.

Entonces, esto solo debe considerarse como una línea de base, ya que es una implementación ingenua. Sin embargo, ordena todos los números posibles que no tienen una magnitud demasiado grande perfectamente. (Podemos ajustar el rango reemplazando 100 con otro número).

Pruébalo en línea!

componente max / min

Hay una manera ( considerablemente menos elegante , más elegante ahora, ¡gracias @xnor!) De encontrar el mínimo y el máximo de dos números usando menos parámetros:

min=aReLU(ab)max=b+ReLU(ab)

Esto significa que tenemos que usar muchos menos pesos y sesgos.

Gracias @Joel por señalar que es suficiente hacer que todos los números sean positivos en el primer paso y revertirlo en el último, lo que hace -8 pesos. ¡Gracias @xnor por señalar un método máximo / mínimo aún más corto que genera -22 pesos! ¡Gracias @ DustinG.Mixon por la sugerencia de combinar ciertas matrices que resultan en otros -4 pesos!

function z = net(u)
a1 = [100;100;0;100;100;0];
A1 = [1 0 0 0;0 0 1 0;1 0 -1 0;0 1 0 0;0 0 0 1;0 1 0 -1];
B1 = [1 0 -1 0 0 0;0 0 0 1 0 -1;0 1 1 0 0 0;0 0 0 0 1 1];
A2 = [1 0 0 0;0 1 0 0;1 -1 0 0;0 0 1 0;0 0 0 1;0 0 1 -1];
A3 = [1 0 -1 0 0 0;0 1 1 0 0 0;0 0 0 1 0 -1;0 1 1 -1 0 1;0 0 0 0 1 1];
B3 = [1 0 0 0 0;0 1 0 -1 0;0 0 1 1 0;0 0 0 0 1];
b3 = -[100;100;100;100];
relu = @(x)x .* (x>0);
id = @(x)x;
v = relu(A1 * u + a1);
w = id(B1 * v) ;
x = relu(A2 * w);
y = relu(A3 * x);
z = id(B3 * y + b3);
% disp(nnz(a1)+nnz(A1)+nnz(B1)+nnz(A2)+nnz(A3)+nnz(B3)+nnz(b3)); %uncomment to count the total number of weights
end

Pruébalo en línea!

falla
fuente
1
Los desplazamientos constantes se utilizan básicamente para hacer que las entradas no sean negativas. Una vez hecho en la primera capa, todas las salidas intermedias de los bloques de comparación no son negativas y es suficiente volver a cambiarlo solo en la última capa.
Joel
1
¿Podría obtener un dispositivo min-max más corto con (a - relu(a-b), b + relu(a-b))?
xnor
@joel Oh, ahora veo, eso tiene mucho sentido :)
error
@xnor ¡Muchas gracias que hacen una gran diferencia!
defecto
1
Nitpick inconsecuente: La puntuación para el primer sesgo es nnz (A1 * a0), no nnz (a0). (De lo contrario, debemos pagar el precio de una matriz de identidad). Estos números son los mismos en este caso.
Dustin G. Mixon