소프트맥스 함수(softmax function)
소프트맥스 함수(softmax function)는 입력된 벡터를 정규화하여 각 원소들이 [0, 1] 사이의 값을 가지며, 그 합이 1이 되도록 만드는 함수입니다. 일반적으로 분류 문제에서 출력층의 활성화 함수로 많이 사용됩니다.
소프트맥스 함수는 다음과 같은 수식으로 정의됩니다.
여기서 xi는 입력 벡터의 i번째 원소이며, K는 전체 원소의 개수입니다. 소프트맥스 함수의 출력은 입력 벡터의 각 원소가 소프트맥스 함수를 거쳐 정규화된 결과입니다.
소프트맥스 함수의 주요한 특징은 입력값에 대한 변화에 따라 출력값이 확률 분포의 형태를 가지며, 출력값들의 총합이 1이 된다는 것입니다. 이러한 특징 때문에 소프트맥스 함수는 다중 클래스 분류 문제에서 출력층의 활성화 함수로 널리 사용됩니다.
Xi는 j번째 입력값 / 입력값의 합으로 볼 수 있습니다. (Xj는 함수 입력값)
지수함수가 사용되는 이유는 미분이 가능하도록 하게 함이며, 입력값 중 큰 값은 더 크게 작은 값은 더 작게 만들어 입력벡터가 더 잘 구분되게 하기 위함이다.
소프트맥스 함수 입력으로 어떻게 바꿀 수 있을까?
iris 데이터를 이용한 다중 클래스 분류 모델을 만드는 예시이다. 데이터는 4개의 독립변수를 가지는데 이는 모델이 4차원 벡터를 입력으로 받음을 의미한다. 그런데 소프트맥스 함수의 입력으로 사용되는 벡터의 차원은 분류하고자 하는 클래스의 개수가 되어야 하므로 어떤 가중치 연산을 통해 3차원 벡터로 변환되어야 합니다. 위의 그림에서는 소프트맥스 함수의 입력으로 사용되는 3차원 벡터를 z로 표현하였습니다.
4차원 데이터 벡터를 소프트맥스 함수의 입력 벡터로 차원을 축소하는 방법은 간단하다. 소프트맥스 함수의 입력 벡터 z의 차원수만큼 결과값이 나오도록 가중치 곱을 진행한다. 위의 그림에서 화살표는 총 (4 x 3 = 12) 12개이며 전부 다른 가중치를 가지고, 학습 과정에서 점차적으로 오차를 최소화하는 가중치로 값이 업데이트됩니다.
오차를 어떻게 구할까?
소프트맥스 함수의 출력은 분류하고자 하는 클래스의 갯수만큼 차원을 가지는 벡터로 각 원소는 0과 1 사이의 값을 가지며, 이 각각은 특정 클래스가 정답일 확률을 나타낸다. 즉, 첫 번째 원소인 Xi (1)은 virginica가 정답일 확률, 두번째 원소인 Xi (2)는 setosa가 정답일 확률, 세번째 원소인 Xi (3)은 versicolor가 정답일 확률을 의미한다. 이제 이 예측값과 비교할 수 있는 실제값의 표현 방법이 있어야 한다. 소프트맥스 회귀에서는 실제을 원-핫 벡터로 표현한다.
그림을 보면 viginica, setosa, versicolor가 1,2,3으로 인코딩 된 것을 볼 수 있다. 이에 원-핫 인코딩을 수행하면 virginica는 1로 인코딩 되었기 때문에 첫 번째 벡터만 1로 나타냈고, setosa는 2로 인코딩 되었기 때문에 두 번째 벡터만 1로 나타난 것을 알 수 있다.
데이터의 실제값이 setosa라면, setosa의 원-핫 벡터는 [0 1 0]이다. 이 경우, 예측값과 실제값의 오차가 0이 되는 경우는 소프트맥스 함수의 결과가 [0 1 0]이 되는 것이다. 이 두 벡터 [0.26 0.70 0.04] [0 1 0] 의 오차를 계산하기 위해서 소프트맥스 회귀는 손실함수로 cross-entropy 함수를 사용한다.
손실함수가 최소가 되는 방향으로 가중치를 업데이트 한다.
'프로그램 개발해서 돈벌기 > AI' 카테고리의 다른 글
2023년 AI Open Source 프로젝트 순위 (0) | 2023.08.16 |
---|---|
낙서를 작품으로 바꾸어 주는 AI 서비스 (웹툰을 그려 볼까?) (0) | 2023.07.19 |
Chat GPT 알고리즘 구조 (0) | 2023.04.05 |
U-Net 간략한 개념 설명 (0) | 2023.03.07 |
[무료] AI로 음악 만들기 (0) | 2023.02.28 |
댓글