ニューラルネットワークで並べ替える


15

これまでのニューラルネットゴルフの課題(これそれ)は、私に新しい課題を提起するきっかけになりました。

チャレンジ

任意の4次元入力ベクトルが与えられると、ように最小のフィードフォワードニューラルネットワークを探すabcdの整数のエントリと[1010]、ネットワーク出力sort(a,b,c,d)と厳密に0.5より小さい座標に関する誤差。

許容性

この課題に対して、フィードフォワードニューラルネットワークレイヤーの構成として定義されます。層は、関数であるL:RnRm行列で指定されたARm×n重みベクトルbRmバイアス、及び活性化関数 f:RR coordinate-適用されます賢い:

L(x):=f(Ax+b),xRn.

アクティベーション関数は任意のタスクに合わせて調整できるため、この課題を面白くするためにアクティベーション関数のクラスを制限する必要があります。次のアクティベーション機能が許可されています。

  • 身元。 f(t)=t

  • ReLU。 f(t)=max(t,0)

  • ソフトプラス。 f(t)=ln(et+1)

  • 双曲線正接。 ft=タンt

  • シグモイド。 ft=etet+1

全体として、許容ニューラルネットは、フォームとるLkLk1L2L1、いくつかのためにk各層、L重みで指定されたA、バイアスb、及び活性化関数f上記のリストから。たとえば、次のニューラルネットは許容されます(このチャレンジのパフォーマンス目標を満たしていませんが、有用なガジェットである可能性があります)。

[ab最大ab]=[111212111212]ReLうん[121212121111][ab]

この例では、2つのレイヤーを示しています。両方の層のバイアスはゼロです。最初のレイヤーはReLUアクティベーションを使用し、2番目のレイヤーはIDアクティベーションを使用します。

得点

あなたのスコアは ゼロ以外の重みとバイアスのです。

(たとえば、バイアスベクトルがゼロなので、上記の例のスコアは16です。)


2
@ Close-voter:はっきりしないことは何ですか?以前のNNチャレンジのどちらもそれほど明確に指定されていないと思います。
-flawr

1
いいえ-スキップ接続は許可されません。
ダスティンG.ミクソン

1
DustinG.Mixon @私は実際にはわずか15のウェイト代わりに16を使用していますが、それは:)かなり少ないエレガントであることを最大/ minのためのアプローチを発見した
flawr

3
これはきちんと指定された課題であり、将来のニューラルネットワークの課題のモデルとして役立つと思います。
19

1
個人的には、接続をスキップせずに最適化することは難しいと感じています。これは、入力に十分近い数値を出力するにはソートNNが必要だからです。そのため、レイヤー間で入力を「記憶」/「再構築」する必要があるようです。どうやって簡単にできるのかわからないetアクティベーションとして許可されたこれらの機能の逆は存在しないためです。そのため、ベースライン(flawrの答えに示されているようにマイナーな改善があります)がすでに最適に近いReLUのみが残っています。
ジョエル

回答:


13

オクターブ96 88 87 84 76 54 50重みとバイアス

この6層ニューラルネットは、基本的に、非常に単純な/ ネットワークをコンポーネントとして構築された3ステップのソートネットワークです。基本的には、以下に示すウィキペディアのネットワークの例を少し修正したものです。最初の2つの比較は並行して行われます。ReLUを介して負の数をバイパスするには、最初に100を加算し、最後に再度100を減算します。minmax

したがって、これは単純な実装であるため、単にベースラインと見なす必要があります。ただし、大きさが大きすぎないすべての可能な数を完全にソートします。(100を別の数値に置き換えることにより、範囲を調整できます。)

オンラインでお試しください!

最大/最小コンポーネント

(ありかなり少ないエレガント少ないパラメータを使用して2つの数の最小値と最大値を見つけるために!今、よりエレガントな方法、感謝の@xnor)の方法は:

=aReLうんab最大=b+ReLうんab

これは、より少ない重みとバイアスを使用する必要があることを意味します。

@Joelに、最初のステップですべての数値を正にし、最後のステップでそれを逆にすれば十分であり、重みが-8になることを指摘してくれてありがとう。@xnorに、-22ウェイトになるさらに短いmax / minメソッドを指摘してくれてありがとう!@ DustinG.Mixonに、別の-4ウェイトをもたらす特定のマトリックスを組み合わせるヒントをありがとう!

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

オンラインでお試しください!


1
定数オフセットは、基本的に入力を非負にするために使用されます。最初の層で行われると、比較ブロックのすべての中間出力は非負であり、最後の層でのみ元に戻すだけで十分です。
ジョエル

1
で最小-最大ガジェットを短くすることができ(a - relu(a-b), b + relu(a-b))ますか?
xnor

@ジョエルああ、今私はそれを見て、それは多くの意味をなします:)
flawr

@xnorそれは大きな違いをもたらすことに感謝します!!!!
flawr

1
取るに足らないnitpick:最初のバイアスのスコアはnnz(a0)ではなくnnz(A1 * a0)です。(または、単位行列の価格を支払う必要があります。)これらの数値はこの場合同じです。
ダスティンG.ミクソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.