728x90
반응형

ReLU

  • 활성화 함수로 사용된다.
  • 순전파 때의 입력인 x가 0보다 크면 상류의 값을 그대로 하류로 흘린다.
  • 순전파 때 입력이 x가 0이하면 역전파 때는 하류로 신호를 보내지 않는다.(0을 보낸다)

ReLU수식

[그림1] ReLU 수식

 

x에 대한 y의 미분

[그림2] x에 대한 y의 미분

 

ReLU 계산 그래프

[그림3] ReLU 계산 그래프

 

ReLU 구현

# 5.5 활성화 함수 계층 구현
# ReLU 구현
import numpy as np

class Relu:
    def __init__(self):
        self.mask = None
        
    def forward(self,x):
        self.mask = (x <= 0) # 순전파의 입력인 x의 원소 값이 0이하인 인덱스는 True, 0보다 큰 원소는 False로 유지
        out = x.copy()
        out[self.mask] = 0
        
        return out
    
    def backward(self, dout):
        dout[self.mask] = 0
        dx = dout

        return dx

 

x <= 0 예제

#  x<=0 예제
x = np.array([[1.0, -0.5,0.0], [-2.0, 3.0,0.1]])
print(x)

mask = (x<=0)
print(mask)

[그림4] 

 

  • x의 원소 값이 0보다 작으면 True
  • x의 원소 값이 0보다 크면 False

 

Sigmoid 계층

[그림5] Sigmoid 함수

 

Sigmoid 계층의 계산 그래프(순전파)

[그림6] Sigmoid 계층의 계산 그래프

 

  • exp노드는 y = exp(x) 계산을 수행하고 '/' 노드는 y = 1/x 계산을 수행한다.

 

1단계

  • '/' 노드 y = 1/x를 미분하면 다음 식
  • 역전파 때는 상류에서 흘러온 값에 -y^2(순전파의 출력을 제곱한 후 마이너스를 붙인 값)을 곱해서 하류로 전달한다.

[그림7] /노드 미분
[그림8] 역전파 

 

2단계

  • + 노드는 상류의 값을 여과 없이 하류로 내보내는 게 전부

 

3단계

  • 'exp'노드는 y = exp(x)연산을 수행하며 미분은 다음 식
  • 계산 그래프에서는 상류의 값에 순전파 때의 출력 (exp(-x))를 곱해 하류로 전파한다.

[그림9] 미분 식
[그림10] 역전파

 

4단계

  • 'X' 노드는 순전파 때의 값을 '서로 바꿔' 곱한다. - 곱셈 노드

[그림11] 역전파

 

Sigmoid 계층 계산 그래프(간소화)

[그림12] Sigmoid 계층 계산 그래프 간소화

 

식 정리

[그림13] 식 정리

 

Sigmoid 계층의 계산 그래프

  • 순전파의 출력 y만으로 역전파를 계산할 수 있다.

[그림14] Sigmoid 계층의 계산 그래프

Sigmoid 구현

# Sigmoid 계층 구현

class Sigmoid:
    def __init__(self):
        self.out = None
        
    def forward(self, w):
        out = 1/1(1+np.exp(-x))
        self.out = out
        
        return out
    
    def backward(self,dout):
        dx = out * (1.0 - self.out) *self.out
        
        return dx
    
# 이 구현에서는 순전파의 출력을 인스턴스 변수 out에 보관했다가 역전파 계산 때 그 값을 사용한다.

 

출처 : 밑바닥부터 시작하는 딥러닝

https://www.hanbit.co.kr/store/books/look.php?p_code=B8475831198

 

밑바닥부터 시작하는 딥러닝

직접 구현하고 움직여보며 익히는 가장 쉬운 딥러닝 입문서

www.hanbit.co.kr

 

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기