머신러닝, 딥러닝 ML, DL/이론

[Deep Learning] 7.시그모이드 함수 역전파 (미분, 구현)

킹남지 2021. 8. 11. 19:01
반응형

시그모이드(Sigmoid) 함수의 수식은 아래와 같습니다.

 

$y = \frac {1}{1+e^{-x}}$

 

시그모이드 계층의 순전파는 위의 식을 그대로 구현하면 되고, 역전파를 위해 시그모이드 함수의 미분을 정리해보겠습니다.

 

$\frac{\partial{y}}{\partial{x}} = \frac{\partial(1+e^{-x})^{-1}}{\partial{x}} \\ ~~~~~ = (-1) \frac{1}{(1+e^{-x})^2}(1+e^{-x})' \\ ~~~~~ = \frac{e^{-x}}{(1+e^{-x})^2} = \frac{1 + e^{-x} - 1}{(1+e^{-x})^2} \\ ~~~~~ = \frac{1+e^{-x}}{(1+e^{-x})^2} + \frac{-1}{(1+e^{-x})^2} \\ ~~~~~ = \frac{1}{1+e^{-x}} - \frac{1}{(1+e^{-x})^2} \\ ~~~~~ = \frac{1}{1+e^{-x}}(1-\frac{1}{1+e^{-x}}) \\ ~~~~~ = y(1-y)$ 

 

 

따라서 우리는 시그모이드 계층의 역전파를 아래와 같이 나타낼 수 있습니다.

 

Sigmoid 역전파

 

Sigmoid 계층을 클래스로 구현해보겠습니다.

 

class Sigmoid(object):
    def __init__(self):
        self.out = None # 인스턴스 변수 Out (위 식에서 y에 해당)

    def forward(self, x):
        out = 1 / (1 + np.exp(-x)) # 그냥 순전파
        self.out = out # 역전파때 사용할 y

        return out

    def backward(self, dout):
        dx = dout * (1.0 - self.out) * self.out # y를 그대로 다시 사용

        return dx

순전파의 출력을 역전파 때 다시 사용해야하므로 인스턴스 변수에 저장해놓고 사용합니다.

 

읽어주셔서 감사합니다 ^^

반응형