공부/AIFFEL

FUNDAMENTAL 29. 활성화 함수의 이해

dong_dong_2 2021. 3. 15. 20:17

1. 활성화 함수
    - 오늘은 Softmax나 ReLU 등 익숙히 들어본 활성화 함수(activation function)을 배웠다.
    - 활성화(activated) or 비활성화(deactivated)라는 것은 어떤 조건을 만족 or 불만족 했다는 것과 긴밀한 연관이 있다.
    - 지금까지 써왔던 신경망 속의 퍼셉트론(perceptron) 혹은 노드(node)도 특정 조건이 만족하면 활성화 되도록 디자인되어 있다.
    - 느드에 입력으로 들어오는 값이 어떤 임계치를 넘어가면 활성화(activated)되고, 넘어가지 않으면 비활성화(deactivated)되게 코딩되어 있다.
    - 예를 들어 ReLU는 입력값이 음수, 즉 0 미만이라는 조건을 만족한다면 0을 출력하고, 입력값이 0 이상이면 입력값 그대로를 출력하도록 디자인되어 있다.
    - 딥러닝에서 활성화 함수를 쓰는 결정적인 이유는 딥러닝 모델의 표현력을 향상 시켜주기 위해서이다.
    - 이를 전문용어로 모델의 representation capacity 또는 expressivity를 향상 시킨다라고도 말한다.
    - 활성화 함수는 모델의 표현력을 왜 향상 시켜줄까?
       1) 어떤 모델이 f(x) = xw + b라고 할 때, 이 모델은 x^2, x^5 등으로 표현되는 데이터를 학습할 수 없다. 이를 수학적으로 말하면, 선형함수로는 비선형 함수를 표현할 수 없다고 말한다.
       2) 딥러닝 모델의 parameter들은 입력값 x와 선형관계이다. 선형 함수는 아무리 쌓아도 선형함수이다. 이에 딥러닝 모델도 비선형성을 지녀야 하는데, 이 때 쓰이는 것이 활성화 함수이다.
    - 활성화 함수에는 하이퍼볼릭 탄젠트(tanh), 시그모이드(sigmoid), Softmax, ReLU 등 많은 함수가 있다.
2. 퍼셉트론
    - 퍼셉트론
       1) 활성화 함수가 어디서 나온 건지 알아보기 위해 먼저 퍼셉트론에 대해 공부한다.
       2) 흔히 아는 딥러닝 모델은 보통 여러 개의 층으로 이루어져 있다. 그중 하나의 층을 가져와 다시 쪼갠다면 보통 노드라고 불리는 것으로 쪼개지는데, 이것이 퍼셉트론(Perceptron)이다.
       3) 반대로 퍼셉트론을 쌓으면 단층 퍼셉트론이 되고, 이 단층 퍼셉트론을 쌓으면 다층 퍼셉트론이 된다. 즉, 딥러닝 모델은 퍼셉트론들이 다양한 구조로 쌓인 것이다.
       4) 우리의 목표는 기계가 잘 학습하는 것이다. 어떻게 학습을 시킬지 과학자들이 생각하다가 이미 잘 짜여진 머신이라고 볼 수 있는 동물의 학습 방법을 모방하는 생각을 한다.
       5) 이를 위해서 학습시킬 머신 자체를 동물의 신경세포와 유사하게 설계하여 나온 것이 최초의 퍼셉트론이다.
    - 신경세포의 구조
       1) 퍼셉트론의 구조를 보기 전에 간단히 신경세포에 대해 살펴봤다.
       2) 신경세포는 크게 아래처럼 구성되어 있다. 더 나눌수도 있겠지만 퍼셉트론을 이해할 수 있을 정도만 나눴다.
          (1) 세포체(Soma) : 각 가지돌기로부터 들어온 신호들로부터 자신의 출력 신호를 만들고 이를 다음 세포에 전송한다. 이 때 출력신호는 입력신호들의 합이 아닌 비선형 방식으로 결정된다.
          (2) 가지돌기(Dendrite) : 세포로 전달되는 신호를 받아들이는 부분이다.
          (3) 축삭돌기(Axon) : 세포에서 다른 세포로 신호를 전달하는 부분이다.
          (4) 시냅스(Synapse) : 가지돌기와 축삭돌기 사이에 있는 부분으로 신호 전달의 세기를 담당한다. 발달 정도에 따라 같은 신호도 강하게 전달되거나 약하게 전달된다.
    - 퍼셉트론의 구조
       1) 퍼셉트론에 주어지는 입력은 신경세포에서 가지돌기로 받아들이는 신호에 해당한다.
       2) 각 입력 항에 곱해지는 가중치는 신경 세포들의 연결 부위에 형성된 시냅스의 발달 정도에 해당한다.
       3) 각 xw값들은 각 가지돌기에서 시냅스를 거쳐서 오는 신호들에 해당되며 세포체에서 이 신호들은 합쳐진다.
       4) 실제 신경세포에는 없지만 퍼셉트론에선 추가로 편향이라 불리는 b라는 신호 또한 합산에 포함된다.
       5) 그리고 이 합쳐진 신호는 세포체에서 신호를 처리하는 방식과 비슷하게 적절한 활성화 함수(activation function) f를 거쳐 출력이 결정된다.
       6) 당연히 이런 간단한 퍼셉트론 모델이 신경 세포와 동일하게 작동된다고 말할 수 없다.
    - 활성화 함수
       1) 활성화 함수는 신경 세포로 치면 세포체에서 일어나는 일을 담당한다. 그래서 하는 일도 비슷하다.
       2) 들어온 신호가 특정 임계점을 넘으면 출력을 하고, 넘지 못하면 무시한다.
       3) 활성화 함수는 신호를 전달해주기 때문에 Transfer function으로도 알려져 있다. 활성화 함수는 표현에 따라 아래처럼 나눌 수 있다.
          (1) 선형 활성화 함수(Linear activation function)
          (2) 비선형 활성화 함수(Non-linear activation function)
       4) 딥러닝에서는 일반적으로 비선형 활성화 함수를 사용한다. 왜 그런지는 아래에서 배웠다. 먼저 선형을 알아본다.
