14,674,000,667 5,436,050 5,403,448 10,385 5,994 4,447
3,806总精度
对于基线,我研究了以下方法:选择,以便如果我们对多项式进行采样M,δ,ϵ>0p(x)=x3+ax2+bx+c
S:={−M,−M+δ,−M+2δ,…,M},
则满足的最大采样点必须存在,并且必须位于的最大根的内。可以证明,对于我们的多项式集合,可以取,和。s⋆∈Sp(s⋆)<ϵ0.1pM=11δ=0.1ϵ=10−4
为了设计实现此逻辑的神经网络,我们从对上的多项式采样的神经元层开始。对于每个,我们采取Ss∈S
x1,s=s2⋅a+s⋅b+1⋅c+s3.
接下来,我们确定其中哪个小于。事实证明,对于,仅当,才认为。因此,我们可以使用relu激活来准确识别我们的样本:ϵ=10−4s∈Sp(s)<10−4p(s)≤0
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=1p(s)<10−4x4,s=0s⋆x4,s⋆=1x4,Mx5,Mk≥1
x5,M−kδ=1⋅x4,M−kδ+2⋅x5,M−(k−1)δ=∑j=0k2k−jx4,M−jδ.
由于这一转变,每是一个非负整数,而是唯一的为其。现在,我们可以通过relu激活的另一个应用程序来识别:x5,ss⋆sx5,s=1s⋆
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=1s=s⋆x8,s=0
x9=∑s∈Ss⋅x8,s=s⋆.
对于得分,每一层具有不同精度级别的神经元:(1),(2),(3),(4), (5),(6),(7),(8),(9)。此外,除两层外,所有层都有神经元;第5层具有神经元,第9层具有神经元。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)我们可以通过使用S型激活来绕过第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
和二次有两个复数根?