Story of CowHacker

딥러닝 4.2 오차역전파법 본문

공부/딥러닝

딥러닝 4.2 오차역전파법

Cow_Hacker 2020. 8. 17. 15:41
728x90

이번 글에서는 활성화 함수 계층에서 ReLU와 Sigmoid 계층을 구현해볼 것이다.

 

1. ReLU 계층

 

 

그림1

그림 1은 ReLU계층을 수식으로 나타낸 것이다.

 

그림2

그림 2는 x에 대한 y의 미분을 한 것이다.

 

순 전파 때의 입력인 x가 0보다 크면 역전파는 상류의 값을 그대로 하류로 흘린다.

반면, 순전파 때 x 가 0 이하면 역전파 때는 하류로 신호를 보내지 않는 걸 볼 수 있다.

 

 

위 그림 1 ,2를 계산 그래프로도 나타 내보겠다.

 

 

그림3

이것을 이제 파이썬으로 구현해보겠다.

 

파이썬 코드는 

 

출처 : https://github.com/WegraLee/deep-learning-from-scratch

 

WegraLee/deep-learning-from-scratch

『밑바닥부터 시작하는 딥러닝』(한빛미디어, 2017). Contribute to WegraLee/deep-learning-from-scratch development by creating an account on GitHub.

github.com

출처에서 다운로드한 파일의

common /layers.py에 있다.

 

ReLU코드

 

 

import numpy as np

from common.functions import *

from common.util import im2col, col2im



class Relu:

    def __init__(self):

        self.mask = None

 

    def forward(self, x):

        self.mask = (x <= 0)

        out = x.copy()

        out[self.mask] = 0

 

        return out

 

    def backward(self, dout):

        dout[self.mask] = 0

        dx = dout

 

        return dx

Relu 클래스는 mask라는 인스턴스 변수를 가진다.

mask는 True / False로 구성된 넘 파이 배열로, 순 전파의 입력인 x의 원소 0 이하인 인덱스는 True, 그 외는 False로 유지한다.

 

 

 

다음은 Simoid 계층을 알아보겠다.

 

 

 

그림4

Sigmoid 함수를 수식으로 나타내면 그림 4와 같다.

 

 

 

 

Sigmoid 계층을 계산 그래프로 나타내 보겠다.

 

 

그림5

 

 

 

다음은 Sigmoid 계층을 파이썬으로 구현해보겠다.

 

Sigmoid계층 코드

 

class Sigmoid:

    def __init__(self):

        self.out = None

 

    def forward(self, x):

        out = sigmoid(x)

        self.out = out

        return out

 

    def backward(self, dout):

        dx = dout * (1.0 - self.out) * self.out

 

        return dx

 

 

이까지 ReLU와 Sigmoid 계층에 대해 알아보았다.

 

728x90

'공부 > 딥러닝' 카테고리의 다른 글

딥러닝 4.4 오차역전파법  (0) 2020.08.19
딥러닝 4.3 오차역전파법  (0) 2020.08.18
딥러닝 4.1 오차역전파법  (0) 2020.08.17
딥러닝 4.0 오차역전파법  (0) 2020.08.16
딥러닝 3.5 신경망 학습  (0) 2020.08.14
Comments