Swish function

iissaacc·2021년 11월 2일
6

deep learning

목록 보기
10/12

Prologue

어떤 연구에서는 Swish, 또 다른 연구에서는 SiLU로 불린다. activation function 연구는 활발하게 이루어지지만 어떤 과제에서 잘 되는 함수가 다른 과제에서는 잘 안 되는 게 많아서 자주 쓰이는 건 한정적이다. Swish는 어디선가 잘된다고 스쳐서 들어본 김에 그래프를 본 적은 있지만 점화식도 처음 보고 써 본적은 더욱 없다.

Formula

f(x)=xσ(x),where σ(x)=11+exf(x)=x\cdot\sigma(x),\quad\text{where }\sigma(x)=\frac{1}{1+e^{-x}}

Sigmoid에 입력값을 한 번 더 곱해주는 모양이지만 ReLU와 비슷하게 생겨서 특성도 ReLU와 상당히 비슷할 것 같다.

Derivative

Andrej Karpathy가 짚었듯[2] 처음 보는 layer는 미분을 해봐야 마땅하다.

f(x)=1σ(x)+xσ(x)(1σ(x))  =σ(x)+xσ(x)xσ(x)2  =σ(x)+f(x)f(x)σ(x)  =σ(x)+f(x)(1σ(x))\begin{array}{lc} f'(x)=1\cdot\sigma(x) + x\cdot\sigma(x)(1-\sigma(x))\\ \quad\quad\ \ =\sigma(x)+x\cdot\sigma(x)-x\cdot\sigma(x)^2\\ \quad\quad\ \ =\sigma(x)+f(x)-f(x)\cdot\sigma(x)\\ \quad\quad\ \ =\sigma(x)+f(x)(1-\sigma(x)) \end{array}

Properties

연구에서는 ReLU를 사용한 모델에서 activation function만 Swish로 바꾼 모든 실험에서 SwishReLU를 압도한다고 밝혔다. 그 이유에 대해서 정확하지는 않지만 아래 4가지 때문이 아닐까하고 추측하고 있다.

  1. Unbounded above where x0x\ge0
  2. Bounded below where x<0x\lt0
  3. Non monotonicity
  4. Smooth figure

Unbounded above

SigmoidTanh는 각각 (0, 1)(0,\ 1), (1, 1)(-1,\ 1)를 범위로하지만 ReLU의 범위는 [0, )[0,\ \infty)이다. 이 점이 gradient vanish를 막아준다. 이 점이 ReLU의 전성기를 가져왔고 Swich를 비롯해서 최근에 나오는 activation function이 이 특성을 여전히 이어받고 있다.

Bounded below

limxactivation(x)=0\lim_{x\to-\infty}activation(x)=0

이런 특성은 많은 activation function이 가지고 있다. 너무 큰 음수값은 00으로 내보내서 일종의 강한 규제를 거는 효과가 있다. 그렇지만 ReLU에서는 음수값에 대해서는 무조건 00을 내보내므로 dying ReLU에 직면한다는 점이 단점으로 작용해서 Leaky ReLUPReLU가 파생형으로 나왔다. Swish는 어느 정도 작은 음수값에 대해서 허용하고 있다. 이 점은 non monotonicity와도 이어진다.

Non monotonicity

Swish는 앞서 언급한 것처럼 약간의 음수를 허용하고 있고 심지어 양수부분은 직선 그래프가 아니다. ReLU와 비슷하게 생겼지만 오히려 표현력이 좋다. 미분그래프에서 0 근처를 보면 ReLU와의 차이점이 확연히 보인다. 전에 Step에 비해 Sigmoid가 가진 장점을 논의했듯이 gradient로 작은 음수가 전해지더라도 온전히 이전 layer로 전할 수 있어서 학습이 잘 된다.

Smooth figure

6개 layer를 가진 임의의 신경망을 학습해서 출력 layer의 activation map이다. ReLU에서 별모양이 눈에 띄는데 activation map 상에서 갑작스러운 변화를 의미한다. 이건 작은 변화에도 민감하게 반응하게 만들어서 모델이 학습을 어렵게 하는 원인이라고 다른 연구에서 지목하기도 한다. Swish처럼 경계가 흐릿하면 ReLU와는 반대로 작은 변화에는 작게, 큰 변화에는 크게 반응하게 해서 optimizer가 제대로 minima를 찾아가게 한다.

Epilogue

Variants: Swish-β\beta

f(x;β)=2xσ(βx)f(x;\beta)=2x\cdot\sigma(\beta x)

EfficientNet에서 β\beta를 1로 하는 swish-1을 쓴다. 최적의 β\beta를 찾아야 하는 과제가 하나 더 주어진 셈이다. σ(0)=0.5, σ()=1\sigma(0)=0.5,\ \sigma(\infty)=1 이 점을 참고하면

  1. f(x;0)=xf(x;0)=x,
  2. f(x;)=2ReLUf(x;\infty)=2\text{ReLU}

이 두 가지를 짐작할 수 있다. 만약 β\beta도 parameter로 넣으면 학습 중에 Linear, Swish, ReLU사이를 왔다 갔다하면서 layer차원에서 최적의 activation function을 찾아간다는 말이기도 하다. 와!

Reference

  1. SWISH: A SELF-GATED ACTIVATION FUNCTION
  2. Yes you should understand backprop

0개의 댓글