我对https://www.sciencedirect.com/science/article/pii/S1568494604001012中提出的非黑边学习算法的再现结果有一些疑问 我写了整个类来计算仿真,但是我猜这个问题必须很简单,因为它是简单的数学,应该是可重现的
(链接1和2指向方程式摘要)
n-学习率,为0.04 伽玛0.98 nhb是一门课程,但太大了,无法发布所有内容。看来问题出在这里,我会很感激找到它的帮助,sign是sign function:)
边缘是有组织的,因此行是源节点,列是目标节点,例如W [2,1,3]将是第3次迭代中从节点2到节点4的边的值。 A [3,1]将是第4次迭代中节点2的值。
for step in range(100):
nhb.next_step()
# updating A
for i in range(nConcept):
A = nhb.A[-2,i] + np.dot(nhb.A[-2],nhb.W[-2,:,i])
nhb.A[-1,i] = nhb.sigmoid(A,1)
# updating W
for row in range(nConcept): # source
for col in range(nConcept): # target
if (row == col) or (nhb.W[0,row,col] == 1):
continue
nhb.W[-1,row,col] = nhb.gamma * nhb.W[-2,row,col] + nhb.n * nhb.A[-2,col] *
(nhb.A[-2,row] - nhb.sign(nhb.W[-2,row,col]) * nhb.A[-2,col] * nhb.W[-2,row,col])
# nhb.update_edge(row,col,option=1)
节点和边的初始值在文章中有所描述,但
W_init = np.asarray([[0,-0.4,-0.25,0,0.3],[0.36,0,0,0,0],[0.45,0,0,0,0],[-0.9,0,0,0,0],[0,0.6,0,0.3,0]])
A0 = np.asarray([[0.4, 0.7077, 0.6120, 0.7171, 0.3]])
然后在第17步之后应该是:
W_final =np.asarray([
[0,-0.1736,-0.0265,0,0.479],
[0.5103, 0, 0, 0, 0],
[0.5753, 0, 0, 0, 0],
[-0.90, 0, 0, 0, 0],
[0, 0.707, 0, 0.493, 0]])
当我离我很近但仍然不在的时候
W = np.asarray([[ 0. , -0.24525467, -0.0690278 , 0. , 0.44435492],
[ 0.51393603, 0. , 0. , 0. , 0. ],
[ 0.55661828, 0. , 0. , 0. , 0. ],
[-0.83920385, 0. , 0. , 0. , 0. ],
[ 0. , 0.68916266, 0. , 0.46529029, 0. ]])