3. 선형과 비선형
    - 선형(Linear)을 먼저 알아본다. 여기서는 복잡한 수식을 사용하여 선형인것을 증명한 것 같은데 수식은 이해를 못하고 글로 쓰여진 것만 정리하겠다.
    - 선형 변환 : 선형이라는 규칙을 지키며 V 공간상의 벡터를 W 공간상의 벡터로 바꿔주는 역할을 한다.
    - 선형 변환 정의
       1) V와 W가 어떤 벡터 공간이고 둘 모두 실수 집합 상에 있다고 가정하겠다. 이 때 함수 T : V -> W가 다음 두 조건을 만족할 때, 우리는 함수 T를 선형 변환(linear transformation)이라 부른다.
          (1) 가산성(Additivity) : 모든 x, y ∈ V 에 대해, T(x + y) = T(x) + T(y)
          (2) 동차성(Homogeneity) : 모든 x ∈ V, c ∈ R(실수 집합)에 대해, T(cx) = cT(x)
       2) 위의 말을 좀 더 상세히 설명하면
          (1) 벡터 공간 : 간단하게 말해서 벡터를 그릴 수 있는 공간이다.
          (2) 실수 집합 : 정확히 표현하면 같은 **체(field)에 속해있다**고 해야 하나, 여기서는 실수만 다루기 때문에 실수 집합 상에 있다고 표현했다.
          (3) **실수 집합 상에 있다**는 말은 V를 이루는 **원소들이 실수**라는 의미이다.
          (4) T : V -> W : 정의역(domain)이 V이고 공역(codomain)이 W인 함수 T라는 의미이다.
4. 비선형 함수를 쓰는 이유 (1)
    - 다음으로 비선형에 대해서 알아본다. 간단하게 선형이 아닌 함수를 비선형(Non-linear) 함수라고 한다.
    - 비선형 함수를 쓰는 이유
       1) 앞에서 언급했듯 딥러닝 모델의 표현력을 향상 시키기 위함이다.
       2) 선형함수는 아무리 쌓아도 선형함수이다.
5. 비선형 함수를 쓰는 이유 (2)
    - 결론적으로, 선형 활성화 함수를 사용한다면, 노드의 개수를 아무리 많이 붙여도 결국 하나의 노드를 사용하는 것과 차이가 없다.
    - 이것은 다시 말해서 선형 활성화 함수를 사용한다면, 모델의 표현력이 떨어지게 된다는 말로 해석할 수 있다.
    - 반면에 비선형 함수를 쓰면 표현력을 높일 수 있다. 이 부분에 대해서는 복잡해 보이는 수식으로 증명을 했는데 못 따라가겠다.
    - 비선형 활성화 함수의 도입은 딥러닝이 비선형 데이터도 수월하게 학습 할 수 있게 해준(즉, 예측가능하게 된) 매우 획기적인 분기점이 된다.
    - 활성화 함수는 아직까지 연구가 진행되고 있고, 많이 써오던 ReLU라는 활성화 함수는 매우 단순한 연산이면서 모델 성능을 향상시켜주어 많은 사랑을 받는 함수이다.
