XOR-consider

想着至少要有个交代
首先是源代码

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
# Loss = 1/2 * np.square(t - y)
dy = (y - t) / len(t)
dz = dy * deriv_relu(z)
db2 = dz.sum(axis=0)
dw2 = np.dot(dz.T, a)
# da = np.dot(dz * w2)
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函数对对称性没辙