덕배의 블로그
소프트맥스(softmax) 회귀에 대해서 알아보고 파이토치로 실습 해보자 본문
반응형
소프트맥스 회귀
소프트 맥스를 알기 전에 2개의 선택지 중에서 1개를 고르는 이진 분류에는 로지스틱 회귀를 통해 알아보았다.
근데 3개 이상의 선택지 중에서 1개를 고르는 다중 클래스 분류에서는 소프트맥스 회귀를 사용한다.
이번 글은 소프트맥스에 대해서 알아보고 간단하게 파이토치로 구현해보려 한다.
이진 분류와 로지스틱 회귀에 대해서 다중 클래스 분류, 소프트 맥스 회귀에 대해서 공부하는 게 좋을 듯하다.
밑에 링크를 통해 이진 분류와 로지스틱 회귀부터 알아보자
로지스틱 회귀(Logistic Regression), 시그모이드(sigmoid)에 대해 알고 파이토치로 실습해보자
로지스틱 회귀 이번 글은 로지스틱 회귀와 시그모이드 함수, 교차 엔트로피(크로스 엔트로피)에 대해서 알아보고 파이토치로 간단하게 실습까지 해보려 한다. 예를 들면 어떤 메일을 받았을 때
kdbeom.com
소프트맥스(softmax) 함수란?
벡터가 벡터의 모든 원소의 합이 1이 되도록 원소들의 값을 변환시키는 함수이 기계 학습 및 신경망에서 자주 사용 된다.
- 입력값을 출력값으로 변환
- 출력값은 각 클래스에 대한 확률로 표현
- 출력값의 합은 1이다.
softmax 기능의 작동 방식에 대한 단계별 분석
- 입력 벡터의 각 요소에 대해 수학 상수 e를 사용해 지수 값 계산
- e를 사용하면 양수 보장(확률이기에 음수가 안되어야 함)
- 입력 값이 증가하면 출력 값 증가
- 확률의 상대적 순서를 유지
- 지수 값 합계
- 확률 계산
- 출력 확률의 합이 1이 되어야 한다.
소프트맥스 함수 특징
- 기계 학습, 다중 클래스 분류 작업에서 사용
- 신경망에서 소프트 맥스 함수는 종종 최종 계층에 적용되어 다양한 클래스에 대한 확률 분포를 생성
소프트맥스 회귀 파이토치 실습 코드
- 비용 함수도 로지스틱 회귀와 같은 크로스 엔트로피이다.
크로스 엔트로피가 무엇인지 궁금하다면 알아보도록 하자.
import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
torch.manual_seed(1) #난수 발생 순서와 값을 동일하게 보장하는 특징
x_train = [[1, 2, 1, 1],
[2, 1, 3, 2],
[3, 1, 3, 4],
[4, 1, 5, 5],
[1, 7, 5, 5],
[1, 2, 5, 6],
[1, 6, 6, 6],
[1, 7, 7, 7]]
y_train = [2, 2, 2, 1, 1, 1, 0, 0]
x_train = torch.FloatTensor(x_train)
y_train = torch.LongTensor(y_train)
model = nn.Linear(4, 3)
optimizer = optim.SGD(model.parameters(), lr=0.1)
nb_epochs = 1000
for epoch in range(nb_epochs + 1):
# H(x) 계산
prediction = model(x_train)
# cost 계산, F.log_softmax()와 F.nll_loss() 합친 게 F.cross_entropy
cost = F.cross_entropy(prediction, y_train)
# cost로 H(x) 개선
optimizer.zero_grad() #기울기 0으로 초기화를 해야 이전에 계산된 기울기 값이 누적이 안됨
cost.backward() #w와 b에 대한 기울기 계산
optimizer.step() #lr을 곱하면서 업데이트
# 20번마다 로그 출력
if epoch % 100 == 0:
print('Epoch {:4d}/{} Cost: {:.6f}'.format(
epoch, nb_epochs, cost.item()
))
이렇게 소프트맥스 함수가 무엇인지 알아보았다.
'인공지능' 카테고리의 다른 글
인공지능 딥러닝에서의 과적합, 과소 적합에 대해서 알아보자 (0) | 2023.08.29 |
---|---|
딥러닝 MNIST 알아보고 예제를 파이토치로 실습해보자 (0) | 2023.08.23 |
원-핫 인코딩(One-Hot Encoding)에 대해 알아보자 (0) | 2023.08.20 |
OAK-D PoE 카메라에서 yolov8 커스텀 해보기 (0) | 2023.08.19 |
로지스틱 회귀, 시그모이드와 비용함수(크로스 엔트로피)에 대해 알고 파이토치로 실습해보자 (0) | 2023.08.18 |