신경망에서 값을 출력받는 3가지 방법
신경망의 출력층에서는 문제의 유형에 따라 적절한 활성화 함수를 사용하여 최종 출력을 결정한다. 출력을 받는 방법은 크게 3가지로 나눌 수 있다.
1. Value로 출력받기 (회귀)
활성화 함수 없음 - 입력값을 그대로 출력한다.
특징:
- 모든 실수값을 출력할 수 있다
- 연속적인 값을 예측하는 문제에 사용된다
- 활성화 함수가 없어 계산이 빠르다
용도:
- 회귀 문제: 주택 가격 예측, 온도 예측, 매출 예측, 혈중지방 예측 등
- 손실 함수:
mse(Mean Squared Error) 또는mae(Mean Absolute Error)
예시:
# TensorFlow/Keras 예시
model = tf.keras.Sequential([
tf.keras.layers.Dense(1) # 활성화 함수 없음
])
model.compile(optimizer='adam', loss='mse')
2. 이진 분류: Sigmoid
Sigmoid 함수를 사용하여 0과 1 사이의 확률값을 출력한다.
특징:
- 출력 범위: 0과 1 사이의 값
- 출력값을 확률로 해석할 수 있다
- 출력값이 0.5보다 크면 양성 클래스, 작으면 음성 클래스로 분류한다
용도:
- 이진 분류: 스팸 메일 분류, 질병 진단, 고객 이탈 예측 등
- 손실 함수:
binary_crossentropy - 출력 뉴런 수: 1개
예시:
# TensorFlow/Keras 예시
model = tf.keras.Sequential([
tf.keras.layers.Dense(1, activation='sigmoid')
])
model.compile(optimizer='adam', loss='binary_crossentropy')
3. 다중 분류: Softmax
Softmax 함수를 사용하여 여러 클래스에 대한 확률 분포를 출력한다.
특징:
- 각 출력값은 0과 1 사이이며, 모든 출력의 합은 1이다
- 각 클래스에 대한 확률 분포를 나타낸다
- 가장 높은 확률을 가진 클래스를 예측 결과로 선택한다
용도:
- 다중 분류: 이미지 분류(강아지, 고양이, 새 등), 감정 분석(긍정, 중립, 부정) 등
- 손실 함수:
categorical_crossentropy또는sparse_categorical_crossentropy - 출력 뉴런 수: 클래스 개수만큼
예시:
# TensorFlow/Keras 예시 (10개 클래스 분류)
model = tf.keras.Sequential([
tf.keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer='adam', loss='categorical_crossentropy')
요약
| 방법 | 활성화 함수 | 출력 형태 | 용도 | 손실 함수 |
|---|---|---|---|---|
| Value | 없음 (Linear) | 실수값 | 회귀 | mse, mae |
| 이진 분류 | Sigmoid | 0~1 확률 | 이진 분류 | binary_crossentropy |
| 다중 분류 | Softmax | 확률 분포 (합=1) | 다중 분류 | categorical_crossentropy |