Sinir ağı ile sıralama


15

Önceki sinirsel net golf zorlukları ( şu ve bu ) yeni bir meydan okumaya ilham verdi:

Meydan okuma

da tamsayı girişleri olan herhangi bir 4 boyutlu giriş vektörü verildiğinde, ağın kesinlikle daha küçük bir koordinat açısından hata .(bir,b,c,d)[-10,10]çeşit(bir,b,c,d)0.5

kabul edilebilirlik

Bu zorluk için, ileri beslemeli bir sinir ağı tabakaların bir bileşimi olarak tanımlanır . Bir tabaka bir fonksiyonudur , bir matris tarafından belirtilen ve ağırlıkları , bir vektör arasında yanlılık ve bir aktivasyon fonksiyonu koordinat damla tatbik edilir:L:R,nR,mbirR,mxnbR,m f:R,R,

L(x): =f(birx+b),xR,n.

Etkinleştirme işlevleri herhangi bir görev için ayarlanabildiğinden, bu zorluğu ilginç tutmak için etkinleştirme işlevleri sınıfını kısıtlamamız gerekir. Aşağıdaki etkinleştirme işlevlerine izin verilir:

  • Kimlik. f(t)=t

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

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

  • Hiperbolik tanjant. f(t)=tanh(t)

  • Sigmoid. f(t)=etet+1

Genel olarak, kabul edilebilir bir sinirsel ağ şeklini alır bazı her bir katman, ağırlıkları ile belirlenir yanlılıklar , ve bir aktivasyon fonksiyonu Yukarıdaki listeden. Örneğin, aşağıdaki sinir ağı kabul edilebilir (bu zorluğun performans hedefini karşılamasa da, yararlı bir gadget olabilir):LkLk-1L2L1kLbenbirbenbbenfben

[min(a,b)max(a,b)]=[111212111212]ReLU[121212121111][ab]

Bu örnekte iki katman gösterilmektedir. Her iki katmanın da sıfır sapması vardır. İlk katman ReLU aktivasyonunu kullanırken, ikinci katman kimlik aktivasyonunu kullanır.

puanlama

Puanınız, sıfır olmayan ağırlık ve önyargıların toplam sayısıdır .

(Örneğin, yukarıdaki örnekte sapma vektörleri sıfır olduğu için 16 puanı vardır.)


2
@ Yakın seçmen: Tam olarak belirsiz olan nedir? Önceki NN zorluklarının hiçbirinin bu kadar iyi tanımlandığını düşünmüyorum.
flawr

1
Atlama bağlantısına izin verilmez.
Dustin G. Mixon

1
@ DustinG.Mixon Aslında sadece 16 yerine 15 ağırlık kullanan max / min için bir yaklaşım buldum, ancak oldukça az zarif :)
flawr

3
Bu, gelecekteki sinir ağı zorlukları için bir model olarak kullanılabileceğini düşündüğüm güzel belirlenmiş bir zorluk.
xnor

1
Kişisel olarak bağlantıları atlamaksızın optimizasyonu zor buluyorum. Bunun nedeni, girişlere yeterince yakın sayılar çıkarmak için bir sıralama NN'sinin gerekli olmasıdır. Bu nedenle, katmanlar arasındaki girdileri 'hatırlamak' / 'yeniden yapılandırmak' gerekli görünüyor. Etkinleştirme olarak izin verilen bu işlevlerin tersi olmadığından, dahil olduktan sonra bunun nasıl kolayca yapılabileceğini görmüyorum . Bu nedenle, yalnızca taban çizgisinin (kusur yanıtında gösterildiği gibi küçük iyileştirmelerle) zaten optimal olduğu ReLU'larla kalıyoruz. et
Joel

Yanıtlar:


13

Oktav , 96 88 87 84 76 54 50 ağırlık ve önyargı

Bu 6 katmanlı sinir ağı, temel olarak çok basit bir / ağdan bileşen olarak inşa edilmiş 3 aşamalı bir sıralama ağıdır . Temel olarak, aşağıda gösterildiği gibi küçük bir değişiklikle wikipedia'dan örnek ağdır: İlk iki karşılaştırma paralel olarak yapılır. ReLU üzerinden negatif sayıları atlamak için, önce sadece 100 ekleriz ve sonra tekrar 100 çıkarırız.minmax

Bu yüzden bu naif bir uygulama olduğu için sadece bir temel olarak düşünülmelidir. Bununla birlikte, çok büyük bir büyüklüğü olmayan tüm olası sayıları mükemmel bir şekilde sıralar. (Aralığı 100'ü başka bir sayıyla değiştirerek ayarlayabiliriz.)

Çevrimiçi deneyin!

maks / min bileşenli

Bir (Orada çok daha az zarif az parametreleri kullanarak iki sayının minimum ve maksimum bulmak için! Şimdi daha zarif bir yolu, teşekkür @xnor) yol:

min=bir-R,eLU(bir-b)maksimum=b+R,eLU(bir-b)

Bu, çok daha az ağırlık ve önyargı kullanmamız gerektiği anlamına gelir.

@Joel'e, ilk adımda tüm sayıları pozitif yapmanın ve son adımda tersine çevirmenin yeterli olduğunu belirten teşekkür ederiz, bu da -8 ağırlık yapar. @22nor, -22 ağırlık yapan daha kısa bir max / min yöntemini işaret ettiği için teşekkürler! Başka bir -4 ağırlığa neden olan belirli matrisleri birleştirmenin ucu için @ DustinG.Mixon'a teşekkürler!

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

Çevrimiçi deneyin!


1
Sabit ofsetler temel olarak girişleri negatif yapmak için kullanılır. İlk katmanda yapıldıktan sonra, karşılaştırma bloklarının tüm ara çıktıları negatif değildir ve sadece son katmanda geri değiştirilmesi yeterlidir.
Joel

1
Daha kısa bir min-max gadget'ı alabilir misiniz (a - relu(a-b), b + relu(a-b))?
xnor

@joel Ah şimdi anlıyorum, bu çok mantıklı :)
flawr

@xnor Büyük fark yaratan çok teşekkürler !!!!
flawr

1
Sonuçsuz nitpick: İlk önyargı için skor nnz (a0) değil, nnz'dir (A1 * a0). (Ya da bir kimlik matrisinin bedelini ödemeliyiz.) Bu sayılar bu durumda aynıdır.
Dustin G. Mixon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.