Sigmoid의 문제점
ground-truth와 output의 차이를 loss라고 하는데, 이 loss를 미분한 것을 gradient라고 한다.
gradient = 그래프의 기울기
그래프 가운데는 기울기가 크지만, 양 극단의 경우 기울기가 매우 작다. (분홍색 부분)
backpropagation을 할 때 이러한 sigmoid를 쓰면 매우 작은 gradient가 계층이 쌓일수록 많아지게 되고,
이는 vanishing gradient를 초래한다. 이러한 경우 네트워크 학습이 잘 되지 않게 된다.
대안: Relu
0 이상의 gradient = 1
따라서 아무리 네트워크가 deep해도 gradient 값이 잘 전달된다.
그러나 0보다 작은 gradient는 아예 0의 값을 가지기 때문에 전달이 잘 안 된다는 단점이 있다.
그래도 Relu가 가진 장점(간단하면서 좋은 성능)으로 널리 쓰인다.
sigmoid, relu 등은 keras activations에 있다.
0 미만의 Relu를 극복하기 위해 leaky relu를 사용한다.
이때 leaky relu는 keras의 layer쪽에 있다는 것을 주의한다.
relu는 0보다 작은 음수의 값을 가질 때 어떠한 알파에 (매우 작은 값: 0.01 등) x를 곱하여 값을 추출한다.
0보다 큰 값을 가질 때는 x값 그대로 추출한다.
<코드>
클래스형 네트워크 구현
함수형 네트워크 구현
파라미터 설정
모델 설정 - Adam optimizer 사용
Sigmoid에 비해 Relu가 4% 성능 향상이 된 것을 확인할 수 있다.