La sfida
Trova la più piccola rete neurale feedforward tale che, dato qualsiasi vettore di input tridimensionale con voci intere in , la rete emette la radice più grande (cioè "più positiva") della polinomiale con errore strettamente inferiore a .
ammissibilità
La nozione di ammissibilità nella mia precedente sfida sul golf della rete neurale sembrava un po 'restrittiva, quindi per questa sfida, stiamo usando una definizione più liberale di rete neurale feedforward:
Un neurone è una funzione che è specificata da un vettore di pesi , una tendenza e una funzione di attivazione nel modo seguente:
Una rete neurale feedforward con nodi di input è una funzione di che può essere costruita da una sequenza di neuroni, dove ogni riceve input da e genera un scalare . Dato un determinato set S \ subseteq \ {1, \ ldots, N \} dei nodi di output , l'output della rete neurale è il vettore (x_k) _ {k \ in S} .
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à.
Relu.
SoftPlus.
Sigma.
Sinusoid.
Nel complesso, una rete neurale ammissibile è specificata da nodi di input, una sequenza di neuroni e nodi di output, mentre ogni neurone è specificato da un vettore di pesi, una distorsione e una funzione di attivazione dall'elenco precedente. Ad esempio, la seguente rete neurale è ammissibile, sebbene non soddisfi l'obiettivo prestazionale di questa sfida:
Nodi di input:
Neuroni: per
Nodi di output:
Questa rete è composta da 8 neuroni, ciascuno con zero pregiudizi e attivazione dell'identità. In parole, questa rete calcola la sequenza di Fibonacci generalizzata generata da e e quindi emette i numeri 5, 9 e 10 da questa sequenza, in quell'ordine.
punteggio
Dato un numero reale con l'espansione decimale finale, lascia che sia il numero intero non negativo più piccolo per il quale e che sia il numero intero non negativo più piccolo per quale è intero. Quindi diciamo che è la precisione di .
Ad esempio, ha una precisione di , mentre ha una precisione di .
Il tuo punteggio è la somma delle precisioni dei pesi e dei pregiudizi nella tua rete neurale.
(Ad esempio, l'esempio sopra ha un punteggio di 16.)
Verifica
Mentre le radici possono essere espresse in termini di formula cubica , la radice più grande è forse più facilmente accessibile con mezzi numerici. Seguendo il suggerimento di @ xnor, ho calcolato la radice più grande per ogni scelta di numeri interi , e i risultati possono essere trovati qui . Ogni riga di questo file di testo è nel modulo . Ad esempio, la prima riga riporta che la radice più grande di è circa .x 3 - 10 x 2 - 10 x - 10 10.99247140445449a,b,c,root
Modifica: il file originale che ho pubblicato conteneva errori nei casi in cui il polinomio presentava una radice multipla. La versione corrente dovrebbe essere priva di tali errori.
a
diverso da zero, o anche solo 1. Inoltre, consiglierei di inserire alcuni casi di test, dando le radici ad alta precisione in modo da poter verificare che i nostri siano entro 0,1. Sarebbe anche bello avere degli output per tutti gli input possibili, probabilmente in un link dato che è molto per il post.
x -> a * sin(b * softplus(x) + c)
può essere adatta a qualsiasi numero finito di punti dati con numero intero x
a precisione arbitraria usando una frequenza estremamente grande e precisa.
a=0
e il quadratico ha due radici complesse?