Ordina con una rete neurale


15

Le precedenti sfide del golf della rete neurale ( questa e quella ) mi hanno ispirato a porre una nuova sfida:

La sfida

Trova la più piccola rete neurale feedforward tale che, dato qualsiasi vettore di input 4-dimensionale (un',B,c,d) con voci intere in [-10,10] , le uscite di rete ordinare(un',B,c,d) con un errore di coordinate strettamente inferiore a 0.5 .

ammissibilità

Per questa sfida, una rete neurale feedforward è definita come una composizione di strati . Uno strato è una funzione L:RnRm che è specificata da una matrice UNRm×n di pesi , un vettore BRm di distorsioni e una funzione di attivazione f:RR che viene applicata coordinata- saggio:

L(X): =f(UNX+B),XRn.

Poiché le funzioni di attivazione possono essere regolate per qualsiasi attività, è necessario limitare la classe di funzioni di attivazione per mantenere interessante questa sfida. Sono consentite le seguenti funzioni di attivazione:

  • Identità. f(t)=t

  • Relu. f(t)=max(t,0)

  • SoftPlus. f(t)=ln(et+1)

  • Tangente iperbolica. f(t)=tanh(t)

  • Sigma. f(t)=etet+1

Complessivamente, una rete neurale ammissibile assume la forma LKLK-1L2L1 per alcuni K , dove ogni strato Lio è specificato dai pesi UNio , bias Bio e una funzione di attivazione fio dall'elenco sopra. Ad esempio, è ammessa la seguente rete neurale (sebbene non soddisfi l'obiettivo prestazionale di questa sfida, può essere un gadget utile):

[min(un',B)max(un',B)]=[1-1-12-121-11212]ReLU[1212-12-121-1-11][un'B]

Questo esempio mostra due livelli. Entrambi i livelli hanno un bias zero. Il primo livello utilizza l'attivazione ReLU, mentre il secondo utilizza l'attivazione dell'identità.

punteggio

Il tuo punteggio è il numero totale di pesi e distorsioni diversi da zero .

(Ad esempio, l'esempio sopra ha un punteggio di 16 poiché i vettori di polarizzazione sono zero.)


2
@ Elettore ravvicinato: cosa non è esattamente chiaro? Non credo che nessuna delle precedenti sfide della NN sia stata così ben specificata.
Flawr,

1
No: non è possibile saltare le connessioni.
Dustin G. Mixon,

1
@ DustinG.Mixon In realtà ho appena trovato un approccio per il massimo / minimo che utilizza solo 15 pesi anziché 16, ma è notevolmente meno elegante :)
flawr

3
Questa è una sfida ben specificata che penso possa servire da modello per le future sfide della rete neurale.
xnor

1
et

Risposte:


13

Ottava , 96 88 87 84 76 54 50 pesi e inclinazioni

Questa rete neurale a 6 strati è essenzialmente una rete di smistamento in 3 fasi costruita da una rete min/ maxcomponente molto semplice . È fondamentalmente la rete di esempio di Wikipedia come mostrato di seguito, con una piccola modifica: i primi due confronti sono fatti in parallelo. Per aggirare i numeri negativi attraverso la ReLU, aggiungiamo prima 100 e poi sottraggiamo nuovamente 100 alla fine.

Quindi questo dovrebbe essere considerato solo come una linea di base in quanto è un'implementazione ingenua. Tuttavia, ordina tutti i numeri possibili che non hanno una grandezza troppo grande perfettamente. (Possiamo regolare l'intervallo sostituendo 100 con un altro numero.)

Provalo online!

max / min-componente

Esiste un modo ( molto meno elegante , più elegante ora, grazie a @xnor!) Per trovare il minimo e il massimo di due numeri usando meno parametri:

min=un'-ReLU(un'-B)max=B+ReLU(un'-B)

Ciò significa che dobbiamo usare molti meno pesi e distorsioni.

Grazie @Joel per aver sottolineato che è sufficiente rendere tutti i numeri positivi nel primo passo e invertirlo nell'ultimo, il che rende -8 pesi. Grazie @xnor per aver sottolineato un metodo max / min ancora più breve che rende -22 pesi! Grazie @ DustinG.Mixon per la punta di combinare alcune matrici che si traducono in altri -4 pesi!

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

Provalo online!


1
Gli offset costanti vengono sostanzialmente utilizzati per rendere gli ingressi non negativi. Una volta fatto nel primo strato, tutte le uscite intermedie dei blocchi di confronto non sono negative e è sufficiente ripristinarlo solo nell'ultimo livello.
Gioele,

1
Potresti ottenere un gadget min-max più breve con (a - relu(a-b), b + relu(a-b))?
xnor

@joel Oh ora capisco, ha molto senso :)
Flawr,

@xnor Grazie mille che fa la differenza !!!!
flawr,

1
Nitpick non pertinente: il punteggio per il primo bias è nnz (A1 * a0), non nnz (a0). (Oppure dobbiamo pagare il prezzo di una matrice di identità.) Questi numeri sono gli stessi in questo caso.
Dustin G. Mixon,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.