바뀜

1,188 바이트 추가됨 ,  2021년 12월 8일 (수) 11:59
잔글
편집 요약 없음
8번째 줄: 8번째 줄:  
= 사용예 =
 
= 사용예 =
 
각 층을 클래스로 만들고, 해당 레이어의 전방전파, 후방전파 메서드를 만들어 구현한다.
 
각 층을 클래스로 만들고, 해당 레이어의 전방전파, 후방전파 메서드를 만들어 구현한다.
 +
 +
처음 출발하는 수는 1이다.  <math>\frac{\partial L}{\partial L} =1</math>이므로.
    
== Relu ==
 
== Relu ==
59번째 줄: 61번째 줄:  
== softmax ==
 
== softmax ==
 
원리는 다음 affine 계층에서의 역전파를 참고하자.
 
원리는 다음 affine 계층에서의 역전파를 참고하자.
 +
 +
일반적으로 Cross entropy error층과 함께 사용된다. 교차 엔트로피의 수식은 <math>L=-\sum_{k}t_k \ln y_k</math>이다. 역전파가 들어오면
 +
 +
=== 크로스엔트로피의 역전파 ===
 +
 +
* +의 역전파 -1을 그대로 전달하고,
 +
* 위에 곱해 *의 역전파 두 입력을 바꾸어 각 노드에 <math>-t_k</math>가  전달되고,
 +
* 위에 곱해 log의 역전파 <math>-\frac{t_k}{y_k}</math>를 전달한다.
 +
 +
=== 소프트맥스의 역전파 ===
 +
 +
* 입력값으로 <math>-\frac{t_k}{y_k}</math>가 들어오고,
 +
* 나누어주는 값으론 <math>\frac{t_1+t_2+...}{S}</math>인데, t_k는 정답레이블이므로 다 더하면 1이 된다. 즉, 분모의 시그마로 나누는 과정의 역전파는 <math>\frac{1}{S}</math>
 +
* 각각의 분자에는 <math>-\frac{t_k}{S y_k}</math>가 들어오고 exp연산에서 <math>y_k -t_k</math>가 결과로 나오게 된다.
    
=== 구현 ===
 
=== 구현 ===
71번째 줄: 87번째 줄:  
         self.t = t
 
         self.t = t
 
         self.y = softmax(x)  # 이전에 구현한 소프트맥스 함수값을 넣는다.
 
         self.y = softmax(x)  # 이전에 구현한 소프트맥스 함수값을 넣는다.
         self.loss = cross_entrop_error(self.y, self.t)  # 오차함수로 오차값을 얻는다.
+
         self.loss = cross_entrop_error(self.y, self.t)  # 오차함수로 오차값을 얻는다. 내 생각엔 backward에서 다뤄도 될 것 같은데..
         return self.loss
+
         return self.loss # 포워드니까 y값이 나와야 하는 거 아닌감??
 
     def backward(self, dout):
 
     def backward(self, dout):
 
         batch_size = self.t.shape[0]  # 데이터 갯수
 
         batch_size = self.t.shape[0]  # 데이터 갯수
         dx = (self.y - self.t) / batch_size  # 역전파값을 데이터 갯수로 나눈다.
+
         dx = (self.y - self.t) / batch_size  # 역전파값을 데이터 갯수로 나눈다.(데이터를 여러 개 넣었을 경우.)
 
         return dx
 
         return dx
 
</syntaxhighlight>
 
</syntaxhighlight>
101번째 줄: 117번째 줄:  
         self.db = np.sum(dout, axis=0)  # +의 역전파는 그냥 더할 뿐이니, 전파된 값들을 다 더해 하나의 축으로 만든다.
 
         self.db = np.sum(dout, axis=0)  # +의 역전파는 그냥 더할 뿐이니, 전파된 값들을 다 더해 하나의 축으로 만든다.
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
[[분류:딥러닝 이론]]