이번에는 머신러닝의 기본 핵심 개념인 Activation Function(활성화 함수) 중
Classification의 Output을 위해 자주 사용되는 Sigmoid와 Softmax에 대해 정리를 해보도록 하자.
우선 활성화 함수란, 간단하게 설명하면 신경망의 출력(Output)을 결정하는 하나의 식이다.
신경망에서는 노드에 들어오는 값들에 대해 바로 다음 레이어로 전달하는 것이 아니라, 활성화 함수를 통과시킨 후 전달한다.
활성화 함수는 입력 신호의 총합을 출력 신호로 변환하는 함수로, 입력 받은 신호를 얼마나 출력할지 결정하고
네트워크에 층을 쌓아 비선형성(Non-Linear)을 표현할 수 있도록 해준다.
활성화 함수는 주로 비선형인데, 그 이유는 선형 함수를 사용할 시 층을 깊게하는 의미가 줄어들기 때문이다.
위 사진과 같이 2개의 Hidden Layer와 Input Layer, Output Layer로 이루어진 신경망이 있다고 가정해보자.
위 신경망에서 Output의 계산식은 다음과 같다.
즉, 가중치(Weight)와 편향(Bias)만으로 이루어진 선형 연산이 된다. 이는 가설 공간에 제약이 생긴다는 얘기인데,
Linear Layer를 깊게 쌓아도 여전히 하나의 선형 연산이기 때문에 Layer를 깊게 쌓는 이점이 사라지는 것이다.
따라서, 신경망에서 Layer를 쌓는 이점을 보고 싶다면 Activation Function으로는 반드시 비선형 함수를 사용해야 한다.
대표적인 활성화 함수들의 그래프이다. 그래프의 모습으로만 봤을때 ReLU를 제외한 나머지 함수들은 확실히
연속적인 값들로 이루어진 비선형 함수로 보이지만, ReLU 함수는x > 0일때 선형 함수로 동작하지만
음수값에 대해서는 비선형으로 동작하며 이론적으로 값을 근사시킬때
ReLU 함수를 추가하면 그 정밀도가 향상될 수 있기 때문이다.
또한 선형에 가까운 ReLU의 이러한 특성을 통해 기울기 기반 Optimizer로 선형 모델을 쉽게 최적화할 수 있다.
서론이 조금 길어졌는데, 이번 포스팅에서는 Classification에서 주로 사용되는 Sigmoid와 Softmax에 대해 알아본다.
우선 Sigmoid와 Softmax를 알기 위해 우리는 Logit 이라는 개념을 알아야하는데 Logit을 알기 전, Odds에 대해 먼저 알아보자.
Odds는 실패 비율 대비 성공 비율을 의미한다. p를 성공 확률로 볼때, 실패할 확률은 자연스럽게 1 - p가 된다.
그리고 이것을 분수로 나타내면, 실패할 확률 대비 성공할 확률을 알 수 있는데 이를 Odds라고 한다.
식과 그래프로 나타내면 다음과 같다.
Odds의 그래프를 보면 0에 수렴하고 있고, 확률이 1에 가까워질수록 Odds의 값이 무한히 증가하는 모습을 보여주고 있다.
이는 대칭적이지도 않고, 무한히 증가하기 때문에 이 Odds에 Log를 적용한다.
이 Odds에 Log를 적용한 것을 Logit이라고 하며, Logit의 식은 다음과 같다.
이 로그식은 l = log(p) - log(1-p)로 나타낼 수 있고, p = 0.5가 되면 0의 값을 가지게 된다는 것을 알 수 있다.
이를 통해 Logit은 0.5일때 0의 값을 가지며 0.5를 기준으로 대칭임을 알 수 있다.
그 뿐만 아니라, Logit의 값은 음의 무한대에서 양의 무한대까지의 범위를 가지고 있다라는 사실을 알게 된다.
이 Logit의 값의 역함수를 유도해보면 유도 과정은 다음과 같다.
1. l의 값에 e를 취해준다. (이론상 e가 아닌 2, 3을 취해줘도 되지만, Log 적용의 편리함을 위함)
2. 이를 정리해준다.
3. p에 관해 나타낸다.
4. 그럼 최종적인 결과로 아래와 같은 식이 유도된다.
즉, p(확률)을 Logit 값으로 나타낼 수 있게 되는 것이다. 이때 Logit은 - 무한대 ~ + 무한대이니 실수 범위를 나타낼 수 있게 된다.
한마디로, 실수 범위의 Logit이 들어오면 확률 변수 p를 출력하게 되는것이고 이는 Sigmoid와 동일한 식과 역할을 하게 된다.
그래서 우리는 뉴런, 즉 Affine Function을 통과한 값은 실수 범위이고
이 값을 Logit으로 다루면 그 값을 통한 확률을 출력으로 받을 수 있게된다.
따라서 Sigmoid 함수를 Classification의 가장 마지막 출력 레이어에서 활성화 함수로 사용하게 되면,
하나의 클래스의 확률 변수를 얻을 수 있게 되는 것이다.
단, Sigmoid를 Multi Classification에 사용하게 되면 동작 특성상 모든 클래스에 대한 예측 확률 변수의 총합이 1이 되지 않고
각 클래스의 확률에 대한 값을 출력하기 때문에 고양이 사진에 대해 고양이 0.8, 강아지 0.5, 햄스터 0.4와 같은 결과값을 보여준다.
이러한 이유로 Sigmoid Function은 Binary Classification에서 사용되는 것이다.
위의 내용에서 Sigmoid Function에 대해 알아보았고, 이번엔 Softmax Function에 대해 알아보자.
Softmax Function은 보통 Multiclass Classification(다중 클래스 분류)에서 주로 사용된다.
Multiclass Classification에서는 아래 그림과 같이 각 클래스에 대한 확률이 표현되어야하고, 그 총합은 1이 되어야한다.
그렇다면 마지막 레이어의 뉴런 개수는 아웃풋으로 나타낼 클래스의 개수(K)와 일치해야하며,
이들은 각각의 확률로써 해석이 되어야한다는 사실을 알 수 있다.
Softmax의 식은 다음과 같다.
K개의 Logit이 들어오면, 이를 각각의 Probability(확률)로 바꿔주고, 모든 확률의 합은 1이 되게 해야한다.
그렇다면 p2는 어떤 값을 가지게 될까?
위 사진처럼 K=4라고 가정해볼때, p2가 될 확률은 e^l2에 전체 e^l1 ~ e^lK 까지의 합을 나누어 주게 된다.
식에서 볼 수 있듯이 합을 나누어 각 클래스에 대한 확률 변수를 표현하는 부분을 제외하고는
Sigmoid Function과 수학적으로는 동일한 원리로 동작한다.
이렇게 다중 클래스 분류에서의 Softmax 함수에 대한 사용과 이진 클래스 분류에서의 Sigmoid 함수의 사용
그리고 동작 방식에 대해 알아보았다.
가장 핵심은, Softmax와 Sigmoid 모두 수학적 원리는 유사하며 Logit이 입력으로 들어오고
이에 대한 확률 변수 p가 출력으로 나타나는 것이라고 할 수 있겠다.
'Study' 카테고리의 다른 글
[Computer Vision] Image Segmentation이란? (1) | 2023.01.18 |
---|---|
[YOLOv8] 새로운 YOLO 모델, YOLOv8 Review (0) | 2023.01.16 |
[ResNet] Deep Residual Learning for Image Recognition (1) | 2023.01.13 |