Knowledge/Vision

Swish activation function

침닦는수건 2023. 3. 10. 18:50
반응형

Activation function은 sigmoide부터 ReLU, Leaky ReLU, ELU, SELU 등 많이 있지만 구글에서 새로 디자인한 activation function이 눈에 띄었다. 구글 찬양론자 같지만 출처가 구글이다보니 그래도 조금은 신뢰가 갔기 때문에 사용해보기로 했다. 

 

Swish activation function 

일단 Swish가 타겟으로 하고 있는 activation function은 ReLU다. 가장 널리 쓰이고 있는 activation function인만큼 ReLU와의 비교를 확실히 해서 그 강점을 강조하려고 한 것 같다. 

 

ReLU는 익히 알다시피 음수 영역에서 0 처리를 해버림으로써 음수에서는 gradient가 발생하지 않는다. 그러므로 한 번 음수가 발생하면 연관된 뉴런들은 사실상 죽는 것과 다름이 없다. 실제로 ReLU를 사용해서 깊은 네트워크를 학습시킬 경우, 40% 정도의 노드가 쓸모 없게 된다는 이야기도 있다. 이를 개선하기 위해 Leaky ReLU와 SELU가 개발 및 사용되었지만 그 효과가 성공적이진 않았던게 현실이다. 

 

그래서 디자인한 것이 위와 같은 모양의 Swish다. 수식으로는 아주 단순하게 f(x) = x sigmoid(x)다. 기존의 sigmoid만으로 구현할 수 있는 형태이므로 복잡하지 않다. (경량화할 때 지원되지 않는 activation function도 많은데 sigmoid로 구현이 가능하다는 건 장점이 분명한 것 같다.)

 

Swish는 꺾인 부분 없이 smooth 형태이면서 non-monotonic (gradient가 다양)하다. 최댓값이 ReLU와 같이 제한되어 있지 않아서 활성도를 표현하는데 제약이 없고 최소값은 제한이 있지만 활성도를 완전히 죽이지 않도록 약간의 값과 gradient가 살아있다. 

 

실험적으로 네트워크를 깊게 쌓았을 때 ReLU를 사용했을 때보다 성능 향상이 관찰되었다고 한다. 40~50 layer 수준으로 쌓았을 때 "large margin"이라고 하니 효과가 있어 보이기도... 또, batch size가 늘었을 때도 성능에 아무런 차이가 없었다고 한다. 

 

결론적으로 ReLU 대신 믿고 대체해볼만 하지 않을까! 구글꺼니까...?

반응형

'Knowledge > Vision' 카테고리의 다른 글

Image flickering  (0) 2023.08.17
Trifocal tensor 이해하기  (0) 2023.03.30
Positional encoding  (0) 2023.03.10
Spectral bias of Neural network  (0) 2023.03.10
contiguous의 의미 (view, reshape, transpose, permute 이해하기)  (0) 2023.02.21