想着至少要有个交代
首先是源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| def once(): w1 = W1 w2 = W2 b2 = B2 b1 = B1 x = inputs h = get_h(x, W1, B1) a = relu(h) z = get_h(a, W2, B2) y = relu(z) t = labels dy = (y - t) / len(t) dz = dy * deriv_relu(z) db2 = dz.sum(axis=0) dw2 = np.dot(dz.T, a) da = np.outer(dz, w2) dh = da * deriv_relu(h) db1 = dh.sum(axis=0) dw1 = np.dot(dh.T, x)
|
如果是结果逼近0.5的情况
我假设这是必然发生的,因为Cost函数要求了所有损失的最小化,那就必然出现这样对称的结果
dz 约等于 array([ 0.125, -0.125, -0.125, 0.125])
随后db2是dz的sum(Cost函数的对称性在这里就变成了坑)就会变成0
然后dw2, 这时候00和01,10和11,因为对称性的缘故,dz和a的点乘居然也趋近0
后面就不用说了,全都趋近0,我认为可以归咎到Cost函数的锅
Cost函数对对称性没辙