14,674,000,667 5,436,050 5,403,448 10,385 5,994 4,447
3,806合計精度
ベースラインについて、私は次のアプローチを調査しました。多項式p (x )= x 3 + a x 2 + b x + cをサンプリングする場合、M,δ,ϵ>0選択しますp(x)=x3+ax2+bx+c
S:={−M,−M+δ,−M+2δ,…,M},
次いで、最大サンプルポイントs⋆∈S満たすp(s⋆)<ϵ必ずしも存在し、必ずしも内に存在する0.1の最大ルートのp。多項式のコレクションでは、M=11、δ=0.1、およびϵ=10−4とることができます。
このロジックを実装するニューラルネットを設計するには、S多項式をサンプリングするニューロンのレイヤーから始めます。それぞれについて、s∈S、我々は取ります
x1,s=s2⋅a+s⋅b+1⋅c+s3.
次に、これらのどれがϵ=10−4より小さいかを特定します。それはのためにことが判明s∈S、それが保持しているp(s)<10−4場合にのみp(s)≤0。そのため、reluアクティベーションを使用してサンプルを正確に識別できます。
relu(10−4−t)−relu(−t)10−4={10if t≤0if t≥10−4.
これを数層のニューロンで実装します。
x2,sx3,sx4,s=relu(−1⋅x1,s+10−4),=relu(−1⋅x1,s),=104⋅x2,s−104⋅x3,s.
この時点で、我々はx4,s=1ときp(s)<10−4さもなければ、及びx4,s=0。我々は最大シークことリコールs⋆れるx4,s⋆=1。この目的のために、我々は、ラベルx4,Mとしてx5,M(表記の便宜のために)、およびそれぞれのためのk≥1、繰り返し定義します
x5,M−kδ=1⋅x4,M−kδ+2⋅x5,M−(k−1)δ=∑j=0k2k−jx4,M−jδ.
この変換のおかげで、すべてのx5,s非負整数であり、s⋆ユニークであるsいるx5,s=1。私たちは今、識別することができるs⋆ reluアクティベーションの他のアプリケーションで:
relu(t−2)−2⋅relu(t−1)+t={10if t=1if t∈Z≥0∖{1}.
明示的に、ニューロンを
x6,sx7,sx8,s=relu(1⋅x5,s−2),=relu(1⋅x5,s−1),=1⋅x6,s−2⋅x7,s+1⋅x5s.
次いでx8,s=1であればs=s⋆とそうでない場合x8,s=0。これらを線形結合して出力ノードを生成します。
x9=∑s∈Ss⋅x8,s=s⋆.
6+3+1+9=191+4=515+5=101+1=21+1=21+1=21+1+1=33|S||S|=221|S|−11
編集:改善:(1)有限差分を使用して、より効率的に多項式をサンプリングできます。(2)シグモイドアクティベーションを使用することで、レイヤー2〜4をバイパスできます。(3)reluアクティベーションをより注意深く適用することにより、レイヤー5のオーバーフローの問題を回避できます(後続のレイヤーを組み合わせることができます)。(4)最終的な合計は、パーツごとの合計で安価です。
以下はMATLABコードです。明確にするために、prec
は重みまたはバイアスのベクトルの精度を計算する関数(ここにあります)です。
function sstar = findsstar2(a,b,c)
relu = @(x) x .* (x>0);
totprec = 0;
% x1 samples the polynomial on -11:0.1:11
x1=[];
for s = -11:0.1:11
if length(x1) < 5
w1 = [s^2 s 1];
b1 = s^3;
x1(end+1,:) = w1 * [a; b; c] + b1;
totprec = totprec + prec(w1) + prec(b1);
else
w1 = [-1 4 -6 4];
x1(end+1,:) = w1 * x1(end-3:end,:);
totprec = totprec + prec(w1);
end
end
% x4 indicates whether the polynomial is nonpositive
w4 = -6e5;
b4 = 60;
x4=[];
for ii=1:length(x1)
x4(end+1) = sigmf(w4 * x1(ii) + b4, [1,0]);
totprec = totprec + prec(w4) + prec(b4);
end
% x6 indicates which entries are less than or equal to sstar
x5 = zeros(size(x1));
x6 = zeros(size(x1));
x5(end) = 0;
x6(end) = 0;
for ii = 1:length(x5)-1
w5 = [-1 -1];
b5 = 1;
x5(end-ii) = relu(w5 * [x4(end-ii); x6(end-ii+1)] + b5);
totprec = totprec + prec(w5) + prec(b5);
w6 = -1;
b6 = 1;
x6(end-ii) = w6 * x5(end-ii) + b6;
totprec = totprec + prec(w6) + prec(b6);
end
% a linear combination produces sstar
w7 = 0.1*ones(1,length(x1));
w7(1) = -11;
sstar = w7 * x6;
%disp(totprec) % uncomment to display score
end
a=0
、および二次関数に2つの複素根がある場合はどうなりますか?