카테고리 없음

Softmax-with-loss층 역전파(밑바닥부터시작하는딥러닝)

ROSEV 2021. 11. 18. 11:58

출처 : 수원대학교 한경훈교수님

소프트맥스층과 크로스엔트로피층은 두개를 합성하여, 도합수를 구하는게 간단하다 보통은 각각의 도함수가 덜 복잡하지만, 합성한 후의 도합수가 간단. 그래서 두층을 엮어서 역전파를 생각 해야합니다. 이 두개의 층을 softmax-with-loss층이라고 부를 것입니다.

 

 

위의 수식을 통한 과정을 통해 오차역전파를 진행합니다. 소프트맥스 함수의 손실 함수로 교차 엔트로피 오차를 사용하니 역전파가 (y1 - t1, y2 - t2, y3 - t3)로 말끔하게 떨어집니다. 또한, 회귀 출력층에서 사용하는 항등 함수의 손실 함수로 '오차제곱합'을 이용하는 이유도 이와 같습니다.

  • 예를들면 정답 레이블이 (0, 1, 0)이 있고, Softmax 계층이 (0.3, 0.2, 0.5)를 출력 했다고 보면, 정답 확률이 20%로 제대로 인식하지 못하고 있지만, 크로스엔트로피오차를 통한 역전파시(0-0.3,1-0.2,0-0.5)=(0.3,-0.8,0.5)라는 커다란 오차를 전파하여, 이를 통해 정답에 가까워질 수 있습니다.

 

# Softmax-With-Loss

class SoftmaxWithLoss:
	def __init__(self):
    	self.loss = None
        self.y = None
        self.t = None
        
    
    def forward(slef, x, t):
    	self.t = t
        self.y = softmax(x)
        self.loss = cross_entropy_error(self.y, self.t)
        retrun self.loss
    
    def backward(self, dout=1):
    	batch_size = self.t.shape[0]
        dx = (self.y = self.t) / batch_size
        
        
        return dx