Contents

Activation_Function

Activation Function(활성화 함수)

입력 신호의 총합을 출력신호로 변환하는 함수를 일반적으로 Activation Function이라고 합니다.

아직 잘 모르겠습니다. 하여 인공신경망에 빗대어 이해해보겠습니다.

인공 신경망은 인간의 중추신경계(뇌)속의 뉴런들이 정보를 전달하고 학습하여 결과를 도출해내는 과정을 모방한 학습알고리즘입니다.

여기서 의문점이 생깁니다.

  • 예를 들어 지나가다 귤을 보았는데 맛이 있을지 없을지 어떻게 알 수 있을까요? 저 귤의 데이터를 수집해 봅시다.

  • 타원형, 이쁜 노란색, 푸르른 꼭지 라는 데이터를 눈으로 보고 뇌속의 뉴런들이 이 정보를 분석해 맛있겠다.라는 출력을 불러왔습니다.

입력된 데이터를 어떤 규칙? 방법에 따라 분석하여 출력 데이터로 변환하였는데요. 이 역할을 해주는 것이 Activation Function입니다.

✋ ‘Node와 Layer’가 어떻게 생겼는지 다시 알아봅시다.

Node뇌속의 뉴런과 같은 역할이고,
Node들이 모여 인공신경망의 층이라 불리는 Layer가 됩니다.

Features of activation function

활성화 함수는 주로 비선형 함수(곡선 그래프로 표현되는 함수)를 사용합니다.

왜 그럴까요?

선형함수(직선 그래프로 표현되는 함수)를 사용하면 Layer(층)을 깊게 쌓아 학습하는 의미가 줄어들기 때문입니다.

예를 들어 어떤 현상(or 데이터)를 분석(or 학습)하는데 선형(linear)함수 H(x) = ax 활성화 함수로 사용하는 3-Layer 네트워크가 있을 때.

  • 해당 네트워크는 결국 Y(x) = H(H(H(x)))와 동일해집니다. 간단히 Y(x) = a^3x 로도 표현할 수 있습니다.

  • 하나의 Layer( Y(x) = a^3x )로도 3-Layer를 대신할 수 있게 됩니다.

    즉, 선형(linear)적인 연산을 갖는 Layer는 몇개를 쌓는다 해도, 결국 하나의 선형적인 연산처리하는 Layer로 대체될 수 있습니다.

  • 또 위의 그림을 보면 파란원(특이점)을 더 많이 만족하는 것은 비선형 함수가 됩니다.

  • 실제 자연환경에서는 선형적이지 않은 복잡한 일(특이점)들이 더 많기 때문에 다양한 조건에 대응하기 위해서 비선형 함수를 사용하는 것입니다.

Type of activation function

대표적인 활성화 함수에 대하여 알아보겠습니다.

활성화 함수는 엄청 많습니다. Threshold, Binary step, Sigmoid, Tanh or Hyperbolic tangent, Softmax, ReLU, Leaky ReLU, Parametric ReLU, ETC…..

활성화 함수는 ‘하이퍼 파라미터‘라고 불립니다. 간단히 사용자가 설정해주는 값인데, 결국 정답은 없으며, 우리의 직관? 판단?으로 설정해야하는 값입니다.

막연하지만, 함수의 특징을 안다면 상황에 맞게 최적의 함수를 선택해 사용할 수 있으니 알아보겠습니다.

🔗 Binary Step function

  • 마치 계단 같이 0을 기준으로 0 or 1로 극명하게 값을 결정됩니다. => Output은 0 또는 1

  • 0.01도 1로 처리되어 100배의 결과값 차이가 발생합니다.

  • 마치 선형(linear)함수와 비슷해 학습할 내용이 많으면 사용하지 않는 것이 좋습니다.


🤔 너무 극단적인 구분값말고 융통성있는 이진 분류가 필요하다면?

🔗 Sigmoid function

  • 선형함수의 결과를 0 ~ 1까지의 비선형 형태로 변환하는 Logit 함수입니다. => Output은 0~1 사이의 실수

  • 로지스틱, 정규분포 등과 같이 이진 분류 문제(1 or 0 /성공 or 실패…)의 확률 표현에 자주 사용됩니다.

  • 0~1 사이의 실수를 output으로 가져 0.5를 기준으로 1에 가까우면 1, 0에 가까우면 0으로 나누는 등 으로 활용합니다.

  • binary classification의 출력층 노드에서 0~1사이의 값을 만들고 싶을때 사용합니다.


  • ✨인공 신경망이 학습하는 과정에서 저번엔 안 중요했는데, 이번에는 중요하네? 와 같이 학습하는 요소의 가중치를 잘 반영해야 하는데 Sigmoid는 원점이 중심이 아닙니다.(Not zero-centered). 평균이 0.5이며 항상 양수를 출력하기 때문에 출력의 가중치합이 입력의 가중치합보다 커질 가능성이 높아집니다. 이것을 편향 이동(bias shift)이라고 하는데, 이러한 이유로 각 Layer를 지날 때마다 분산이 계속 커져 가장 높은 Layer에서는 활성화 함수의 출력이 그래프의 극값인 0 or 1로 수렴하게 되고 결국 기울기가 0이 되어 버리는 Gradient Vanishing이 일어나게 됩니다.

  • 또 애초에 매우 높거나, 낮은 입력에 대한 예측을 거의 변경하지 않아(크면 무조건1, 작으면 무조건 0) 궁극적으로 신경망이 학습을 거부하게 됩니다.


