본문 바로가기
자연어 처리

[딥러닝을 이용한 자연어 처리 입문] 소프트맥스 회귀

by 나연하야 2023. 4. 16.

소프트맥스 회귀

1. 소프트맥스 함수

- 소프트맥스 함수는 선택해야 하는 선택지의 총 개수가 k라고 할 때, k차원의 벡터를 입력받아 각 클래스에 대한 확률을 추정함

예시) 꽃받침 길이, 꽃받침 넓이, 꽃잎 길이, 꽃잎 넓이로부터 setosa, versicolor, virginica라는 3개의 춤종 중 어떤 품종인지를 예측하는 문제

- 소프트맥스를 구하는 식은 아래와 같음

- 어떤 꽃의 꽃받침 길이, 꽃받침 넓이, 꽃잎 길이, 꽃잎 넓이에 대한 정보로 setosa, versicolor, virginica이 될 확률이 각각 0.26, .070, 0.04가 나왔고, 실제 품종이 versicolor이라고 하면 아래의 그림과 같이 표현할 수 있음

- 이와 같이 실제값을 원-핫 인코딩으로 표현할 경우 단어의 유사성은 고려될 수 없다는 문제점을 가짐

2. 비용 함수 - 크로스 엔트로피 함수

- 소프트맥스 회귀에서는 비용함수로 크로스 엔트로피 함수를 사용함

- 크로스 엔트로피 함수는 아래와 같으며, y_j는 실제값 원-핫벡터의 j번쨰 인덱스를 의미하며, p_j는 샘플 데이터가 j번째 클래스일 확률임

- 정확하게 예측한 경우를 생각해보면 -log(1)=0이 됨 

- 위의 식에서 k가 2라면 로지스틱 회귀에서 배운 크로스 엔트로피 함수임

 

3. 소프트맥스 회귀 실습

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

model = Sequential()
model.add(Dense(3, input_dim=4, activation='softmax')) # 출력의 차원 = 3, 입력의 차원 = 4
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) # 오차함수로 크로스 엔트로피 함수 사용
history = model.fit(X_train, y_train, epochs=200, batch_size=1, validation_data=(X_test, y_test))

출처: 유원준/안상준, 딥러닝을 이용한 자연어 처리 입문-1권, p222-p238.