728x90
반응형
ReLU
- 활성화 함수로 사용된다.
- 순전파 때의 입력인 x가 0보다 크면 상류의 값을 그대로 하류로 흘린다.
- 순전파 때 입력이 x가 0이하면 역전파 때는 하류로 신호를 보내지 않는다.(0을 보낸다)
ReLU수식
x에 대한 y의 미분
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)
- x의 원소 값이 0보다 작으면 True
- x의 원소 값이 0보다 크면 False
Sigmoid 계층
Sigmoid 계층의 계산 그래프(순전파)
- exp노드는 y = exp(x) 계산을 수행하고 '/' 노드는 y = 1/x 계산을 수행한다.
1단계
- '/' 노드 y = 1/x를 미분하면 다음 식
- 역전파 때는 상류에서 흘러온 값에 -y^2(순전파의 출력을 제곱한 후 마이너스를 붙인 값)을 곱해서 하류로 전달한다.
2단계
- + 노드는 상류의 값을 여과 없이 하류로 내보내는 게 전부
3단계
- 'exp'노드는 y = exp(x)연산을 수행하며 미분은 다음 식
- 계산 그래프에서는 상류의 값에 순전파 때의 출력 (exp(-x))를 곱해 하류로 전파한다.
4단계
- 'X' 노드는 순전파 때의 값을 '서로 바꿔' 곱한다. - 곱셈 노드
Sigmoid 계층 계산 그래프(간소화)
식 정리
Sigmoid 계층의 계산 그래프
- 순전파의 출력 y만으로 역전파를 계산할 수 있다.
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
728x90
반응형
최근댓글