最近我在正常的线性神经层架构上遇到了一个变种:而不是,我们现在有. 所以我们有一个“预偏见”在乘以权重之前,这会影响最后一层的激活。我不明白反向传播方程和(符合预期)。
这是它出现的原始论文(尽管论文本身实际上并不那么相关): http: //papers.nips.cc/paper/4830-learning-invariant-representations-of-molecules-for-atomization-能量预测.pdf
以下是神经网络完整代码的链接:http ://www.quantum-machine.org/code/nn-qm7.tar.gz
class Linear(Module):
def __init__(self,m,n):
self.tr = m**.5 / n**.5
self.lr = 1 / m**.5
self.W = numpy.random.normal(0,1 / m**.5,[m,n]).astype('float32')
self.A = numpy.zeros([m]).astype('float32')
self.B = numpy.zeros([n]).astype('float32')
def forward(self,X):
self.X = X
Y = numpy.dot(X-self.A,self.W)+self.B
return Y
def backward(self,DY):
self.DW = numpy.dot((self.X-self.A).T,DY)
self.DA = -(self.X-self.A).sum(axis=0)
self.DB = DY.sum(axis=0) + numpy.dot(self.DA,self.W)
DX = self.tr * numpy.dot(DY,self.W.T)
return DX
def update(self,lr):
self.W -= lr*self.lr*self.DW
self.B -= lr*self.lr*self.DB
self.A -= lr*self.lr*self.DA
def average(self,nn,a):
self.W = a*nn.W + (1-a)*self.W
self.B = a*nn.B + (1-a)*self.B
self.A = a*nn.A + (1-a)*self.A