🤔 Sigmoid보다 가중치를 조금 더 잘 반영하는 이진 분류가 필요하다면?

🔗 Tanh(Hyperbolic tangent) function

  • Hyperbolic Tangent(tanh) 함수는 Sigmoid의 대체제로 사용되는 함수입니다. 매우 유사하게 생겼습니다.

  • 실제로, Hyperbolic Tangent 함수는 확장 된 Sigmoid 함수입니다.

  • 차이점은 출력범위가 0 ≤ Sigmoid ≤ 1이고 -1 ≤ tanh ≤ 1 이라는 점입니다.

  • 원점 중심(zero-centered)이기 때문에, 시그모이드와 달리 편향 이동이 일어나지 않습니다. 하지만, tanh함수 또한 입력의 절대값이 클 경우 -1이나 1로 수렴하게 되므로 Gradient Vanishing가 발생하지만, Sigmoid보다 발생 경향이 적어 효과적으로 사용이 가능합니다.


  • 보통 Sigmoid와 비교하는데 주로 미분한 결과를 보며 설명합니다. 왜 미분한 결과 일까요?
    표현할 수 있는 기울기가 결국 출력될 수 있는 값이기 때문입니다.

tanh그래프의 미분계수의 최댓값은 1입니다.
sigmoid와 비교하여 최대값이 약 4배가 크고이는 약 4배 더 다양한 분석이 가능하다고 해석할 수 있습니다.


🤔 만약 이진분류가 아닌 다중 분류가 필요하다면?

🔗 Softmax function

  • 세 개 이상으로 분류하는 다중 클래스 분류에서 사용되는 활성화 함수입니다.

  • 입력받은 값을 출력으로 0~1사이의 값으로 모두 정규화하며 출력 값들의 총합은 항상 1이 되는 특성을 가진 함수입니다.

    예를 들어 어떤 이미지가 주어지고 이것이 사과인지, 배인지, 귤인지 판단해야 할 때, Softmax함수는 사과일 확률, 배일 확률, 귤일 확률[0.5, 0.3, 0.2]을 출력해줍니다. 즉, Output은 class 별 확률이고 class별 출력값의 총합은 1이 됩니다.

  • class별로 확률을 알려주다보니, 출력 노드에서 확률을 확인하고 이를 최종결과로 반영하는 상황에서 많이 사용됩니다.


  • 근데, 위의 Softmax공식을 보니 자연 상수e를 사용하고 있습니다. 왜 ‘자연 상수e’일까요? 그 이유는 크게 2가지가 있습니다.

    1. 미분이 쉽습니다. ( == 값을 계산하기 용이하다.)

    2. 큰 값은 더 크게, 작은 값은 더 작게 가중치를 주어 확률을 계산합니다.

      예로 0.1, 1.0, 2.0의 입력값을 Softmax로 출력해보면 0.03, 0.33, 0.63가 아닌 0.1, 0.2, 0.7이 나옵니다.
      Softmax는 1과 2가 아닌 e^1 (2.718), e^2 (7.389)로 확률을 계산합니다. 즉 입력값이 커짐에 따라 기울기가 증가하며 더 큰 차이를 만들며, Soft하게 “Max"한 값을 선정하는데 용이합니다.


🤔 Gradient Vanishing 문제가 없는 활성화 함수가 필요하다면?

🔗 ReLU(Rectified Linear Unit) function

  • 가장 많이 사용되는 활성화 함수 중 하나입니다.

  • 음수를 입력하면 0을 출력하고, 양수를 입력하면 입력값을 그대로 반환 => Output은 0 이상의 실수

  • tanh함수 대비 약 6배 빠른 속도로 학습이 가능하고, Gradient Vanishing가 발생하지 않습니다.

  • 주로 hidden Layer에 사용됩니다.


  • ReLu의 문제점은 음수 값은 무조건 0으로 처리하기 때문에 학습 능력이 감소한다.는 것에 있습니다.
    이를 죽은 렐루(Dying ReLU)라고 합니다.

  • 그리고 이 문제를 완화하기 위해 Leaky ReLu함수가 등장하였습니다.


🤔 ReLU의 음수값을 살린를 학습법이 필요하다면?

🔗 Leaky ReLU function

  • 위 그래프에서 공식 αx (x ≤ 0)에서 α는 사용자가 지정하는데 ‘매우 작은 수‘로 지정하며 보통 0.01로 설정합니다.
  • ReLU에서 음수값을 물이 누수(Leaky)되듯이 매우 작게나마 표시해주는 함수입니다.

이밖에도 많은 활성화 함수가 있으니 더 찾아보는 것을 추천합니다.

👀참고

  • Sigmoid 함수의 개념은 오즈(odds)에서 부터 출발합니다.

  • 일반적으로는 ELU -> LeakyReLU -> ReLU -> tanh -> sigmoid 순으로 사용한다고 합니다. cs231n 강의에서는 ReLU를 먼저 쓰고, 그 다음으로 LeakyReLU나 ELU 같은 ReLU Family를 사용하며, sigmoid는 사용하지 말라고 하고 있습니다.

  • chain rule은 두 함수를 합성한 합성 함수의 도함수(derivative)에 관한 공식입니다.
    chain rule = 연쇄법칙 = 합성함수의 미분법.

    합성 함수

    두 개 이상의 함수를 하나의 함수로 결합하여 만들어진 함수. 어떤 함수 속에 또 다른 함수가 들어있고, 그 또 다른 함수 속에 다른 함수가 들어있다.

참고한 글