어떤 연구에서는 Swish
, 또 다른 연구에서는 SiLU
로 불린다. activation function 연구는 활발하게 이루어지지만 어떤 과제에서 잘 되는 함수가 다른 과제에서는 잘 안 되는 게 많아서 자주 쓰이는 건 한정적이다. Swish
는 어디선가 잘된다고 스쳐서 들어본 김에 그래프를 본 적은 있지만 점화식도 처음 보고 써 본적은 더욱 없다.
Sigmoid
에 입력값을 한 번 더 곱해주는 모양이지만 ReLU
와 비슷하게 생겨서 특성도 ReLU
와 상당히 비슷할 것 같다.
Andrej Karpathy가 짚었듯[2] 처음 보는 layer는 미분을 해봐야 마땅하다.
연구에서는 ReLU
를 사용한 모델에서 activation function만 Swish
로 바꾼 모든 실험에서 Swish
가 ReLU
를 압도한다고 밝혔다. 그 이유에 대해서 정확하지는 않지만 아래 4가지 때문이 아닐까하고 추측하고 있다.
Sigmoid
와 Tanh
는 각각 , 를 범위로하지만 ReLU
의 범위는 이다. 이 점이 gradient vanish를 막아준다. 이 점이 ReLU
의 전성기를 가져왔고 Swich
를 비롯해서 최근에 나오는 activation function이 이 특성을 여전히 이어받고 있다.
이런 특성은 많은 activation function이 가지고 있다. 너무 큰 음수값은 으로 내보내서 일종의 강한 규제를 거는 효과가 있다. 그렇지만 ReLU
에서는 음수값에 대해서는 무조건 을 내보내므로 dying ReLU에 직면한다는 점이 단점으로 작용해서 Leaky ReLU
나 PReLU
가 파생형으로 나왔다. Swish
는 어느 정도 작은 음수값에 대해서 허용하고 있다. 이 점은 non monotonicity와도 이어진다.
Swish
는 앞서 언급한 것처럼 약간의 음수를 허용하고 있고 심지어 양수부분은 직선 그래프가 아니다. ReLU
와 비슷하게 생겼지만 오히려 표현력이 좋다. 미분그래프에서 0 근처를 보면 ReLU
와의 차이점이 확연히 보인다. 전에 Step
에 비해 Sigmoid
가 가진 장점을 논의했듯이 gradient로 작은 음수가 전해지더라도 온전히 이전 layer로 전할 수 있어서 학습이 잘 된다.
6개 layer를 가진 임의의 신경망을 학습해서 출력 layer의 activation map이다. ReLU
에서 별모양이 눈에 띄는데 activation map 상에서 갑작스러운 변화를 의미한다. 이건 작은 변화에도 민감하게 반응하게 만들어서 모델이 학습을 어렵게 하는 원인이라고 다른 연구에서 지목하기도 한다. Swish
처럼 경계가 흐릿하면 ReLU
와는 반대로 작은 변화에는 작게, 큰 변화에는 크게 반응하게 해서 optimizer가 제대로 minima를 찾아가게 한다.
EfficientNet에서 를 1로 하는 swish-1
을 쓴다. 최적의 를 찾아야 하는 과제가 하나 더 주어진 셈이다. 이 점을 참고하면
이 두 가지를 짐작할 수 있다. 만약 도 parameter로 넣으면 학습 중에 Linear
, Swish
, ReLU
사이를 왔다 갔다하면서 layer차원에서 최적의 activation function을 찾아간다는 말이기도 하다. 와!