Activation Function

Jyoung·2024년 8월 22일
0
post-thumbnail

Activation Function?

🔥활성화 함수(Activation Function)는 심층 신경망(Deep Neural Network, DNN)에서 은닉층의 레이어를 활성화해주기 위해 사용되는 함수이다.

위와 같은 MLP(Multi Layer Perceptron)가 있다고 할 때, Hidden Layer 1에서 Hidden Layer 2로 전달되기 전에 각 노드에서 활성화 함수를 거쳐 계산한 후 다음 레이어로 전달한다.
퍼셉트론에서 활성화 함수를 계산하는 과정은 다음과 같다.

이러한 활성화 함수에는 ReLU, Sigmoid, tanh 등 다양하게 존재하고, 이들의 공통점은 선형적이지 않은 비선형적 함수라는 것이다.

Why Non-Linear?

🧐 왜 활성화 함수가 선형 함수이면 안되는 걸까?


위와 같은 인공신경망이 있다고 하자.
그렇다면 input 값은 x=[x1x2]\overrightarrow{x} = \begin{bmatrix}x_1\\x_2\\ \end{bmatrix}, 첫 번째 가중치 행렬은 W1=[w1w2w3w4w5w6]W_1 = \begin{bmatrix}w_1&w_2\\w_3&w_4\\w_5&w_6 \end{bmatrix}, 첫 번째 편향은 b1=[b1b2b3]\overrightarrow{b_1} = \begin{bmatrix}b_1\\b_2\\b_3 \end{bmatrix} 와 같이 나타낼 수 있다.

이를 바탕으로 첫 번째 Hidden layer의 값은 아래와 같다.

W1x+b1=[w1w2w3w4w5w6][x1x2]+[b1b2b3]=[x1w1+x2w2+b1x1w3+x2w4+b2x1w5+x2w6+b3]W_1\overrightarrow{x}+\overrightarrow{b_1} = \begin{bmatrix}w_1&w_2\\w_3&w_4\\w_5&w_6 \end{bmatrix}\begin{bmatrix}x_1\\x_2\\ \end{bmatrix}+\begin{bmatrix}b_1\\b_2\\b_3\end{bmatrix}=\begin{bmatrix}x _{1} w _{1} +x _{2} w _{2} +b _{1} \\x _{1} w _{3} +x _{2} w _{4} +b _{2} \\x _{1} w _{5} +x _{2} w _{6} +b _{3}\end{bmatrix}

첫 번째 Hidden Layer에서 다음 Layer로 넘어가기 전 활성화 함수 f1f_1을 거치게 되며, 따라서 다음 Layer에 전달되는 값은 아래와 같다.

f1([x1w1+x2w2+b1x1w3+x2w4+b2x1w5+x2w6+b3])f_1(\begin{bmatrix}x _{1} w _{1} +x _{2} w _{2} +b _{1} \\x _{1} w _{3} +x _{2} w _{4} +b _{2} \\x _{1} w _{5} +x _{2} w _{6} +b _{3}\end{bmatrix})

지금의 방식과 똑같이 적용하면 두 번째 Layer에서 다음 Layer로 전달되는 값은
f2(W2f1([x1w1+x2w2+b1x1w3+x2w4+b2x1w5+x2w6+b3])+b2)f_2(W_2f_1(\begin{bmatrix}x _{1} w _{1} +x _{2} w _{2} +b _{1} \\x _{1} w _{3} +x _{2} w _{4} +b _{2} \\x _{1} w _{5} +x _{2} w _{6} +b _{3}\end{bmatrix})+\overrightarrow{b_2}) 일 것이다.

그런데 이때 만약 활성화 함수 f1f_1f2f_2y=xy=x 꼴의 선형 함수라고 해보자.

그러면 위의 식은

W2[x1w1+x2w2+b1x1w3+x2w4+b2x1w5+x2w6+b3]+b2=W2(W1x+b1)+b2=W2W1x+W2b1+b2W_2\begin{bmatrix}x _{1} w _{1} +x _{2} w _{2} +b _{1} \\x _{1} w _{3} +x _{2} w _{4} +b _{2} \\x _{1} w _{5} +x _{2} w _{6} +b _{3}\end{bmatrix}+\overrightarrow{b_2} = W_2(W_1\overrightarrow{x}+\overrightarrow{b_1})+\overrightarrow{b_2}=W_2W_1\overrightarrow{x} + W_2\overrightarrow{b_1}+\overrightarrow{b_2} 이고

W2W1W_2W_1을 2x2 크기의 행렬 WW로, W2b1+b2W_2\overrightarrow{b_1}+\overrightarrow{b_2}를 2x1 크기의 벡터 b\overrightarrow{b}로 치환하여 표현하면

Wx+bW\overrightarrow{x}+\overrightarrow{b}이다.

해당 식은 마치 WW라는 가중치 행렬과 b\overrightarrow{b}라는 편향을 바탕으로 계산된 식과 같다. 우리는 여러 Layer를 쌓기를 원했으나 실질적으로는 하나의 Layer를 거친 것과 다르지 않다는 것이고, 이는 우리가 MLP에서 Multi-Layer를 설계한 근본적인 이유가 반영되지 않았다는 것이다. 꼭 y=xy=x가 아니더라도 y=ax+by=ax+b의 일반적인 선형 함수가 활성화 함수로 사용되어도 결과는 같다.

따라서 MLP에서 Multi_Layer를 살리기 위해서는 활성화 함수가 비선형적 함수이어야 한다.

Sigmoid


시그모이드 함수의 식은 로지스틱 회귀에 사용되는 식과 같다.

🙆‍♂️ 장점

  • Step Function에 비해 정보 손실이 적다
  • 어떤 입력 값에도 항상 0과 1사이의 연속적인 값을 반환하여 확률로 해석이 가능하다
  • 전 구간에서 미분이 가능하므로 역전파 계산이 가능하다
  • 바이너리 분류 문제에 사용 가능하다

🙅‍♂️ 단점

  • 기울기 소실 문제가 발생할 수 있다
  • 함숫값의 중심이 0이 아니기에 학습이 잘 안될 수도 있다 (zigzag 문제)
  • exp 연산으로 인해 학습 속도가 느려질 수 있다

ReLU(Rectified Linear Unit)

현재 딥러닝에서 가장 널리 사용되는 활성화 함수 중 하나이다.

🙆‍♂️ 장점

  • 기울기 소실 문제가 완화된다
  • 학습 속도가 매우 빠르다
  • 양수에서 포화(saturation)가 발생하지 않는다

🙅‍♂️ 단점

  • 함숫값의 중심이 0이 아니기에 학습이 잘 안될 수도 있다 (zigzag 문제)
  • 일부 뉴런에서 0만 출력하는 문제가 발생하기도 한다
  • xx가 0일 때 미분이 되지 않는다
profile
세상은 공평하지 않다. 그러나 이것이 우리가 더욱 노력할 기회를 준다.

0개의 댓글