Non zero-centered activation function과 학습 비효율
CS231n 강의에서 나온 Sigmoid의 non zero-centered한 성질로 인한 학습 비효율에 대해 정확하게 이해하기 위해 정리한다.
Sigmoid function의 특징으로는 non zero-centered 라는 점이고, 출력이 항상 양수로 나온다는 점이다.
Sigmoid function을 activation function으로 사용했을 때, 학습에 어떤 영향을 끼칠까?
다음과 같은 단순한 형태의 네트워크가 있다고 하자.
그리고 위 그림 1에서 색칠한 영역을 자세히 살펴보면 아래와 같다.
입력 $x_{1}과 x_{2}$는 앞 layer의 Sigmoid 출력이기 때문에 항상 양의 값을 갖게된다.
그리고 경사 하강을 이용한 weight의 update 수식은 아래와 같다.
$$ W \leftarrow W - \alpha \frac{\partial L}{\partial W} $$
여기서 loss에 대한 W의 미분값은 미분 연쇄 법칙에 따라 다음과 같게 된다.
$$ \frac{\partial L}{\partial W} = \frac{\partial L}{\partial z} \frac{\partial z}{\partial a} \frac{\partial a}{\partial W} $$
이 수식을 뜯어보면 다음과 같이 특정 값이 갖는 부호를 알 수 있다.
- $\frac{\partial z}{\partial a}$: $\sigma'(x) = \sigma(x)(1 - \sigma(x))$ 이고 $0 \lt \sigma(x) \lt 1$이므로 양수이다
- $\frac{\partial a}{\partial W}$: $\frac{\partial a}{\partial W} = X$이고 이는 앞 layer의 sigmoid의 출력이므로 양수이다.
그렇기 때문에 결과적으로 $\frac{\partial L}{\partial W}$는 $\frac{\partial L}{\partial z}$의 부호를 따라가게되며,
$\frac{\partial L}{\partial z}$ 값은 $w_1$, $w_2$에 대해서 모두 동일하기 때문에
weight 업데이트는 모두 같은 방향으로 업데이트가 일어나게 된다. (모두 +로 업데이트 or 모두 -로 업데이트)
그렇기 때문에 loss가 최소가 되는 최적의 weight로 업데이트 시,
아래 그림 3과 같이 부호가 같게되기 때문에 아래와 같이 zigzag 형태로 업데이트가 이뤄지게되어 비효율적으로 학습이 이뤄지게 된다.
이는 단지 Sigmoid 만의 특성이 아니라 ReLU 역시도 갖는 문제이다.
하지만 ReLU의 경우 이러한 문제에도 불구하고 학습이 잘 빠르게 진행되기 때문에 주로 사용된다.