6. 이진 계단 함수
    - 활성화 함수는 크게 3가지로 나눌 수 있다.
       1) 이진 계단 함수(Binary step function)
       2) 선형 활성화 함수(Linear activation function)
       3) 비선형 활성화 함수(Non-linear activation function)
    - 이번에는 이진 계단 함수를 배운다.
    - 이진 계단 함수(Binary step function)라는 이름이 붙은 이유는 간단하다.
       1) 함수로 들어온 입력이 특정 임계점을 넘으면 1(혹은 True)를 출력하고 그렇지 않으면 0을 출력하기 때문이다.
       2) 이런 특성 때문에 이 활성화 함수는 간단한 이진 분류 문제에서 유용하게 쓰인다.
       3) 이진 계단 함수의 치역(range)은 0, 1(0과 1만 나온다는 뜻)이 된다.
       4) 이진 계단 함수는 단층 퍼셉트론(single layer perceptrons)라는 초기의 신경망에서 자주 사용되었다.
       5) 이런 신경망은 선형적으로 구분 가능한(linearly separable) 문제를 구현할 수 있다. 예를 들어 AND gate 또는 OR gate 가 있다.
       6) 하지만 XOR gate를 구현하기엔 어려움이 있다. 왜냐하면 XOR gate의 진리값 그래프를 하나의 선으로 구분할 수 없기 때문이다.
       7) 이를 해결하기 위해선 여러 층을 쌓은 다층 퍼셉트론(multi-layer perceptron, MLP)를 사용하면 해결 할 수 있다.
       8) 이진 계단 함수는 몇 가지 큰 단점이 있다.
          (1) 역전파 알고리즘(backpropagation algorithm)을 사용하지 못한다. 이진 계단 함수는 0에서는 미분이 안 될 뿐더러 0인 부분을 제외하고 미분을 한다고 해도 미분값이 전부 0이 나온다. 때문에 역전파에서 가중치들이 업데이트 되지 않는다.
          (2) 다중 출력은 할 수 없다. 이진 계단 함수는 출력을 1 또는 0으로 밖에 주지 못하기 때문에 다양한 클래스를 구분해야 하는 문제는 해결할 수 없다.
7. 선형 활성화 함수
    - 선형 활성화 함수(linear activation function)은 말 그대로 선형인 활성화 함수이다.
    - 선형 활성화 함수를 사용한 모델은 이진 계단 함수를 사용한 모델과 다르게 다중 출력이 가능하다. 때문에 이진 분류는 물론이고 간단한 다중 분류 문제도 해결할 수 있다. 또한 미분이 가능해서 역전파 알고리즘도 사용할 수 있다.
    - 선형 활성화 함수의 치역은 실수 전체이다.
    - 선형 활성화 함수를 사용한 모델은 선형적으로 구분 가능한 문제를 해결할 수 있다.
    - 선형 활성화를 사용한 단층 퍼셉트론이 정확한 값을 예측하는 것은 아니다.
    - 또한 이 모델로도 XOR gate는 구현할 수 없다. 마찬가지로 선 하나로는 나눌 수 없기 때문이다.
    - 선형 활성화 함수를 사용하면 아무리 층을 쌓아도 결국 하나의 노드를 쓰는 것과 같기 때문에 층을 쌓는다고 해결되지 않는다.
    - 선형 활성화 함수의 한계는 명확하다. 바로 비선형적 특성을 지닌 데이터를 예측하지 못 한다는 것이다.
