@@ -65,6 +65,7 @@ def adam_update(neurons, lr, t, l2_reg=0, beta1=np.float32(0.9), beta2=np.float3
6565 for n in neurons :
6666 l2 = l2_reg * n .weights
6767 dx = (n .last_input .dot (n .delta )).T
68+ dBias = np .average (n .delta )
6869
6970 n .m = beta1 * n .m + (1 - beta1 ) * dx
7071 n .v = beta2 * n .v + (1 - beta2 )* (dx ** 2 )
@@ -74,33 +75,40 @@ def adam_update(neurons, lr, t, l2_reg=0, beta1=np.float32(0.9), beta2=np.float3
7475 n .v /= np .float32 (1 - beta2 ** t )
7576
7677 n .weights -= lr * n .m / (np .sqrt (n .v ) + 1e-8 ) + l2
78+ n .b -= lr * dBias
7779
7880def nag_update (neurons , lr , l2_reg = 0 , mu = np .float32 (0.9 )):
7981 for n in neurons :
8082 l2 = l2_reg * n .weights
8183 dx = (n .last_input .dot (n .delta )).T
84+ dBias = np .average (n .delta )
8285
8386 n .v_prev = n .v
8487 n .v = mu * n .v - lr * dx
8588
8689 n .weights += - mu * n .v_prev + (1 + mu ) * n .v - l2
90+ n .b -= lr * dBias
8791
8892def momentum_update (neurons , lr , l2_reg = 0 , mu = np .float32 (0.9 )):
8993 for n in neurons :
9094 l2 = l2_reg * n .weights
9195 dx = (n .last_input .dot (n .delta )).T
96+ dBias = np .average (n .delta )
9297
9398 n .v = mu * n .v - lr * dx
9499
95100 n .weights += n .v - l2
101+ n .b -= lr * dBias
96102
97103
98104def vanila_update (neurons , lr , l2_reg = 0 ):
99105 for n in neurons :
100106 l2 = l2_reg * n .weights
101- d = (n .last_input .dot (n .delta )).T
107+ dx = (n .last_input .dot (n .delta )).T
108+ dBias = np .average (n .delta )
102109
103- n .weights -= lr * d + l2
110+ n .weights -= lr * dx + l2
111+ n .b -= lr * dBias
104112
105113def sigmoid (input ):
106114 return 1 / (1 + np .exp (- input ))
0 commit comments