制作一个4*4*2结构的神经网络,向这个网络输入吸引子并让这个网络向1,0收敛
将这个网络简单表示成
s(c)-4-4-2-(2*k),k∈(0,1)
用同样的办法制作一个4*4*2的网络向这个网络输入鞍点,并让这个网络向0,1收敛将这个网络表示成
s(a)-4-4-2-(2*k),k∈(0,1)
现在用这两个网络组成一个网络,并让4*4*2部分的权重共享,前面大量实验表明这种效果相当于将两个弹性系数为k1,k2的弹簧并联成一个弹性系数为k的弹簧,并且让k1=k2=k/2的过程。
将这个网络简写成
d2(c,a)-4-4-2-(2*k),k∈(0,1)
这个网络的收敛标准是
if (Math.abs(f2[0]-y[0])< δ && Math.abs(f2[1]-y[1])< δ )
因为对应每个收敛标准δ都有一个特征的迭代次数n与之对应因此可以用迭代次数曲线n(δ)来评价网络性能。
本文尝试了δ从0.5到1e-7在内的35个值.
具体进样顺序 | |||
进样顺序 | 迭代次数 | ||
δ=0.5 | |||
c | 1 | 判断是否达到收敛 | |
a | 2 | 判断是否达到收敛 | |
梯度下降 | |||
c | 3 | 判断是否达到收敛 | |
a | 4 | 判断是否达到收敛 | |
梯度下降 | |||
…… | |||
达到收敛标准测量准确率,记录迭代次数,将这个过程重复199次 | |||
δ=0.4 | |||
… | |||
δ=1e-7 |
其中吸引子为
Random rand1 =new Random();
int ti1=rand1.nextInt(98)+1;
x[0]=((double)ti1/100);
Random rand2 =new Random();
int ti2=rand2.nextInt(98)+1;
x[3]=((double)ti2/100);
鞍点为
Random rand1 =new Random();
int ti1=rand1.nextInt(98)+1;
x[0]=1+((double)ti1/100);
Random rand2 =new Random();
int ti2=rand2.nextInt(98)+1;
x[3]=((double)ti2/100);
f2[0] | f2[1] | 迭代次数n | 平均准确率p-ave | δ | 耗时ms/次 | 耗时ms/199次 | 耗时 min/199 |
0.4973738 | 0.5790926 | 102.78392 | 0 | 0.5 | 1.1407035 | 227 | 0.0037833 |
0.3882091 | 0.604727 | 656.61809 | 0 | 0.4 | 1.5728643 | 313 | 0.0052167 |
0.6141019 | 0.3955552 | 981.76382 | 0 | 0.3 | 2.7386935 | 546 | 0.0091 |
0.8300665 | 0.1785641 | 1123.7638 | 0 | 0.2 | 2.7336683 | 545 | 0.0090833 |
0.9184898 | 0.0878419 | 1405.7337 | 0 | 0.1 | 2.8090452 | 559 | 0.0093167 |
0.9919032 | 0.008539 | 2632.1055 | 0 | 0.01 | 5.8894472 | 1203 | 0.02005 |
0.9991512 | 8.69E-04 | 5691.7337 | 0 | 0.001 | 14.080402 | 2802 | 0.0467 |
0.999917 | 8.38E-05 | 15195.593 | 0 | 1.00E-04 | 27.753769 | 5523 | 0.09205 |
0.9999257 | 7.47E-05 | 15284.769 | 0 | 9.00E-05 | 25.21608 | 5018 | 0.0836333 |
0.9999339 | 6.64E-05 | 16076.286 | 0 | 8.00E-05 | 27.080402 | 5405 | 0.0900833 |
0.9999425 | 5.78E-05 | 16793.824 | 0 | 7.00E-05 | 26.788945 | 5331 | 0.08885 |
0.9999502 | 5.00E-05 | 17768.357 | 0 | 6.00E-05 | 28.351759 | 5642 | 0.0940333 |
0.9999595 | 4.07E-05 | 18253.603 | 0 | 5.00E-05 | 29.190955 | 5824 | 0.0970667 |
0.9999668 | 3.34E-05 | 20081.362 | 0 | 4.00E-05 | 31.723618 | 6313 | 0.1052167 |
0.9999752 | 2.50E-05 | 21984.236 | 0 | 3.00E-05 | 35.281407 | 7022 | 0.1170333 |
0.9999841 | 1.60E-05 | 24490.99 | 0 | 2.00E-05 | 39.316583 | 7824 | 0.1304 |
0.999992 | 8.01E-06 | 28248.005 | 0 | 1.00E-05 | 46.040201 | 9162 | 0.1527 |
0.9999928 | 7.18E-06 | 29563.402 | 0 | 9.00E-06 | 48.567839 | 9665 | 0.1610833 |
0.9999936 | 6.39E-06 | 29501.603 | 0 | 8.00E-06 | 47.336683 | 9435 | 0.15725 |
0.9999944 | 5.66E-06 | 30280.618 | 0 | 7.00E-06 | 49.592965 | 9869 | 0.1644833 |
0.9999953 | 4.71E-06 | 32122.377 | 0 | 6.00E-06 | 51.748744 | 10298 | 0.1716333 |
0.9999961 | 3.92E-06 | 33773.653 | 0 | 5.00E-06 | 54.944724 | 10934 | 0.1822333 |
0.9999969 | 3.12E-06 | 34983.06 | 0 | 4.00E-06 | 56.954774 | 11334 | 0.1889 |
0.9999976 | 2.37E-06 | 37436.166 | 0 | 3.00E-06 | 60.236181 | 11988 | 0.1998 |
0.9999984 | 1.58E-06 | 41540.487 | 0 | 2.00E-06 | 71.80402 | 14291 | 0.2381833 |
0.9999992 | 7.91E-07 | 46298.869 | 0 | 1.00E-06 | 74.346734 | 14795 | 0.2465833 |
0.9999993 | 6.95E-07 | 47482.819 | 0 | 9.00E-07 | 78.949749 | 15711 | 0.26185 |
0.9999994 | 6.09E-07 | 50850.447 | 0 | 8.00E-07 | 81.653266 | 16249 | 0.2708167 |
0.9999995 | 5.44E-07 | 50078.759 | 0 | 7.00E-07 | 79.849246 | 15890 | 0.2648333 |
0.9999995 | 4.55E-07 | 53463.724 | 0 | 6.00E-07 | 85.266332 | 16968 | 0.2828 |
0.9999996 | 3.84E-07 | 54474.839 | 0 | 5.00E-07 | 88.100503 | 17549 | 0.2924833 |
0.9999997 | 3.09E-07 | 55232.638 | 0 | 4.00E-07 | 87.738693 | 17460 | 0.291 |
0.9999998 | 2.32E-07 | 59315.241 | 0 | 3.00E-07 | 93.527638 | 18612 | 0.3102 |
0.9999999 | 1.47E-07 | 62487.734 | 0 | 2.00E-07 | 97.663317 | 19435 | 0.3239167 |
0.9999999 | 7.58E-08 | 70304.487 | 0 | 1.00E-07 | 114.0804 | 22702 | 0.3783667 |
迭代次数随着δ的减小不断增加。
可以很合理假设两个微观粒子在碰到一起的时候一定要相互区分对方,就向在吸引子和鞍点之间有一种力随着两个分类对象的接近而增加;或者也可以理解成两个对象之间的力之所以随着距离的减小而增加是因为两个对象在任意小的精度上的差别都在变小,但两个对象的差别在任意小的精度上一直存在。
如果假设每张图片相对神经网络都有两个属性分别是频率和质量,频率和点的分布有关,而质量和点的数值大小有关。而排斥子和鞍点就是两条对角线。他们能被分类从数据上证明了图片相对神经网络存在一种与分布无关的属性可以实现彼此区别。
实验参数
学习率 0.1 |
权重初始化方式 |
Random rand1 =new Random(); |
int ti1=rand1.nextInt(98)+1; |
tw[a][b]=xx*((double)ti1/100); |
吸引子
鞍点