8. 비선형 활성화 함수 - 시그모이드, Softmax
    - 비선형 활성화 함수(Non-linear activation function)는 비선형인 활성화 함수로 앞에 나온 활성화 함수들의 문제점을 해결할 수 있다.
    - 따라서 비선형 활성화 함수는 역전파 알고리즘을 사용할 수 있고, 다중 출력도 가능하며, 비선형적 특성을 지닌 데이터도 예측할 수 있다.
    - 첫 번째로 볼 비선형 함수는 시그모이드(sigmoid 혹은 logistic)활성화 함수이다.
       1) 시그모이드 함수의 치역은 (0, 1), 즉 0 < x < 1이다.
       2) 시그모이드 함수를 쓰는 주된 이유가 치역이 0과 1사이라는 것이다. 특히 확률을 예측해야하는 모델에서 자주 사용된다.
       3) 시그모이드 함수의 단점에는 두 가지가 있다.
          (1) 시그모이드는 0 또는 1에서 포화된다. 이러면 입력값이 아무리 커도 1보다 작고 0보다 크게 된다. 이러면 그래디언트가 죽는다고 표현하는 현상이 발생하여 모델이 훈련이 되지 않는다.
          (2) 시그모이드는 0이 중심(zero-centered)이 아니다. 이로 인해 훈려의 시간이 오래걸리게 된다. 왜냐하면 노드이 가중치는 모두 양의 방향 또는 음의 방향으로만 업데이트가 되기 때문이다.
       4) 이러한 단점으로 인해 최근에는 자주 사용되지 않는다.
       5) 그래도 위에서 본 AND gate, OR gate, XOR gate는 구현이 가능하나, XOR gate는 제대로 구현하지 못했다. 좀 더 특수한 비선형 함수가 필요하다. (여기서 시그모이드를 1층만 사용했다)
       6) XOR gate를 구현하려면 2차 다항식(quadratic polynomial)을 추가한 시그모이드 함수를 사용하면 가능하다. 또한 layer를 추가해도 XOR gate를 무리 없이 구현할 수 있다.
    - Softmax는 멀까?
       1) 시그모이드는 Binary Classification이다. 즉 2가지 class를 분류할 때 많이 쓰인다. 왜냐하면 0과 1사이의 출력값을 가지고 있기 때문이다.
       2) Softmax는 10가지, 100가지 class 등 class의 수에 제한 없이 각 class의 확률을 구할 때 쓰인다. 
       3) Softmax의 가장 큰 특징은 확률의 성질인 모든 경우의 수(=모든 class)의 확률을 더하면 1이 되는 성질을 가지고 있다. 그래서 Softmax는 모델의 마지막 layer에서 활용이 된다.
9. 비선형 활성화 함수 - 하이퍼볼릭 탄젠트
    - 하이퍼볼릭 탄젠트(tanh, Hyperbolic tengent) 함수는 쌍곡선 함수 중 하나이다.
    - 치역은 (-1, 1), 즉 -1 < x < 1이다.
    - 이 함수는 시그모이드의 약점 중 하나를 극복했다. 함수의 중심이 0이다. 따라서 시그모이드를 사용한 모델보다 더 빠르게 훈련된다.
    - 그러나 이 함수도 -1 ~ 1에서 포화되기에 시그모이드 약점 중 하나는 극복하지 못했다.
10. 비선형 활성화 함수 - ReLU
    - ReLU(Rectified Linear Unit)함수는 최근 가장 많이 사용되고 있는 활성화 함수이다. 식은 max(0, x)이다.
    - 함수의 치역은 [0, ∞)이다.
    - ReLU를 사용한 모델은 하이퍼볼릭 탄젠트를 사용한 모델보다 몇 배 빠르게 훈련이 된다.
    - ReLU는 시그모이드나 하이퍼볼릭 탄젠트처럼 비용이 높은(exponential같은) 연산을 사용하지 않기 때문에 처리 속도가 빠르다.
    - ReLU는 곡선이 포함되지 않아도 비선형 데이터를 잘 잡아낼 수 있는데, 이는 수학적으로 증명이 됬으나, 나는 이해를 할 수 있는 영역이 아닌듯하니 패스하겠다.
    - ReLU의 단점으로는 Dying ReLU가 있다. 이것은 노드가 비활성화 되면 출력을 0으로만 하게 되는 것이다.
       1) 만약 이전 훈련 스텝에서 이 노드의 가중치가 업데이트되어 가중치 w값에 의해 입력값 x에 상관없이 0이하로 나오게 되었다면
       2) 이후의 업데이트에서는 그래디언트가 항상 0이 되어 가중치 업데이트가 일어나지 않게 된다.
       3) 즉, 노드의 출력값과 그래디언트가 0이 되어 노드가 죽어버린다.
       4) 이런 문제는 특히 학습률(learining rate)을 크게 잡을 때 자주 발생한다. 반대로 학습률을 줄어준다면 이 문제는 적게 발생한다.
    - 또 다른 문제로는 0이 중심이 아니다.
11. ReLU의 단점을 극복하기 위한 시도들
    - ReLU의 단점을 극복하기 위해 여러가지 함수가 있으나, 간단히 소개하겠다.
       1) Leaky ReLU : Dying ReLU를 발생시켰던 0을 출력하던 부분을 아주 작은 음수값을 출력하게 만들어 줬다. 나머지는 ReLU와 같다.
       2) PReLU(parameteric ReLU) : Leaky ReLU와 유사하지만 새로운 파라미터를 추가하여 0 미만일 때의 기울기가 훈련되게 했다.
       3) ELU(exponential linear unit) : ReLU의 모든 장점을 포함하며, 0이 중심점이 아니였던 단점과, Dying ReLU 문제를 해결한 함수이다. 그러나 exponential연산이 들어가서 계산 비용이 높아지는 단점이 생겼다.
    - 이 밖에도 다양한 시도들이 존재하며 계속 연구가 진행되고 있다.