Da es schwierig war, die Fehlerrückausbreitung des Matrixprodukts zu verstehen, werde ich es zusammenfassen.
Überprüfen der Fehlerrückausbreitung des Skalarprodukts, ![Screenshot 2020-03-29 15.41.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/209705/aaff755d-2340-a6ac-ad21- e590c81d87db.png) Unter der Annahme, dass das zu gradierende Objekt L ist und $ \ frac {\ partielles L} {\ partielles y} $ im Voraus aus dem Kettengesetz bekannt ist Das ist kein Problem, nicht wahr?
Wenn es jedoch um Matrixprodukte geht, ändert sich dies mit der Intuition.
Irgendwie kommt es nicht mit einer Stecknadel. Also werde ich es konkret bestätigen. Es wird angenommen, dass die Einstellung über das innere Produkt von zwei Neuronen X und vier Gewichten W mit dem Neuron Y verbunden ist. ** 1) Suchen Sie zuerst $ \ frac {\ partielles L} {\ partielles X} $. ** Berechnen Sie diese zunächst im Voraus. Während Sie diese Berechnung unterwegs verwenden
** 2) Suchen Sie als nächstes $ \ frac {\ partielles L} {\ partielles y} $. ** Berechnen Sie diese zunächst im Voraus. Während Sie diese Berechnung unterwegs verwenden
Wenn x1 = X, x2 = Y, grad = $ \ frac {\ partielles L} {\ partielles y} $,
class MatMul(object):
def __init__(self, x1, x2):
self.x1 = x1
self.x2 = x2
def forward(self):
y = np.dot(self.x1, self.x2)
self.y = y
return y
def backward(self, grad):
grad_x1 = np.dot(grad, self.x2.T)
grad_x2 = np.dot(self.x1.T, grad)
return (grad_x1, grad_x2)
Recommended Posts