Tantangan
Temukan jaringan neural feedforward terkecil sehingga, diberikan setiap vektor input 3 dimensi dengan entri integer di , jaringan menghasilkan akar terbesar (yaitu, "paling positif") dari polinomial dengan kesalahan lebih kecil dari .
Tidak dapat diterima
Gagasan penerimaan dalam tantangan golf saraf saya sebelumnya tampak agak membatasi, jadi untuk tantangan ini, kami menggunakan definisi yang lebih liberal dari jaringan neural feedforward:
Sebuah neuron adalah fungsi yang ditentukan oleh vektor dari bobot , sebuah Bias , dan fungsi aktivasi dengan cara berikut:
Jaringan neural feedforward dengan input node adalah fungsi dari yang dapat dibangun dari urutan neuron, di mana setiap mengambil input dari dan menghasilkan skalar . Mengingat beberapa ditentukan setdarioutput node, maka output dari jaringan saraf adalah vektor .
Karena fungsi aktivasi dapat disetel untuk setiap tugas yang diberikan, kita perlu membatasi kelas fungsi aktivasi untuk membuat tantangan ini tetap menarik. Fungsi aktivasi berikut diizinkan:
Identitas.
ReLU.
SoftPlus.
Sigmoid.
Sinusoid.
Secara keseluruhan, jaring saraf yang dapat diterima ditentukan oleh node input, urutan neuron, dan node output, sementara masing-masing neuron ditentukan oleh vektor bobot, bias, dan fungsi aktivasi dari daftar di atas. Misalnya, jaring saraf berikut ini dapat diterima, meskipun tidak memenuhi tujuan kinerja dari tantangan ini:
Input node:
Neuron: untuk
Node keluaran:
Jaringan ini terdiri dari 8 neuron, masing-masing dengan nol bias dan aktivasi identitas. Dengan kata lain, jaringan ini menghitung urutan Fibonacci umum yang dihasilkan oleh dan dan kemudian menampilkan angka 5, 9, dan 10 dari urutan ini, dalam urutan itu.
Mencetak gol
Mengingat bilangan real dengan mengakhiri ekspansi desimal, biarkan menjadi yang terkecil non-negatif bilangan bulat yang , dan biarkan menjadi yang terkecil bilangan bulat positif yang adalah integer. Kemudian kita katakan adalah presisi dari .
Misalnya, memiliki ketepatan , sedangkan memiliki ketepatan .
Skor Anda adalah jumlah dari prasyarat bobot dan bias dalam jaringan saraf Anda.
(Misalnya, contoh di atas memiliki skor 16.)
Verifikasi
Meskipun akar dapat diekspresikan dengan rumus kubik , akar terbesar mungkin paling mudah diakses dengan cara numerik. Mengikuti saran xnor, saya menghitung root terbesar untuk setiap pilihan bilangan bulat , dan hasilnya dapat ditemukan di sini . Setiap baris file teks ini berbentuk a,b,c,root
. Sebagai contoh, baris pertama melaporkan bahwa root terbesar adalah sekitar .
Sunting: File asli yang saya poskan memiliki kesalahan dalam kasus-kasus di mana polinomial memperlihatkan multi-root. Versi saat ini harus bebas dari kesalahan tersebut.
sumber
a=0
dan kuadratik memiliki dua akar kompleks?a
menjadi nol, atau bahkan hanya 1. Juga, saya akan merekomendasikan memasukkan beberapa kasus uji, memberikan akar ke presisi tinggi sehingga kami dapat memeriksa kami berada dalam 0,1. Akan lebih baik untuk memiliki output untuk semua input yang mungkin, mungkin di tautan karena itu banyak untuk posting.x -> a * sin(b * softplus(x) + c)
dapat melebihi jumlah poin data hingga denganx
presisi sembarang dengan menggunakan frekuensi yang sangat besar dan tepat.Jawaban:
146740006675.436.0505.403.44810.385599444473806 Total presisi
Untuk baseline, saya menyelidiki pendekatan berikut: PilihM., δ, ϵ > 0 sehingga jika kita sampel polinomial p ( x ) = x3+ a x2+ b x + c di
maka titik sampel terbesars⋆∈ S memuaskan p ( s⋆) < ϵ tentu ada dan selalu berada dalam 0,1 dari akar hal . Kita dapat menunjukkan bahwa untuk koleksi polinomial kita, kita dapat mengambil M.= 11 , δ= 0,1 , dan ϵ = 10- 4 .
Untuk merancang jaringan saraf yang mengimplementasikan logika ini, kita mulai dengan lapisan neuron bahwa sampel polinomial padaS . Untuk setiap s∈S , kami ambil
Selanjutnya, kami mengidentifikasi yang mana yang kurang dariϵ=10−4 . Ternyata untuk s∈S , ia menyatakan bahwa p(s)<10−4 hanya jika p ( s ) ≤ 0 . Dengan demikian, kita dapat menggunakan aktivasi relu untuk mengidentifikasi sampel kami dengan tepat:
Kami menerapkan ini dengan beberapa lapisan neuron:
Pada titik ini, kita memilikix4,s=1 ketika p(s)<10−4 , dan sebaliknya x4,s=0 . Ingat bahwa kita mencari terbesar s⋆ yang x4,s⋆=1 . Untuk tujuan ini, kami memberi label x4,M sebagai x5,M (untuk kenyamanan notasi), dan untuk setiap k≥1 , kami mendefinisikan secara iteratif
Berkat transformasi ini, setiapx5,s adalah bilangan bulat tidak negatif, dan s⋆ adalah s unik yang x5,s=1 . Kami sekarang dapat mengidentifikasi s⋆ dengan aplikasi lain dari aktivasi relu:
Secara eksplisit, kami mendefinisikan neuron dengan
Kemudianx8,s=1 jika s=s⋆ dan sebaliknya x8,s=0 . Kami menggabungkan ini secara linear untuk menghasilkan simpul keluaran kami:
Untuk skor, setiap lapisan memiliki neuron dengan tingkat presisi berbeda: (1)6+3+1+9=19 , (2) 1 + 4 = 5 , (3) 1 , (4) 5 + 5 = 10 , (5) 1 + 1 = 2 , (6) 1 + 1 = 2 , (7) 1 + 1 = 2 , (8) 1 + 1 + 1 = 3 , (9) 3 | S| . Selanjutnya, semua kecuali dua lapisan memiliki| S| =221 neuron; layer 5 memiliki| S| -1 neuron dan layer 9 memiliki1 neuron.
Sunting: Perbaikan: (1) Kami dapat mengambil sampel polinomial dengan lebih efisien menggunakan perbedaan hingga. (2) Kita dapat memotong lapisan 2 hingga 4 dengan menggunakan aktivasi sigmoid. (3) Masalah kelebihan pada lapisan 5 dapat dihindari (dan lapisan berikutnya dapat digabungkan) dengan lebih hati-hati menerapkan aktivasi relu. (4) Jumlah akhir lebih murah dengan penjumlahan per bagian .
Berikut ini adalah kode MATLAB. Agar jelas,
prec
adalah fungsi (ditemukan di sini ) yang menghitung ketepatan vektor bobot atau bias.sumber
53.26829.59629.306 total presisiKomunikasi pribadi dengan @ A.Rex mengarah ke solusi ini, di mana kami membangun jaringan saraf yang mengingat jawaban. Gagasan intinya adalah bahwa setiap fungsif: S→ R pada himpunan terbatas S menikmati dekomposisi
Berikut ini adalah implementasi MATLAB dari pendekatan ini. Yang jelas,
roots.txt
adalah file root yang diposting di atas (ditemukan di sini ), danprec
merupakan fungsi (ditemukan di sini ) yang menghitung presisi total dari vektor bobot atau bias.Sunting 1: Dua peningkatan dibandingkan yang asli: (1) Saya memfaktorkan beberapa neuron untuk loop. (2) Saya menerapkan " integrasi Lebesgue " dalam jumlah akhir dengan terlebih dahulu menggabungkan istilah dari set level yang sama. Dengan cara ini, saya membayar nilai presisi yang lebih tinggi dari suatu output hanya sekali setiap level yang ditetapkan. Juga, aman untuk membulatkan output ke kelima terdekat dengan teorema akar rasional .
Sunting 2: Tambahan kecil tambahan: (1) Saya memfaktorkan lebih banyak neuron dari perulangan for. (2) Saya tidak repot menghitung istilah dalam jumlah akhir yang hasilnya sudah nol.
sumber