티스토리 뷰
책 : 밑바닥부터 시작하는 딥러닝 1 chapter 5
오차역전파법에 사용하기 위한 활성화 함수를 구현하자. (ReLU, sigmoid)
1. ReLU 계층
활성화함수로 사용되는 ReLU 함수와 이에 대한 dy/dx는 다음과 같다.
순전파와 역전파의 그림은 다음과 같이 나타낼 수 있다.
코드는 다음과 같다. (설명 : 주석 참고)
class Relu:
def __init__(self):
self.mask = None
def forward(self, x): # 순전파, x : 입력값 (array)
self.mask = (x <= 0) # bool 값으로 x 원소 중 0 이하인 것만 True로 갖는다.
out = x.copy() # x 복사
out[self.mask] = 0 # x 원소 중 0 이하 것은 0으로 바꾼다.
return out
def backward(self, dout): # 역전파, dout : dL/dy 에 해당하는 입력값
dout[self.mask] = 0 # 순전파 입력값 x의 원소 중 0이하인 값은 dy/dx=0 => dL/dy * dy/dx =0
dx = dout # 순전파 입력값 x의 원소 중 0보다 큰 값에서는 dy/dx=1 => dL/dy * dy/dx = dL/dy
return dx
2. sigmoid 계층
sigmoid 함수의 식과 순전파, 역전파 그림은 다음과 같습니다.
(계산 과정은 책 참고, 기존 방법과 동일하게 진행하면 됨)
sigmoid의 역전파 결과는 다음과 같이 정리할 수 있습니다.
코드는 다음과 같습니다.
class Sigmoid:
def __init__(self):
self.out = None
def forward(self, x): # 순전파, x:입력값(array)
out = sigmoid(x) # 시그모이드 함수
self.out = out #self.out = y
return out
def backward(self, dout): # 역전파, dout=dL/dy
dx = dout * (1.0 - self.out) * self.out #정리한 식 이용
return dx # 역전파 결과
'딥러닝' 카테고리의 다른 글
오차역전파법 구현 (0) | 2021.01.14 |
---|---|
오차역전파법 - Affine, Softmax 구현 (0) | 2021.01.14 |
오차역전파법 - 계산 그래프 (0) | 2021.01.13 |
신경망 학습 알고리즘 구현 (0) | 2021.01.12 |
신경망 학습 절차 (0) | 2021.01.11 |
댓글