Notice
Recent Posts
Recent Comments
Link
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
Today
Total
관리 메뉴

코딩하는 바나나

Softmax 본문

Machine Learning

Softmax

유기농바나나칩 2023. 2. 1. 19:00

앞서 우리는 두가지의 class를 가지는 데이터를 구분하는 logistic 모델을 살펴 보았다. 이번에는 두가지 이상의 class를 같는 데이터를 구분하는 모델을 살펴보자. 

 

세가지의 class A,B,C를 가지는 데이터가 있다고 생각해보자. 우리는 logistic 모델 3개를 사용하여 데이터를 구분 할 수 있다. A인 것과 아닌것, B인 것과 아닌 것, C인 것과 아닌것을 구부하는 3개의 logistic 모델이다. 

 

3가지의 특징과 3가지의 class를 가지는 데이터를 생각해보자

x1 x2 x3 a b c
3 1 3 1 0 0
3 2 1 0 1 0
1 3 1 0 0 1

 위의 데이터의 3가지 클래스가 one hot encoded 되어있다. 

X -> ㅁ -> sigmoid -> Ya

X -> ㅁ -> sigmoid -> Yb

X -> ㅁ -> sigmoid -> Yc

이러게 3개의 logistic 모델에 데이터를 적용하게 되면 3개의 결과가 나오는데 이것을 우리는 각 클래스가 될 확률을 나타낸다고 보고 가장 큰 값을 해당 데이터의 클래스로 정하면 될 것이다. 그리고 해당 데이터의 one hot encoding된 레이블을 보고 cost function을 계산 할 수 있을 것이다. 

 

이렇게 3가지로 나눠서 표현한 것을 행렬 곱을 이용해서 하나의 행렬로 나타 낼 수 있다.

3개의 각 모델의 가중치를 하나의 행렬로 나타내보았다.

Wa1 Wa2 Wa3
Wb1 Wb2 Wb3
Wc1 Wc2 Wc3
x1
x2
x3

하나의 데이터 또한 위와 같이 행렬로 나타낼 수 있다. 이제 두 행렬을 곱한 결과는 3X1 행렬이 나오게 된다. 이를 sigmoid까지 적용해 준것을 y1,y2,y3이라고 하자

이제 나온 결과를 확률의 형태로 수정해 주자. 각 y1,y2,y3은 다음과 같은 확률 식을 적용해 준다. 

y1 / (y1 + y2 + y3)
y2 / (y1 + y2 + y3)
y3 / (y1 + y2 + y3)

결과적으로 위의 행렬이 나오게 된다. 이 행렬의 각 요소는 확률의 형태로 3요소를 합하면 1이되며 우리는 가장 큰 값을 가지는 요소를 해당 데이터의 클래스로 생각 할 수 있다. 즉 만약 Y값이 [0.7,0.2,0.1]이면 첫번째 값이 가장 크니 A클래스로 분류하게 되는 것이다.

 

Cost Function - Cross entropy


D(Si,Li) = -Σ(Li * log(Si))

 

cost fucntion은 위의 식과 같다. 여기서 Si는 우리가 예측한 Y값 즉 확률값을 의미 하고 Li는 원래 레이블의 값을 의미한다.

 

여기서 Li의 역할은 해당 데이터의 실제 클래스의 확률 값만 보기 위해서이다. 예를 들어 [0.7, 0.2, 0.1]로 우리가 데이터를 예측하였을 때 실제 데이터의 클래스가 A라고 하자. 그렇다면 해당 데이터의 one hot encoding 된 값은 [1,0,0] 일 것이다. 이 때 A를 의미하는 값 이외의 값들은 0을 가지기 때문에 cost function에 영향을 주지 않는다.

 

Si의 역할은 우리가 예측한 확률이 얼마나 1에 가까운지를 계산하는 것이다. cost funciton의 시그마 기호 앞에 -가 잇는 것을 확인 할 수 있다. 따라서 식을 -log(Si)를 곱해주는 것으로 변형 할 수 있는데 -log(x) 함수의 0과 1사이의 구간을 보면 0으로 다가가면 무한대로 발산하고 1로 다가가면 0으로 수렴한다. 즉, 우리가 확률을 잘 예측하여 A일 확률이 1에 가까우면 cost가 작아진다. 반면에 우리가 잘 못 예측하여 A일 확률이 0에 가까워 질수록 cost는 가파르게 증가하게 된다. 이를 크로스 엔트로피 함수라고 부른다.

 

이전에 logistic regression에서 살펴 보았던 cost function과 사실 본질 적으로 같은 함수이다. logistic regression에서의 cost function은 아래와 같다.

 

Cost = -y * logH(X) - (1 - y) * log(1 - H(X)

 

여기서는 두가지의 클래스 밖에 없기 때문에 각 클래스를 y와 1-y로 나타냈다. 이를 각각 y1, y2로 치환해주고 H(x) 와 1 - H(x)를 p1, p2로 치환해주자. 

 

Cost = -y1 * logP1  - y2 * logP2 = -Σ yi * log pi

 

크로스 엔트로피 함수와 같은 형태를 가진다!

'Machine Learning' 카테고리의 다른 글

Logistic Regression  (1) 2023.01.18
Linear Regression  (0) 2023.01.17
Machine Learning  (0) 2023.01.15