MNIST
인 간단한 3 계층 신경망에서 backpropagation
을 이해하려고합니다.numpy : softmax 함수의 미분을 계산합니다.
weights
및 bias
인 입력 레이어가 있습니다. 라벨은 MNIST
이므로 10
클래스 벡터입니다.
두 번째 레이어는 linear tranform
입니다. 세 번째 계층은 출력을 확률로 얻는 softmax activation
입니다.
Backpropagation
은 각 단계에서 미분을 계산하고이를 그라디언트라고합니다.
이전 레이어는 global
또는 previous
그라디언트를 local gradient
에 추가합니다. 나는 유도체에 대하여 설명 문제가이 softmax의 설명을 통해 이동 및 그 유도체, 심지어 softmax를 자체
def softmax(x):
"""Compute the softmax of vector x."""
exps = np.exp(x)
return exps/np.sum(exps)
의 코드 샘플을 제공 온라인 softmax
여러 자원의 local gradient
을 계산하는 데 문제 i = j
및 i != j
일 때. 이것은 내가 가지고 올 한 간단한 코드입니다 내 이해를 확인하기 위해 기대했다 :
def softmax(self, x):
"""Compute the softmax of vector x."""
exps = np.exp(x)
return exps/np.sum(exps)
def forward(self):
# self.input is a vector of length 10
# and is the output of
# (w * x) + b
self.value = self.softmax(self.input)
def backward(self):
for i in range(len(self.value)):
for j in range(len(self.input)):
if i == j:
self.gradient[i] = self.value[i] * (1-self.input[i))
else:
self.gradient[i] = -self.value[i]*self.input[j]
그런 다음 self.gradient
는 벡터이다 이는 local gradient
입니다. 이 올바른지? 이것을 작성하는 더 좋은 방법이 있습니까?
이 ... 무엇 그라데이션 당신은 실제로 계산하기 때문에 불분명하려고합니까? SM은 R^n에서 R^n까지의 맵이므로 n^2 편미분 dSM [i]/dx [k] ... – Julien
@JulienBernu를 정의 할 수 있습니다. 질문을 업데이트했습니다. 이견있는 사람? –